Star Trek продолжается: ffmpeg dvdsub: перекрывающиеся субтитры

Итак, я скачал бесплатно созданный фанатом Star Trek Continues Blue-Ray ISO для Эпизодов 1-3 , и я пытаюсь конвертировать FHD 1920x1080 в SD 960x540 чтобы иметь возможность смотреть на моем телефоне:

ffmpeg -canvas_size 960x540 \
-i /media/STC_VOL1_BR/BDMV/STREAM/00000.m2ts \
-map_metadata -1 \
-c:v libx264 -map 0:0 -strict -2 -r 24 -s 960x540 \
-c:a libmp3lame -map 0:1 -b:a 384K \
-metadata:s:s:0 language=EN -c:s dvdsub -map 0:2 \
/media/Videos/Star\ Trek\ Continues/S01E01\ Pilgrim\ Of\ Eternity.mkv

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

  • нечитаемыми из-за перекрытия
  • немного большие (без проблем)
  • смещены вправо и вниз по экрану

VLC Screenshot

Полный вывод ffmpeg здесь

Что я делаю не так?

Примечание 1: Я имею Я имел дело только с субтитрами srt, и я знаю, что dvdsubs являются изображениями, поэтому я подумал, что параметр canvas_size может помочь, но это не имеет значения.
Примечание 2: Да, это не совсем вопрос о Ubuntu OS, а об video.se не привлекают никакого внимания, даже с наградой так что пытайтесь здесь, если кто-нибудь сделает какое-либо преобразование видео и столкнулся с той же ситуацией.

4
задан 2 June 2019 в 13:19

1 ответ

Технически самый чистый вид с этими субтитрами должен был бы:

  1. Извлечь субтитры
  2. Превратить их в текст, используя ваше любимое приложение OCR
  3. Внимательно просмотрите и отредактируйте текст
  4. Запишите их обратно в поток мультимедиа в нужном размере, цвете, ориентации и формате

Это большой и трудоемкий процесс. работу, которую я лично выполнял в прошлом , но, вероятно, излишне в этом случае.

Опция лучше состоит в том, чтобы просто добавить опцию FFmpeg -fix_sub_duration (поместить перед входным файлом), и это исправит дублированные субтитры, как показано ниже, и сделать субтитры легко читаемыми:

enter image description here

Подробности опции -fix_sub_duration можно найти на страницах справки FFmpeg-all, но я взял на себя смелость процитировать эти детали здесь:

-fix_sub_duration

Исправить длительность субтитров. Для каждого субтитра дождитесь следующего пакета в том же потоке и настройте продолжительность первого, чтобы избежать наложения. Это необходимо для некоторых кодеков субтитров, особенно для субтитров DVB, поскольку длительность в исходном пакете является лишь приблизительной оценкой, а конец фактически отмечен пустым кадром субтитров. Отказ от использования этой опции в случае необходимости может привести к преувеличенной продолжительности или сбоям мультиплексирования из-за немонотонных меток времени.

Обратите внимание, что эта опция будет задерживать вывод всех данных до декодирования следующего пакета субтитров: это может значительно увеличить потребление памяти и задержку.

Вы заметите, что это первый из опций Advanced Subtitle, второй является -canvas_size, который вы уже использовали ...

3
ответ дан 2 June 2019 в 13:19

Другие вопросы по тегам:

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