1

У меня есть видео mp4/h.264, которое содержит только I-кадры. Я хочу пропустить один из этих I-кадров без перекодирования всего видео. Я попробовал это:

ffmpeg -i "file.mp4" -vf select='not(eq(n\,10))' "out.mp4"

Но, конечно, это на самом деле делает перекодирование.

Я бы предпочел, чтобы решение использовало ffmpeg, но подойдет любая программа, работающая в Linux.

Просто чтобы быть ясно: видео не содержит ни P, ни B кадра.

1 ответ1

2

Если вы хотите удалить один I-кадр, вам нужно извлечь поток битов в формат Приложения B (например, ffmpeg -i input.mp4 -c:v copy -an output.h264 , а затем найти байты, которые представляют NAL блок (ы), содержащий фреймы, которые вы хотите удалить. Удалите эти байты до следующего кода запуска и сохраните поток.

Или вы можете объединить видео, используя -frames:v чтобы извлечь первые n кадров:

ffmpeg -i input.h264 -c:v copy -frames:v n output.h264

Затем, используя параметр -ss , вы можете искать позицию, с которой хотите начать снова, и вырезать оттуда тем же способом. Вы можете узнать позицию, умножив n+1 на частоту кадров.

Я не знаю более простого способа, если вы не хотите перекодировать.

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