ffmpeg разделить mp4 файл на сегменты... после первого сегмента, аудио несинхронизированный

Nb: я неправильно задал этот вопрос at stackoverflow

Я использовал командную строку ffmpeg, показанную в этот вопрос разделить MKV файлы идеально в течение длительного времени. Теперь у меня есть несколько файлов MP4, которые я хотел бы разделить, и сначала казалось, что это работает, но каждый последующий сегмент после первого имеет аудио не синхронизированы! И на несколько секунд.

Я пробовал форсировать ключевые кадры (советы, которые я нашел на некоторых других сайтах) и это не помогло.

Я попробовал другую программу полностью (Avidemux), и он был в состоянии разделить файл с правильным выходом, но это было намного медленнее, занимая более 3 минут против менее 2 секунд с ffmpeg. С Avidemux я был в состоянии определить точное положение i-кадра, где я хотел разделить, так что думая, возможно, что это была проблема синхронизации я попытался, что точное положение (т. е.. 00:12:17.111 вместо 00:12:16 или любой другой), но это не помогло любой.

есть ли вариант, который мне не хватает с ffmpeg, чтобы заставить его правильно синхронизировать аудио с видео при разделении?

просто Примечание: я использовал версию 2013 ffmpeg. Я просто обновил до последней версии 2.6, но вопрос остается.

4
задан Community
20.01.2023 5:55 Количество просмотров материала 3632
Распечатать страницу

2 ответа

из документации, флаг-ss делает разные вещи в зависимости от того, где он находится в команде

-положение СС (вход-выход) При использовании в качестве опции ввода (перед-i), ищет в этом входном файле позицию. Обратите внимание, что в большинстве форматов невозможно точно искать, поэтому ffmpeg будет искать ближайшую точку поиска перед позицией. Если включено перекодирование и-accurate_seek (по умолчанию), этот дополнительный сегмент между точкой поиска и позицией будет расшифровано и выброшено. Когда делаешь копии трансляций или когда -noaccurate_seek используется, она будет сохранена.

при использовании в качестве опции вывода (перед выходным именем файла), декодирует, но отбрасывает ввод, пока временные метки не достигнут позиции.

положение может быть в секундах или в hh:mm:ss[.ХХХ] форма.

Итак, из вашего собственного ответа первая команда применяет логику на выходе, а вторая команда применяет ее на входе

1
отвечен Matthew Steeples 2023-01-21 13:43

Я не уверен, что понимаю, почему, но проблема была в порядке параметров.

в связанном Примере, команда выглядит следующим образом:

ffmpeg -i input.avi -vcodec copy -acodec copy -ss 00:30:00 -t 00:30:00 output2.avi

конечно, я использую mp4 вместо avi, но в противном случае я вводил команду точно так же, как выше, и (с mp4) я получал несинхронизированный звуковой результат. Я случайно stumpled на это "исправить"... если вместо этого ввести команду так:

ffmpeg -ss 00:30:00 -i input.mp4 -vcoded copy -acodec copy -t 00:30:00 output2.mp4

Я не получаю ошибки синхронизации. Почему? Не знающий. Но это завод. Я пробовал это несколько раз, чтобы подтвердить... изменение только этого порядка параметров исправляет проблему.

1
отвечен bcsteeve 2023-01-21 16:00

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх