Diaporama FFMPEG à partir d'images – un seul cadre montré

Je suis débutant avec ffmpeg.

Je veux convertir plusieurs images en diaporama et je viens avec cette commande:

ffmpeg -y -r 1/5 -i *.jpg -r 25 output.mp4 

Assez simple. Cependant, la vidéo ne semble avoir qu'un seul cadre (il est trop rapide à reconnaître pour moi)

Voici l'Ouput de la commande ci-dessus:

  ffmpeg version 0.8.9-4:0.8.9-0ubuntu0.12.04.1, Copyright (c) 2000-2013 the Libav developers built on Nov 9 2013 19:12:07 with gcc 4.6.3 *** THIS PROGRAM IS DEPRECATED *** This program is only provided for compatibility and will be removed in a future release. Please use avconv instead. Input #0, image2, from 'swirl3777.jpg': Duration: 00:00:05.00, start: 0.000000, bitrate: N/A Stream #0.0: Video: mjpeg, yuvj444p, 1600x1200 [PAR 72:72 DAR 4:3], 0.20 tbr, 0.20 tbn, 0.20 tbc Incompatible pixel format 'yuvj444p' for codec 'mjpeg', auto-selecting format 'yuvj420p' [buffer @ 0x86e2040] w:1600 h:1200 pixfmt:yuvj444p [avsink @ 0x86e8920] auto-inserting filter 'auto-inserted scaler 0' between the filter 'src' and the filter 'out' [scale @ 0x86e8d80] w:1600 h:1200 fmt:yuvj444p -> w:1600 h:1200 fmt:yuvj420p flags:0x4 Incompatible pixel format 'yuvj444p' for codec 'mjpeg', auto-selecting format 'yuvj420p' [buffer @ 0x86e8c00] w:1600 h:1200 pixfmt:yuvj444p [avsink @ 0x87159a0] auto-inserting filter 'auto-inserted scaler 0' between the filter 'src' and the filter 'out' [scale @ 0x86f1860] w:1600 h:1200 fmt:yuvj444p -> w:1600 h:1200 fmt:yuvj420p flags:0x4 Incompatible pixel format 'yuvj444p' for codec 'mpeg4', auto-selecting format 'yuv420p' [buffer @ 0x86f17c0] w:1600 h:1200 pixfmt:yuvj444p [avsink @ 0x870f4a0] auto-inserting filter 'auto-inserted scaler 0' between the filter 'src' and the filter 'out' [scale @ 0x8737e60] w:1600 h:1200 fmt:yuvj444p -> w:1600 h:1200 fmt:yuv420p flags:0x4 Output #0, image2, to 'swirl3786.jpg': Metadata: encoder : Lavf53.21.1 Stream #0.0: Video: mjpeg, yuvj420p, 1600x1200 [PAR 1:1 DAR 4:3], q=2-31, 200 kb/s, 90k tbn, 0.20 tbc Output #1, image2, to 'swirl3787.jpg': Metadata: encoder : Lavf53.21.1 Stream #1.0: Video: mjpeg, yuvj420p, 1600x1200 [PAR 1:1 DAR 4:3], q=2-31, 200 kb/s, 90k tbn, 0.20 tbc Output #2, mp4, to 'output.mp4': Metadata: encoder : Lavf53.21.1 Stream #2.0: Video: mpeg4, yuv420p, 1600x1200 [PAR 1:1 DAR 4:3], q=2-31, 200 kb/s, 25 tbn, 25 tbc Stream mapping: Stream #0.0 -> #0.0 Stream #0.0 -> #1.0 Stream #0.0 -> #2.0 Press ctrl-c to stop encoding frame= 1 fps= 0 q=10.2 Lq=10.2 q=9.5 size= -0kB time=0.04 bitrate= -4.4kbits/s video:584kB audio:0kB global headers:0kB muxing overhead -100.003680% 

J'ai également essayé avconv mais c'est la même sortie, même la même taille de fichier. Si je modifie les valeurs -r à quelque chose de ridicule comme 3434321, il obtient toujours la même taille de fichier. Si j'ajoute -b 512k oder -b 1024, il obtient toujours la même taille de fichier … Il semble que les options soient ignorées d'une manière ou d'une autre.

Les trois images du dossier sont détectées correctement.

Y a-t-il des problèmes avec le format de pixel incompatible?

Je suis ici sur Ubuntu 12.04 ffmpeg version 0.8.9-4: 0.8.9-0ubuntu0.12.04.1

Je suppose que ce que j'aurais pu faire de mal ici? TIA

Glob

ffmpeg partir de FFmpeg prend en charge les modèles glob , de sorte que vos fichiers d'entrée peuvent être nommés presque tout aussi longtemps qu'ils sont dans l'ordre souhaité:

 ffmpeg -framerate 1/5 -pattern_type glob -i "*.jpg" -vf "fps=25,format=yuv420p" out.mp4 

Ubuntu utilise avconv et le buggy, faux " ffmpeg " de Libav, une fourchette de FFmpeg, et ceux-ci ne prennent pas en charge les modèles glob. Voir Qui peut me dire la différence et la relation entre ffmpeg, libav et avconv?

Obtenez ffmpeg

Pour obtenir ffmpeg , vous pouvez simplement télécharger une version Linux de ffmpeg ou suivre un guide étape par étape pour compiler ffmpeg .


Problèmes potentiels

La première image est ignorée

Il existe des problèmes non résolus ou des incohérences impliquant -r et le filtre vidéo fps . Parfois, la première image d'entrée semble être sautée ou affichée pour une seule image. Vous pouvez utiliser le filtre fps pour éviter le problème de saut comme indiqué dans mon exemple ci-dessus. Voir les billets n ° 1578 et n ° 3164 pour plus d'informations.

La dernière image est ignorée

Il se peut que la dernière image soit ignorée ou affichée pour une seule image. Je n'ai pas trouvé une solution élégante à ce comportement, mais vous pouvez simplement faire une copie du dernier fichier d'image pour compenser.

Encore plus de saut

Si vos images d'entrée ne disposent pas du même format de pixels et / ou de la taille de l'image, alors ffmpeg peut ignorer un nombre indéterminé de trames. Assurez-vous que toutes les images d'entrée sont similaires pour éviter cela. Vous pouvez voir la sortie de la console qui mentionnera toutes les différences de fichier d'entrée.

La vidéo MP4 de sortie ne fonctionne pas

Utilisez un joueur moins crappy ou utilisez le filtre de format comme indiqué dans mon exemple ou utilisez l'option de sortie -pix_fmt yuv420p . Sinon, ffmpeg tentera d'éviter ou de minimiser le sous-échantillonnage chrome (en fonction de votre saisie, de l'encodeur que vous utilisez, de votre version ffmpeg et des options de codage que vous utilisez), et bien que cela puisse être utile au sens technique, il peut créer un Sortie non jouable par les joueurs non-FFmpeg.

Essaye ça:

 ffmpeg -y -f image2 -r 1/5 -i img%03d.jpg -pix_fmt yuv420p -r 25 output.mp4 

Vos jpegs doivent être numérotés séquentiellement au format img001.jpg … img009.jpg. Le %03d représente une séquence de 3 chiffres: 2 points de départ pour commencer. Si vous aviez img01.jpg à img 09.jpg, vous utiliserez img%02d.jpg . La syntaxe *.jpg ne fonctionnera pas.