Ошибка перезаписи промежутка времени ffmpeg - это может быть проблема с оболочкой / оболочкой?
У меня возникли проблемы с тем, что я думаю, должен быть простой скрипт FFMPEG. Я просто пытаюсь взять все файлы JPG в заданном каталоге и заполнить их в видео замедленного действия. Я чувствую себя комфортно со всеми параметрами кодировщика и тому подобным в ffmpeg, но я не могу понять синтаксис правильно.
Строка, которую я пробую, должна (да, я знаю... "следует") просто взять все изображения.JPG в каталоге и закодировать их как "out.mp4". Но если вы посмотрите внизу, я получу приглашение перезаписать GOPR3974.JPG - второй файл в каталоге. Это подразумевает, что по какой-то причине он неправильно удаляет все файлы... Я пробовал одинарные кавычки, двойные кавычки, я пытался
ffmpeg -i GOPR%04d.JPG out.mp4
поэтому где-то должно быть что-то, что работает. Если это имеет значение, это выполняется в среде Cygwin с использованием Bash...
[lwobker:/dtop/hack]$ /usr/local/bin/ffmpeg.exe -i GOPR*.JPG out.mp4
ffmpeg version N-64919-ga613257 Copyright (c) 2000-2014 the FFmpeg developers
built on Jul 23 2014 00:35:22 with gcc 4.8.3 (GCC)
configuration: --enable-gpl --enable-version3 --disable-w32threads
--enable-avisynth --enable-bzlib --enable-fontconfig --enable-frei0r
--enable-gnutls --enable-iconv --enable-libass --enable-libbluray
--enable-libbs2b --enable-libcaca --enable-libfreetype --enable-libgme
--enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmp3lame
--enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg
--enable-libopus --enable-librtmp --enable-libschroedinger --enable-libsoxr
--enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab
--enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvorbis
--enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264
--enable-libx265 --enable-libxavs --enable-libxvid --enable-decklink
--enable-zlib
libavutil 52. 92.101 / 52. 92.101
libavcodec 55. 69.100 / 55. 69.100
libavformat 55. 48.101 / 55. 48.101
libavdevice 55. 13.102 / 55. 13.102
libavfilter 4. 11.102 / 4. 11.102
libswscale 2. 6.100 / 2. 6.100
libswresample 0. 19.100 / 0. 19.100
libpostproc 52. 3.100 / 52. 3.100
Input #0, image2, from 'GOPR3973.JPG':
Duration: 00:00:00.04, start: 0.000000, bitrate: N/A
Stream #0:0: Video: mjpeg, yuvj422p(pc, bt470bg), 1920x1440 [SAR 72:72 DAR
4:3], 25 tbr, 25 tbn, 25 tbc
File 'GOPR3974.JPG' already exists. Overwrite ? [y/N]
1 ответ
Метод 1: Используйте шаблоны последовательности
Что вам действительно нужно, так это если ваше первое изображение называется GOPR0001.JPG
:
ffmpeg.exe -i "GOPR%04d.JPG" -pix_fmt yuv420p out.mp4
Или если первое изображение называется GOPR3973.JPG
вам нужно дать ffmpeg начальный номер для поиска:
ffmpeg.exe -start_number 3973 -i "GOPR%04d.JPG" -pix_fmt yuv420p out.mp4
Способ 2: использовать шаблоны сглаживания
Если в вашей версии ffmpeg есть поддержка глобализации (чего нет в сборках Windows, я думаю), то вы можете просто сделать:
ffmpeg.exe -pattern_type glob -i "GOPR*.JPG" -pix_fmt yuv420p out.mp4
Это предпочтительно, если вы не знаете стартовый номер или просто не заботитесь о точном контроле.
Почему это не работает
ffmpeg.exe -i GOPR*.JPG out.mp4
Это не работает, потому что это расширится до чего-то вроде этого (при условии, что ваше первое изображение называется GOPR0001.JPG
):
ffmpeg.exe -i GOPR0001.JPG GOPR0002.JPG … out.mp4
Так как ffmpeg обрабатывает последний безымянный параметр аргумента (т. Е. Что-либо без ведущего -
) в качестве имени выходного файла, GOPR2.JPG
будет выход, и ничего до out.mp4
не будет применяться.
Некоторые намеки
-pix_fmt yuv420p
необходим для преобразования из цветового пространства YUV 4:2:2 в JPEG в подвыборку 4:2:0. В противном случае некоторые (большинство не основанные на FFmpeg) плееры не смогут показывать видеоКонтролируйте качество, устанавливая
-crf 23
вариант, и выбирая что-то между 18 и 28, где ниже означает лучшее качество.Вы можете установить частоту кадров, в соответствии с которой были получены входные кадры (изображения). Сделай это, запустив
ffmpeg.exe -framerate 30 -start_number …
, Если вы не укажете частоту кадров, ffmpeg будет предполагать, что ваши исходные кадры были записаны с частотой 25 Гц.Прочитайте
image2
часть руководства.Двойные кавычки всегда полезны для предотвращения расширения шаблонов в оболочке.