Вырезать видео FFmpeg на основе кадров, а не временного кода

1124
mxbi

Я хочу вырезать видео с помощью FFmpeg, используя что-то похожее на код ниже:

ffmpeg -i movie.mp4 -ss 00:00:03 -t 00:00:08 -async 1 cut.mp4 

Однако я хочу указать -ssи -tв кадрах а не в секундах. Например, вместо 3 секунд я хотел бы сказать ffmpeg, чтобы начать вырезать с 90 кадров. Я хочу сделать это, потому что я собираюсь вырезать видео с помощью сценария, и я не хочу слишком усложнять вещи, преобразовывая номера кадров в секунды, прежде чем передать их в FFmpeg.

Простое указание числа, такого как -ss 90начало отсечения, начинается с 90 секунд, а не с 90 кадров.

0

2 ответа на вопрос

3
occvtech

Я считаю, что вы должны быть в состоянии сделать это с помощью selectфильтра. Однако при использовании видеофильтра вы больше не сможете осуществлять потоковое копирование - вместо этого вам придется перекодировать файл, выбрав кодек с c:vфлагом.

Например, чтобы создать разрез, начинающийся с 90-го кадра и производящий вывод длиной 1000 кадров, и перекодировать вывод в формат H264, вы можете попробовать:

ffmpeg -i [INPUT] -vf select=gte(n\,90) -vframes 1000 -c:v libx264 -f mp4 [output.mp4]

0
dstob

There is no way to do exactly what you are asking.

You can use -frames to process a desired number of frames but using a frame number as the starting position isn't possible.

Значит ли `-frames` заменить` -t` здесь? mxbi 8 лет назад 0

Похожие вопросы