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]
5
задан ljwobker
источник

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 имеет поддержку globbing (чего, по-моему, нет в сборках 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 необходимо для преобразования из цветового пространства JPEG YUV 4:2:2 в 4:2:0. В противном случае некоторые (большинство не основанных на FFmpeg) проигрыватели не смогут показать видео

  • контроль качества, установив -crf 23 вариант, и выбирать что-то между 18 и 28, где низкий значит лучшее качество.

  • вы можете установить частоту кадров в соответствии с какие входные кадры (изображения) были захвачены. Сделайте это, запустив ffmpeg.exe -framerate 30 -start_number …. Если не указать частоту кадров, ffmpeg будет считать, что исходные кадры были записаны с частотой 25 Гц.

  • читать image2 demuxer часть руководства.

  • двойные кавычки всегда хорошо использовать для предотвращения расширения оболочки шаблонов.

4
отвечен slhck 2014-11-08 17:25:16
источник

Другие вопросы bash cygwin ffmpeg timelapse video