J'exécute la commande suivante:
ffmpeg -i audio.mp3 -ar 44100 -f image2 -i logo.jpg -r 15 -b 1800 -s 640x480 foo.mov
Qui sort avec succès une vidéo avec mon audio enregistré et une image dessus.
Lorsque j'essaie de le télécharger sur YouTube, il ne parvient pas à être traité, quels que soient les formats que j'essaie: .mov, .avi, .flv, .mp4
Y a-t-il un paramètre qui me manque dans ce qui précède qui générerait un format que Youtube accepterait? J'ai essayé de parcourir la documentation de ffmpeg mais je suis au dessus de ma tête.
J'ai fait une expérience en mettant une vidéo de 2 secondes avec un mp3 de 30 secondes. Lorsque j'ai téléchargé sur YouTube, la vidéo résultante n'a duré que 2 secondes. Il se peut donc que YouTube ne regarde que la longueur de la piste vidéo, et comme une image n'est qu'une trame longue ou autre, peut-être que cela la fausse.
Un morceau de code qui fonctionne pour moi, à partir d'un autre forum:
la source
J'ai pris le code de Pavel, qui a fonctionné pour moi aussi, et je l'ai raccourci en réduisant les options inutiles:
il s'agit d'une forme générale qui fonctionne avec n'importe quelle image et fichier audio en entrée et produit un fichier vidéo en sortie.
Cela dit, étant donné que votre flux vidéo sera constitué d'une seule image répétée indéfiniment, vous pouvez définir une faible fréquence d'images (c'est-à-dire le nombre d'images qui apparaît en une seconde) avec
-r
. Notez que tous les conteneurs de sortie n'autorisent pas de faibles fréquences d'images. Celui qui le fait estavi
, donc vous pourriez faire:cela créerait un fichier vidéo avec une fréquence d'images de 0,1 (c'est-à-dire une image toutes les 10 secondes) au lieu de la valeur par défaut de 25. Cela affectera la taille du fichier mais pas la qualité vidéo. Finalement, vous pouvez régler le débit audio pour obtenir une meilleure qualité audio avec
-ab
. Voici la commande que j'utilise pour créer ce type de vidéos sur YouTube:la source
ffmpeg -loop 1 -shortest -r 0.1 -i audio.mp3 -i image.jpg output.avi
mais j'ai obtenu «Boucle d'option introuvable». Des idées?ffmpeg -i <audio file> -loop 1 -i <image file> -shortest <output video file>
avec avconv:
la source
-shortest
options de sortie au lieu de déclarer manuellement les heures (utilisez égalementffmpeg
au lieu deavconv
si possible).Je l'ai fait fonctionner après de nombreuses expérimentations: https://www.youtube.com/watch?v=qjlDT819Q3s
Convertissez les images en vidéo selon https://trac.ffmpeg.org/wiki/Create%20a%20video%20slideshow%20from%20images :
ffmpeg -framerate 1/20 -i png/img-%03d.png -c:v libx264 -vf "fps=25,format=yuv420p" png.mp4
Ici, j'utilise plusieurs images et je les change toutes les 20 secondes.
Concaténer suffisamment d'exemplaires de la vidéo ci-dessus pour couvrir la durée de votre audio selon https://trac.ffmpeg.org/wiki/Concatenate . D'autres solutions, comme s'attendre
ffmpeg -i wav.wav -i png.mp4 youtube.mp4
à faire la bonne chose, ont finalement été rejetées par YouTube (également, des joueurs tels que VLC sont confus et ne peuvent pas rechercher correctement). Je suppose que les positions temporelles doivent être ajustées dans les copies, ce quiffmpeg
ne fonctionne pas, sauf si elles sont concaténées:ffmpeg -f concat -i pngs.txt -c copy pngs.mp4
(où le fichier
pngs.txt
est fait à la main pour contenir autant de copies que nécessaire: copies = longueur audio / longueur vidéo)Mélangez votre audio avec la vidéo obtenue en 2 selon https://www.virag.si/2015/06/encoding-videos-for-youtube-with-ffmpeg/ :
ffmpeg -i pngs.mp4 -i wav.wav -shortest -codec:v libx264 -crf 21 -bf 2 -flags +cgop -pix_fmt yuv420p -codec:a aac -strict -2 -b:a 384k -r:a 48000 -movflags faststart youtube.mp4
Maintenant, le fichier
youtube.mp4
doit être accepté par YT.la source