Вопрос или проблема
У меня есть файл .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
Я не совсем понимаю, что делает команда map, но это работает. Я надеялся, что два потока субтитров будут иметь разные названия (“Good” и “Bad”), но в VLC и на моем ресивере enigma2 это не так.
Любые другие подходы к решению этого вопроса будут очень appreciated.
Ответ или решение
Чтобы добавить файл субтитров в формате idx как дополнительный поток к видеофайлу формата .ts, не перекодируя существующие потоки, вы правильно начали с использования FFmpeg. Я помогу вам уточнить вашу команду и объясню, как можно осуществить это, чтобы избежать путаницы с метаданными субтитров.
Вот подробное руководство по выполнению этой задачи:
-
Проверка потоков: Прежде чем запускать какую-либо команду, убедитесь, что ваш исходный .ts файл и файл idx правильно распознаны FFmpeg. Вы можете проверить потоки следующей командой:
ffmpeg -i "V808.ts"
Эта команда выведет информацию о всех видеодорожках, аудиодорожках и субтитрах в файле.
-
Использование команды FFmpeg: Исправьте вашу команду на следующую:
ffmpeg -probesize 60M -analyzeduration 60M \ -i "V808.ts" \ -i "V808.[2357](41001ms).idx" \ -map 0 -map 1 -c:v copy -c:a 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
-
Объяснение параметров:
-map 0
и-map 1
: Эти параметры означают, что FFmpeg возьмет все потоки из первого файла (V808.ts
) и добавит потоки из второго файла (V808.[2357](41001ms).idx
).-c:v copy -c:a copy
: Эти параметры указывают FFmpeg скопировать видеопотоки и аудиопотоки без перекодирования.-c:s:0 copy -c:s:1 dvbsub
: Здесь вы определяете, как обрабатывать субтитры.-c:s:0 copy
означает, что вы копируете первый поток субтитров (если он существует), аdvbsub
указывает, что вы хотите перекодировать второй поток в формат DVB.-metadata:s:s:0
и-metadata:s:s:1
: Эти параметры позволяют установить метаданные для субтитров, такие как язык и заголовок.
-
Запуск команды: После выполнения команды FFmpeg создаст новый файл
OUTPUT.ts
с добавленным потоком субтитров в формате dvbsub. Убедитесь, что вы проверили файл, используя VLC или другой медиаплеер, чтобы убедиться, что субтитры отображаются корректно и синхронизированы. -
Проблемы отображения в медиаплеерах: Если вы сталкиваетесь с проблемой, что субтитры не отображаются с заданными метаданными, попробуйте открыть файл в различных плеерах или убедитесь, что используете последнюю версию VLC или другого программного обеспечения.
Если у вас возникнут дополнительные вопросы или потребуются дальнейшие уточнения, не стесняйтесь спрашивать!