1

Я извлекаю фрагмент видеофайла длительностью в 1 минуту, начиная с 30 минут с начала, и добавляю субтитры из внешнего файла с помощью следующей команды:

ffmpeg -ss 1800 -i input_video.m4v -ss 1800 -i input_subtitle.srt -map 1:0 -c:a aac -c:v libx264 -c:s mov_text -crf 35 -preset slow -t 60 -avoid_negative_ts 1 output_video.mp4

Проблема, которую я получаю, состоит в том, что транскодированное видео имеет продолжительность 00:01:03.50 вместо ожидаемого 00:01:00.00 . И при воспроизведении такого видео с помощью VLC воспроизведение останавливается до того, как индикатор выполнения достигнет конца.

Длительность становится ровно 1 минутой, только если я удалю ввод субтитров. Похоже, что длительность выходного файла увеличена, чтобы соответствовать последней фразе из субтитров, которая начинается в пределах определенного 1-минутного диапазона.

Есть ли способ заставить выходную длительность точно соответствовать значению, установленному в флаге -d ?

1 ответ1

1

Из-за того, как ffmpeg анализирует файлы субтитров, вам доступны две опции:

Выведите на MP4, но, возможно, пропустите субтитры:

ffmpeg -i input_video.m4v -i input_subtitle.srt -ss 1800 -c:a aac -c:v libx264 -c:s mov_text -crf 35 -preset slow -t 60 output_video.mp4

Это должно создать 60-секундный файл, но он пропустит любые субтитры, которые начинаются до 1800-х годов, но продолжаются после него.

Выход в MKV:

ffmpeg -i input_video.m4v -i input_subtitle.srt -ss 1800 -c:a aac -c:v libx264 -c:s ass -crf 35 -preset slow -t 60 output_video.mkv

Здесь будет присутствовать любой субтитр, начинающийся до 1800-х годов и продолжающийся после него, и соразмерной длины, т. Е. Если субтитр начинается в 1795 году и заканчивается в 1802, то он будет длиться в течение 2 секунд на выходе.

Двухэтапный метод

ffmpeg -i subfile -ss 1800 -t 60 sub.ass

а также

ffmpeg -ss 1800 -i video.mp4 -i sub.ass -c:s mov_text out.mp4

Это извлекает сабвуферы, соответствующие желаемому сегменту видео, а затем смешивается с видео.

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