Используйте FFmpeg для разделения видео на несколько сцен

579
Tina J

Я пытаюсь использовать FFmpeg для разделения видео на несколько якобы суб-видео с использованием одной сцены scenecutи порога. Я нашел следующую команду на SE:

ffmpeg -i myVideo.mp4 -y -c:v libx264 -profile:v high -prese6t:v fast -deinterlace -x264opts min-keyint=15:keyint=1000:scenecut=20 -b:v 2000k -c:a aac -b:a 128k -f segment -segment_format mp4 -segment_format_options movflags=empty_moov+frag_keyframe+default_base_moof+skip_trailer+faststart /home/1/output%%05d.mp4 

Но следующая команда не работает для меня и показывает ошибку:

Unrecognized option 'prese6t:v'. Error splitting the argument list: Option not found 

Есть ли какие-либо изменения с момента последнего FFmpeg? Я использую последнюю версию.

0

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

2
Gyan

@ K7AAY на правильном пути. Опция метка есть preset. Маска выходного имени файла должна бытьoutput%05d

Но помимо синтаксических ошибок, есть и пара фундаментальных проблем. Фрагментированные параметры MP4 предназначены для случаев, когда сегменты упакованы в один контейнерный файл. Сегментный мультиплексор испускает несколько файлов, поэтому фрагментация мультиплексора MP4 может быть пропущена. Кроме того, необходимо указать сегмент_времени с очень низким значением, иначе значения GOP, меньшие значения по умолчанию (2 с), будут объединены в некоторых сегментах.

Команда должна быть

ffmpeg -y -i myVideo.mp4 -vf yadif \ -c:v libx264 -profile:v high -preset:v fast \ -x264opts min-keyint=15:keyint=1000:scenecut=20 -b:v 2000k \ -c:a aac -b:a 128k \ -f segment -segment_format mp4 -segment_time 0.01 -segment_format_options movflags=faststart \ /home/1/output%05d.mp4 
Тем не менее я получаю сообщение об ошибке: `[сегмент @ 00000210c1e1f040] Не удается проанализировать список параметров формата 'faststart' Не удается записать заголовок для выходного файла # 0 (неверные параметры кодека?): Неверный аргумент Ошибка инициализации выходного потока 0: 0 --` Tina J 5 лет назад 0
Кстати, я могу уменьшить команду? Может быть, мы можем просто скопировать кодек `-c copy`? Самое важное для меня - это поиграться с чувствительностью порога сцены. Tina J 5 лет назад 0
Исправлено CMD .. Gyan 5 лет назад 1
Благодарю. Оно работает. Один вопрос в том, что сейчас это занимает много времени. Моя конечная цель - просто сохранить изображение из каждой сцены, скажем, средний кадр этого изображения, вместо того, чтобы кодировать и сохранять видео сцены. Есть ли более быстрый способ добиться этого? Вот мой новый вопрос: https://superuser.com/questions/1337709 Tina J 5 лет назад 0
1
K7AAY

После замены prese6t:v
на, preset:v
потому что нет опции "prese6t" для ffmpeg

заменить output%%05d.mp4
наoutput5d.mp4

поскольку ffmpeg отклоняется output%%05d.mp4как неверное имя файла.

Нет, проблема в ошибке. Пожалуйста, посмотрите на мой обновленный вопрос. Tina J 5 лет назад 0
Нет, это также не сработало: `[mp4 @ 000001adb348a740] Неверный шаблон имени файла сегмента 'output %% 05d.mp4' Не удалось записать заголовок для выходного файла # 0 (неверные параметры кодека?): Неверный аргумент Ошибка инициализации выходного потока 0 : 0 --` Tina J 5 лет назад 0
Это не ответ. Это комментарий, предлагающий помощь. Совершенно ничего плохого, делая что-то подобное в качестве комментария, но не в качестве «ответа». JakeGould 5 лет назад 1
Исправлено, смотрите ответ. K7AAY 5 лет назад 0

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