Я хочу вырезать видео с помощью 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 кадрах.

2 ответа2

3

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

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

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

0

Нет способа сделать именно то, что вы просите.

Вы можете использовать -frames для обработки желаемого количества кадров, но использование номера кадра в качестве начальной позиции невозможно.

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