web-dev-qa-db-fra.com

Clarification pour l'option d'entrée ffmpeg avec des fichiers image en entrée

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

29
nkint

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

Espace colorimétrique en conversion PNG en H.264

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.

Pourquoi le * glob ne fonctionne pas

N'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.

46
slhck

Le Globbing peut être activé en spécifiant l'option -pattern_type glob:

ffmpeg -pattern_type glob -i '*.png' -vcodec libx264 out.mp4
29
yohanson

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++ }
7
Bill Westrup

meilleur moyen de renommer avec PowerShell (préserver l’ordre):

dir *.jpg | %{$x=0} {Rename-Item $_ -NewName "Base$($x.tostring('000000')).jpg"; $x++ }
5
pBac