Вопрос или проблема
У меня есть файл .ts
, который является записью спутникового (DVB) телевидения. Однако поток субтитров в нем не синхронизирован со звуком.
С помощью TSDoctor я извлек субтитры в файл .srt
.
Я загрузил его в “Subtitle Edit” и смог экспортировать в формате VobSub.
Теперь я хочу добавить это как еще один поток субтитров в мой файл .ts
без повторного кодирования. Я едва знаю, что делаю с FFmpeg, но, почитав темы на Super User, я нашел эту команду, и она почти то, что мне нужно:
ffmpeg -i "V808.ts" -i "V808.[2357](41001ms).idx" -map 0:0 -map 0:1 -map 1:0 -c:v copy -c:a copy -c:s dvbsub -metadata:s:s:0 language=eng OUTPUT.ts
Но она заменяет существующие потоки рассказчика и (некорректные) субтитры. Как я могу сохранить их и просто добавить еще один поток?
Может ли кто-то подтвердить, что этот подход не повторно кодирует поток? Я не хочу, чтобы это происходило, если это возможно.
Обновление
После того как я еще поискал темы на superuser, я получил следующую команду, и она сохраняет все мои существующие потоки и добавляет один дополнительный поток субтитров dvb.
ffmpeg -probesize 60M -analyzeduration 60M ^
-i "V808.ts" ^
-i "V808.[2357](41001ms).idx" ^
-map 0 -map 1 -vcodec copy -acodec copy -c:s:0 copy -c:s:1 dvbsub ^
-metadata:s:s:0 language=eng -metadata:s:s:0 handler_name=Bad -metadata:s:s:0 title=Bad ^
-metadata:s:s:1 language=eng -metadata:s:s:1 handler_name=Good -metadata:s:s:1 title=Good ^
OUTPUT.ts
Я не совсем понимаю, как работает карта, но это работает. Я надеялся, что два потока субтитров будут иметь разные названия (“Good” и “Bad”), но при просмотре в VLC и на моем тюнере enigma2 этого не происходит.
Любые другие подходы к решению этой проблемы будут очень признательны.
Ответ или решение
Чтобы добавить дополнительный поток субтитров к файлу .ts
, не перекодируя его, можно использовать инструмент FFmpeg. Давайте я объясню процесс, включая ваши требования и некоторые нюансы.
Шаги для добавления дополнительного потока субтитров
-
Подготовка файлов: Убедитесь, что у вас уже есть:
- Файл
.ts
с основным контентом. - Файл с субтитрами в формате VobSub (обычно это два файла:
.idx
и.sub
).
- Файл
-
Использование FFmpeg: Откройте терминал или командную строку и выполните следующую команду:
ffmpeg -probesize 60M -analyzeduration 60M ^
-i "V808.ts" ^
-i "V808.[2357](41001ms).idx" ^
-map 0 -map 1 -vcodec copy -acodec copy -c:s:0 copy -c:s:1 dvbsub ^
-metadata:s:s:0 language=eng -metadata:s:s:0 handler_name=Bad -metadata:s:s:0 title=Bad ^
-metadata:s:s:1 language=eng -metadata:s:s:1 handler_name=Good -metadata:s:s:1 title=Good ^
OUTPUT.ts
Пояснения к команде
-probesize 60M -analyzeduration 60M
: Эти параметры помогают FFmpeg корректно анализировать входящий файл.ts
, особенно если он большой или имеет сложную структуру.-i "V808.ts"
: Указывает основной видеофайл.-i "V808.[2357](41001ms).idx"
: Указывает файл VobSub для субтитров.-map 0 -map 1
: Эти параметры указывают, что вы хотите сохранить все потоки из первого файла (0) и добавить все потоки из второго файла (1).-vcodec copy -acodec copy
: Указывает FFmpeg копировать видеопоток и аудиопоток без перекодирования.-c:s:0 copy -c:s:1 dvbsub
: Здесь вы сохраняете первый поток субтитров без изменений, а второй поток субтитров добавляется как поток DVBSub.-metadata:s:s:X ...
: Эти параметры задают метаданные для потоков субтитров, такие как язык, имя обработчика и заголовок.
Учтите следующее
- Если вы хотите, чтобы ваши субтитры отображались с различными названиями в медиаплеерах, необходимо убедиться, что метаданные настроены правильно. Значения
handler_name
иtitle
являются важными для различения потоков. - Для просмотра субтитров с нужным именем используйте медиаплееры, которые поддерживают отображение метаданных, например, VLC или другие.
Итог
Этот подход позволяет вам добавить новый поток субтитров к .ts
файлу без перекодирования существующих потоков. Теперь у вас есть один файл с несколькими потоками субтитров, которые можно использовать как вам удобно. Если потребуется дополнительная помощь, не стесняйтесь задавать вопросы!