J'ai quelques images et j'aimerais faire un gif animé avec ffmpeg. Les images ont des noms comme:
837_1.png
838_1.png
...
J'essaie de ne pas comprendre la - i option de ligne de commande de ffmpeg mais je tombe en panne contre certains problèmes.
Si je ne spécifie rien, il me demande de remplacer les fichiers:
ffmpeg -i * -vcodec libx264 out.mp4
ffmpeg version 1.2.1 Copyright (c) 2000-2013 the FFmpeg developers
built on Jul 26 2013 20:18:03 with Apple LLVM version 4.2 (clang-425.0.28) (based on LLVM 3.2svn)
configuration: --prefix=/usr/local/Cellar/ffmpeg/1.2.1 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-nonfree --enable-hardcoded-tables --enable-avresample --enable-vda --cc=cc --Host-cflags= --Host-ldflags= --enable-libx264 --enable-libfaac --enable-libmp3lame --enable-libxvid
libavutil 52. 18.100 / 52. 18.100
libavcodec 54. 92.100 / 54. 92.100
libavformat 54. 63.104 / 54. 63.104
libavdevice 54. 3.103 / 54. 3.103
libavfilter 3. 42.103 / 3. 42.103
libswscale 2. 2.100 / 2. 2.100
libswresample 0. 17.102 / 0. 17.102
libpostproc 52. 2.100 / 52. 2.100
Input #0, image2, from '358_1.png':
Duration: 00:00:00.04, start: 0.000000, bitrate: N/A
Stream #0:0: Video: png, rgb24, 550x550, 25 tbr, 25 tbn, 25 tbc
File '359_1.png' already exists. Overwrite ? [y/N]
Et si j'essaie d'utiliser l'un des formats les plus utilisés (% d) sur Internet, ffmpeg ne trouve pas les fichiers:
fmpeg -i '%3d_1.png' -vcodec libx264 out.mp4
ffmpeg version 1.2.1 Copyright (c) 2000-2013 the FFmpeg developers
built on Jul 26 2013 20:18:03 with Apple LLVM version 4.2 (clang-425.0.28) (based on LLVM 3.2svn)
configuration: --prefix=/usr/local/Cellar/ffmpeg/1.2.1 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-nonfree --enable-hardcoded-tables --enable-avresample --enable-vda --cc=cc --Host-cflags= --Host-ldflags= --enable-libx264 --enable-libfaac --enable-libmp3lame --enable-libxvid
libavutil 52. 18.100 / 52. 18.100
libavcodec 54. 92.100 / 54. 92.100
libavformat 54. 63.104 / 54. 63.104
libavdevice 54. 3.103 / 54. 3.103
libavfilter 3. 42.103 / 3. 42.103
libswscale 2. 2.100 / 2. 2.100
libswresample 0. 17.102 / 0. 17.102
libpostproc 52. 2.100 / 52. 2.100
[image2 @ 0x7f963a006600] Could find no file with with path '%3d_1.png' and index in the range 0-4
%3d_1.png: No such file or directory
Alors ... voici la question, comment utiliser l'option de ligne de commande - i avec ffmpg?
Par souci de clarté, je suis sur Mac OSX 10.8, ffmpeg version 1.2.1, zsh 4.3.11
Sans autre option, le démodulateur image2
de ffmpeg recherchera une séquence commençant par 0. Il vérifiera également cet index, avec une plage par défaut de 5 (c'est pourquoi il se plaint de l'absence d'index compris entre 0 et 4). Selon la documentation , vous devez définir le numéro de départ si vous souhaitez commencer à un index arbitraire, tel que 837.
ffmpeg -start_number 837 -i '%3d_1.png' -c:v libx264 out.mp4
Comme les fichiers PNG utilisent l’espace colorimétrique RVB pour représenter les pixels, la conversion au format H.264 aboutira au format YUV 4: 4: 4 ( non sous-échantillonné ). La vidéo résultante peut ne pas être lisible par tous les lecteurs, notamment tout ce qui n'est pas basé sur FFmpeg. Votre lecteur n’affichera que des cadres noirs, voire un plantage. Pour résoudre ce problème, changez le format de pixel en YUV 4: 2: 0:
ffmpeg -start_number 837 -i '%3d_1.png' -c:v libx264 -pix_fmt yuv420p out.mp4
Afin de contrôler la qualité, utilisez l'option -crf
. Voir le Guide de codage x264 pour plus d'informations.
*
glob ne fonctionne pasN'utilisez pas le *
en tant qu'option d'entrée. Le shell l'étendra à tous les fichiers du répertoire en cours avant que ffmpeg
ne le voie. La commande sera donc étendue à ffmpeg -i file1 file2 … filen
. Étant donné que tous les fichiers en entrée dans ffmpeg
ont besoin de l'option -i
, il prendra plutôt file2 … filen
en tant que fichiers de sortie et les écrasera. Pas bon.
Le Globbing peut être activé en spécifiant l'option -pattern_type glob
:
ffmpeg -pattern_type glob -i '*.png' -vcodec libx264 out.mp4
Remarque: La suppression de modèle ne fonctionne pas sous Windows (et ne peut jamais en raison d'un manque de prise en charge de la suppression dans libavfilter sous Windows.) Ainsi, si vous le faites sous Windows, vous devrez renommer les fichiers afin qu'ils soient numérotés de manière séquentielle. et sans lacunes.
Vous pouvez les renommer avec une simple ligne de commande Powershell:
dir *.jpg | %{$x=0} {Rename-Item $_ -NewName “Base$x”; $x++ }
meilleur moyen de renommer avec PowerShell (préserver l’ordre):
dir *.jpg | %{$x=0} {Rename-Item $_ -NewName "Base$($x.tostring('000000')).jpg"; $x++ }