J'utilise ffmpeg pour ajouter un JPG à un MP4 pour en faire un MP4.
Comme il n'y a qu'une seule image pour faire la vidéo, je me demande s'il existe un moyen de réduire la taille de la vidéo?
Commander:
$ ffmpeg -loop 1 -i image.jpg -i audio.mp3 -shortest -c:a copy output.mp4
Résultats:
image.jpg
= 26,7 K (image pas si claire)audio.mp3
= 64,6 M (54 minutes)output.mp4
= 80,6 M (le résultat vidéo n'est pas si clair, la musique est toujours bonne)
Est-ce une taille raisonnable pour MP4?
Réponses:
Pour télécharger sur YouTube
H.264: plus petits fichiers
Cette méthode utilise libx264 pour coder la vidéo H.264. Il est plus lent que la méthode de copie de flux ci-dessous, mais peut potentiellement générer une taille de fichier plus petite.
Copie de flux: processus le plus rapide
Cette méthode ne fait que diffuser des copies (sans encodage) de l'image dans le conteneur MKV. C'est super rapide, mais si la taille est importante, la méthode ci-dessus peut produire un fichier plus petit.
YouTube accepte à peu près n'importe quoi.Ces commandes utilisent donc quelques astuces pour accélérer l'encodage ou réduire la taille du fichier, et pour maintenir une qualité élevée, car YouTube réencodera tout ce que vous lui donnerez. Votre lecteur ne l'aimera probablement pas, mais YouTube l'appréciera.
Dans ces exemples, une fréquence d'images très faible est utilisée, qui devrait être traitée plus rapidement que la valeur par défaut de 25 ips.
Compatibilité la plus large pour tous les joueurs
Cela devrait jouer sur à peu près tout , sauf très anciens appareils (changement
-profile:v main
de-profile:v baseline
si tel est le cas).Si votre entrée audio est déjà AAC, passez
-c:a aac
à-c:a copy
pour éviter un ré-encodage inutile.Le temps d'encodage sera plus long et la taille du fichier sera plus grande que les commandes YouTube ci-dessus.
Voir FFmpeg Wiki: H.264 pour plus d'informations.
la source
Unrecognized option 'preset'. Error splitting the argument list: Option not found
ffmpeg
commande complète et la sortie console complète de la commande, puis fournissez le lien dans un commentaire.Avec seulement les informations que vous avez fournies à ce que je peux penser.
Allons par morceaux:
Ce dont vous parlez, ce sont les images par seconde (ips) et non le débit binaire. Et vous avez raison dans le concept. Beign juste une image fixe 1 fps ne serait pas un problème.
Dans ce cas, la taille de l'image n'aurait pas un poids significatif car nous avons affaire à une seule image fixe. S'il s'agissait d'une vidéo de haute qualité, c'est un problème différent.
La résolution que vous dites est 1280x720.
Je ne vois pas l'intérêt de l'
-loop 1
option ici, cela ne fera que ralentir le processus. L'avez-vous utilisé-shortest
car le fichier contient plus d'un flux d'entrée? Si non, il n'y a aucune raison de l'utiliser. Puisque vous l'avez utilisé,-acodec copy
je devrai supposer que vous ne voulez pas le ré-encoder.Pour une sortie de 720p 1fps sans ré-encodage et sans toucher au débit:
ffmpeg -framerate 1 -i input.mp3 -i cover.jpg -c:a copy -s 1280x720 output.mp4
Dans le cas où il a plus d'un flux d'entrée et que vous souhaitez que ffmpeg termine l'encodage sur le flux le plus court, alors:
ffmpeg -framerate 1 -i input.mp3 -i cover.jpg -c:a copy -s 1280x720 -shortest output.mp4
Maintenant, si vous devez changer le bitrate (disons 1024k comme exemple);
ffmpeg -framerate 1 -i input.mp3 -i cover.jpg -c:a copy -b:v 1024k -bufsize 1024k -s 1280x720 output.mp4
Voir: Limiter le débit binaire de sortie
Notez que si vous voulez toujours une vidéo de plus petite taille à un moment donné, vous devrez sacrifier la qualité pour y parvenir. Et d'autres façons de le faire impliquent un ré-encodage avec une compression avec perte.
D'après ce que vous dites, les informations que vous fournissez et ce que vous essayez de faire, je pense que votre objectif est d'incorporer la pochette d'album au format mp3. Si tel est votre objectif, cela correspondrait mieux à vos besoins:
ffmpeg -i input.mp3 -i cover.jpg -map_metadata 0 -map 0 -map 1 output.mp3
Si rien ici ne correspond à vos demandes, veuillez donner plus d'informations.
la source
-framerate
comme option d'entrée et à supprimer la sortie-r
: sinon le framerate d'entrée par défaut de 25 sera utilisé, puisffmpeg
supprimera les images à atteindre-r 1
. Si vous déclarez simplement la fréquence d'images en entrée, la sortie utilisera la même fréquence d'images.