FFmpeg -ss странное поведение - PullRequest
7 голосов
/ 08 августа 2011

Я использовал FFmpeg для извлечения отдельных кадров в изображение. Хотя какой-то гуглит, получается, что работает:

ffmpeg.exe -i video.avi -ss 00:30:00 -y -an -vframes 1 test.png

... работает ЗНАЧИТЕЛЬНО медленнее, чем следующее, что почти идентично, но мгновенно:

ffmpeg.exe -ss 00:30:00 -i video.avi -y -an -vframes 1 test.png

Единственная разница - это порядок -i и -ss. Это преднамеренная «особенность»? Есть ли какая-то техническая причина такой разницы?

Ответы [ 4 ]

7 голосов
/ 10 апреля 2012

ответ Wberry действительно очень образованный.Чтение документации может помочь еще больше:

'- ss position (input / output)'

При использовании в качестве опции ввода (до-i), ищет в этом входном файле положение.При использовании в качестве параметра вывода (перед именем выходного файла) декодирует, но отбрасывает ввод, пока отметки времени не достигнут позиции.Это медленнее, но точнее.

(позиция может быть в секундах или в формате чч: мм: сс [.xxx].)

(как указано в http://ffmpeg.org/ffmpeg.html#Main-options)

В настоящее время я пишу приложение для захвата аудио, и поэтому я использую более медленный, но более точный метод. Вам остается только выбратьлучший подход.

7 голосов
/ 08 августа 2011

Это обоснованное предположение.Когда -ss встречается до -i, он обрабатывается как инструкция для ввода, поэтому первый кадр видеопотока - это кадр с 30 секундами.Когда -ss происходит после -i, это рассматривается как эффект, и первые 30 секунд кадров считываются и отбрасываются, что приводит к разнице в производительности.

2 голосов
/ 19 июля 2013

Я также только что закончил приложение, которое генерирует миниатюры из видеоконтента.

Ты должен это проверить, http://ffmpeg.org/trac/ffmpeg/wiki/Seeking%20with%20FFmpeg

В нем описывается способ объединения флага -ss (из обоих мест) в единую команду, обеспечивающую точность кадра time и более быстрый выбор кадра.

ffmpeg -ss 00:02:30 -i Underworld.Awakening.avi -ss 00:00:30 -vframes 1 out3.jpg

, а также содержит ссылки на другие возможные трюки, например, несколько превью из одного видео.

2 голосов
/ 14 июня 2013

Когда -ss встречается до -i, он переходит к ближайшему ключевому кадру (который каждые 10 секунд в файлах H.264 для 25 кадров в секунду, поскольку H.264 будет использовать GOP 250).Это делает поиск очень быстрым, поэтому вы можете добавить еще один -ss после -i, чтобы перейти к дробному расположению после первого -ss.

Имея -ss после -i, вы будете искать точное местоположение, но этоочень медленный.

См. https://trac.ffmpeg.org/wiki/Seeking для примеров и дополнительной информации

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...