Уточнення для параметра введення ffmpeg з файлами зображень у якості введення


34

У мене є кілька зображень, і я хотів би зробити анімований gif з ffmpeg. Зображення мають назви:

837_1.png
838_1.png
...

Я намагаюся зрозуміти параметр -i командного рядка ffmpeg, але я вибиваюся з деяких проблем.

Якщо я нічого не вказую, попросіть мене замінити файли:

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]

І якщо я спробую в Інтернеті використовувати один із найбільш використовуваних форматів (% d) .. ffmpeg не знаходить файлів:

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

Отже .. ось питання, як використовувати параметр командного рядка -i з ffmpg?

Для наочності я перебуваю на Mac OSX 10.8, ffmpeg версії 1.2.1, zsh 4.3.11

Відповіді:


47

Без будь-яких додаткових варіантів, ffmpeg's image2demuxer буде шукати послідовність, що починається з 0. Він також перевірить цей індекс із діапазоном за замовчуванням 5 (тому він скаржиться на відсутність індексу в діапазоні 0–4). Згідно з документацією , ви повинні встановити номер старту, якщо ви хочете починати з довільного індексу, наприклад 837.

ffmpeg -start_number 837 -i '%3d_1.png' -c:v libx264 out.mp4

Перетворення кольорів у форматі PNG до H.264

Оскільки файли PNG використовують кольоровий простір RGB для представлення пікселів, конверсія в H.264 в кінцевому підсумку буде YUV 4: 4: 4 ( непідпробована ). Отримане відео може не відтворюватися на всіх програвачах, особливо нічого, що не базується на FFmpeg. Ваш програвач демонструватиме лише чорні кадри або, можливо, збій. Щоб виправити це, змініть формат пікселів на YUV 4: 2: 0:

ffmpeg -start_number 837 -i '%3d_1.png' -c:v libx264 -pix_fmt yuv420p out.mp4

Щоб контролювати якість, скористайтеся -crfопцією. Додаткову інформацію див. У посібнику з кодування x264 .

Чому *глобус не працює

Не використовуйте *опцію введення. Оболонка розгорне її на всі файли в поточному каталозі, перш ніж ffmpegїї побачити, тому команда розшириться на ffmpeg -i file1 file2 … filen. Оскільки всі вхідні файли ffmpegпотребують такої -iопції, він file2 … filenзамість цього прийме вихідні файли та замінить їх. Не добре.


дуже повна відповідь! а у вас також є поради щодо анімованих gif?
nkint

Для анімованих GIF-файлів потрібно оновити до ffmpeg версії 2.0 і вище, оскільки вони значно покращили візуальну якість. Сторінка завантаження містить декілька посилань на статичні збірки для OS X. Для старих файлів ffmpeg дивіться: ffmpeg перетворює .flv відео в .gif із жахливою якістю
slhck

Насправді він не лише перевіряє + 0..4, але й 8,16,32,64 тощо. Це помітно при використанні URL-адрес HTTP. Однак image2не вдається визнати, що 200 OKце еквівалент "знайдений файл", тому він не припиняє пошук.
MSalters

1
Я отримую те ж саме, навіть намагаючись реалізувати ваші пропозиції. Мої файли названі DSCxxxxx.jpgтам, де xxxxxє 5-значний номер, що починається з нуля (зауважте, у мене немає підкреслення). І все-таки після запуску ffmpeg -r 30 -start_number 04606 -i DSC%d.jpg out.mp4я отримую ту саму помилку, що і в початковій публікації вище
Anonymous

@jphollowed Чи ви поставили шаблон імен файлів у лапки?
slhck

29

Глоббінг можна ввімкнути, вказавши -pattern_type globваріант:

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

2
Набагато кращий спосіб :)
Густав

3
Тільки це працювало на мене. Ні в якому разі не отримати це xxx%d.png, xxx%3d.png, 'xxx%d.png'або 'xxx%3d.png'річ , робочий
yPhil

Я отримую таку ж помилку після спроби цього:[image2 @ 0x2552560] Could find no file with path '*.jpg' and index in the range 0-4 *.jpg: No such file or directory
Анонім

Вибрано тип шаблону "глобул", але глобалізація не підтримується цією збіркою libavformat [використовуючи Windows ffmpeg] [oof, слід прокрутити одну відповідь]
Katastic Voyage

7

Примітка. Глобулінг шаблонів не працює в Windows (і може ніколи не бути через відсутність підтримки для глобалізації в libavfilter під Windows.) Отже, якщо ви робите це під Windows, вам доведеться перейменовувати файли, щоб вони нумерувались послідовно. і без прогалин.

Ви можете перейменувати їх за допомогою простого командного рядка Powershell:

dir *.jpg | %{$x=0} {Rename-Item $_ -NewName “Base$x”; $x++ }

Це поверне file1.jpg file2.jpg... file10.jpgякий при сортуванні по алфавітом будуть в кінцевому підсумку file1.jpg, file10.jpg...file2.jpg
STIB

Чи не повинен це бути База $ x.jpg? Так і є, ваш перейменував усі мої і знищив розширення файлів.
Катастичне подорож

5

кращий спосіб перейменувати в PowerShell (зберегти порядок):

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

Чи dirзавжди повертаються файли, відсортовані за алфавітом? Чи було б безпечніше додавати sort-objectв суміш?
стиб
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.