19

Я пытаюсь использовать ffmpeg, чтобы вырезать видео файлы в точное время. Справка ffmpeg показывает параметр -timecode_frame_start, чтобы указать начальный кадр, но я не могу заставить эту команду работать. Полученное видео всегда начинается в начале исходного видео. Вот пример команды, которую я запускаю:

ffmpeg -i input.mpg -acodec copy -vcodec copy -timecode_frame_start 200 -vframes 210 -n ouput.mpg

Я переместил параметр timecode_frame_start до и после других параметров без изменений в результатах. Есть ли дополнительная опция, которую мне нужно указать? Я пробовал различные форматы файлов, mkv, avi, mp4, и, похоже, проблема не связана с кодеками. Вот один файл, который я пробовал:

http://www.seaotter.com/marine/movies/hermit-long-01.mpg

Я что-то пропустил?

2 ответа2

43

Я только что узнал, что timecode_frame_start не работает так. Единственный способ начать с определенных кадров - преобразовать количество кадров в синтаксис ss.ms или hh:mm:ss.ms Итак, если ваше видео на скорости 25 кадров в секунду и вы хотите начать с 133 кадров, вам понадобится

133/25 = 5,32

Итак, беги

ffmpeg -ss 5.32 -i input.mp4 -c:v libx264 -c:a aac out.mp4

Обратите внимание, что обрезка точных кадров с помощью битовой копии (-c:v copy) невозможна, так как не все кадры являются внутренне кодированными и могут стоять самостоятельно.

Если вы используете последнюю версию ffmpeg (> 2.1), транскодирование (то есть использование чего-либо, кроме -c:v copy), -ss всегда будет с точностью до кадра.

У вас также есть выбор использования видеофильтров, но поддержка аудио может быть не точной. И, видимо, поиск по кадрам все еще не является особенностью. Вы можете следовать этой ветке списка рассылки FFmpeg-users для получения дополнительной информации:

вы можете использовать -vf select для точного выбора кадра (что-то вроде -vf 'select=gte(n\,100)' чтобы пропустить 100 первых кадров)

1

Опция

-vf select=“between(n\,start_frame_num\,end_frame_num),setpts=PTS-STARTPTS"
например,
-vf select=“between(n\,200\,300),setpts=PTS-STARTPTS"

вырезает видео из (включает) 200-й (включает) 300-й кадр, отсчет последовательности начинается с 0.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .