Добавить файл субтитров srt в качестве дополнительного потока к файлу “.ts”?

Вопрос или проблема

Этот вопрос связан с другим вопросом, который я задавал, в котором добавил субтитры в формате .idx file к существующему .ts файлу с помощью кодека FFmpeg dvbsub.

В этом вопросе я хочу добавить субтитры в формате .srt file в качестве дополнительного потока к .ts файлу. Я пробовал кодек mov_text, но он не работает.

В моем .ts файле уже есть ПЯТЬ потоков:

  • 1 x видео
  • 2 x аудио
  • 1 x телетекстовые субтитры
  • 1 x DVB-субтитры

Вот команда, которую я пытаюсь использовать:

-i "input.ts" ^
-i "subtitles.srt" ^
-map 0 -map 1 -vcodec copy -acodec copy -c:s:0 copy -c:s:1 copy -c:s:2 mov_text ^
-metadata:s:s:0 language=eng -metadata:s:s:0 handler_name=Name1 -metadata:s:s:0 title=Name1 ^
-metadata:s:s:1 language=eng -metadata:s:s:1 handler_name=Name2 -metadata:s:s:1 title=Name2 ^
-metadata:s:s:1 language=eng -metadata:s:s:1 handler_name=Name3 -metadata:s:s:1 title=Name3 ^
"output.ts"

Я получаю следующий вывод от ffmpeg:

ffmpeg -probesize 60M -analyzeduration 60M ^
More? -i "input.ts" ^
More? -i "output.srt" ^
More? -map 0 -map 1 -vcodec copy -acodec copy -c:s:0 copy -c:s:1 copy -c:s:2 mov_text ^
More? -metadata:s:s:0 language=eng -metadata:s:s:0 handler_name=Name1 -metadata:s:s:0 title=Name1 ^
More? -metadata:s:s:1 language=eng -metadata:s:s:1 handler_name=Name2 -metadata:s:s:1 title=Name2 ^
More? -metadata:s:s:1 language=eng -metadata:s:s:1 handler_name=Name3 -metadata:s:s:1 title=Name3 ^
More? "output.ts"
ffmpeg version 7.0.2-full_build-www.gyan.dev Copyright (c) 2000-2024 the FFmpeg developers
  built with gcc 13.2.0 (Rev5, Built by MSYS2 project)
  configuration: --enable-gpl --enable-version3 --enable-static --disable-w32threads --disable-autodetect --enable-fontconfig --enable-iconv
 --enable-gnutls --enable-libxml2 --enable-gmp --enable-bzlib --enable-lzma --enable-libsnappy --enable-zlib --enable-librist --enable-libsr
t --enable-libssh --enable-libzmq --enable-avisynth --enable-libbluray --enable-libcaca --enable-sdl2 --enable-libaribb24 --enable-libaribca
ption --enable-libdav1d --enable-libdavs2 --enable-libuavs3d --enable-libxevd --enable-libzvbi --enable-librav1e --enable-libsvtav1 --enable
-libwebp --enable-libx264 --enable-libx265 --enable-libxavs2 --enable-libxeve --enable-libxvid --enable-libaom --enable-libjxl --enable-libo
penjpeg --enable-libvpx --enable-mediafoundation --enable-libass --enable-frei0r --enable-libfreetype --enable-libfribidi --enable-libharfbu
zz --enable-liblensfun --enable-libvidstab --enable-libvmaf --enable-libzimg --enable-amf --enable-cuda-llvm --enable-cuvid --enable-dxva2 -
-enable-d3d11va --enable-d3d12va --enable-ffnvcodec --enable-libvpl --enable-nvdec --enable-nvenc --enable-vaapi --enable-libshaderc --enabl
e-vulkan --enable-libplacebo --enable-opencl --enable-libcdio --enable-libgme --enable-libmodplug --enable-libopenmpt --enable-libopencore-a
mrwb --enable-libmp3lame --enable-libshine --enable-libtheora --enable-libtwolame --enable-libvo-amrwbenc --enable-libcodec2 --enable-libilb
c --enable-libgsm --enable-libopencore-amrnb --enable-libopus --enable-libspeex --enable-libvorbis --enable-ladspa --enable-libbs2b --enable
-libflite --enable-libmysofa --enable-librubberband --enable-libsoxr --enable-chromaprint
  libavutil      59.  8.100 / 59.  8.100
  libavcodec     61.  3.100 / 61.  3.100
  libavformat    61.  1.100 / 61.  1.100
  libavdevice    61.  1.100 / 61.  1.100
  libavfilter    10.  1.100 / 10.  1.100
  libswscale      8.  1.100 /  8.  1.100
  libswresample   5.  1.100 /  5.  1.100
  libpostproc    58.  1.100 / 58.  1.100
[mpegts @ 0000024c425e1d00] Несоответствие размера PES-пакета
[mpegts @ 0000024c425e1d00] Поврежденный пакет (поток = 1, dts = 8522036508).
[mpegts @ 0000024c425e1d00] Несоответствие размера PES-пакета
[mpegts @ 0000024c425e1d00] Поврежденный пакет (поток = 2, dts = 8522036508).
Input #0, mpegts, from 'input.ts':
  Длительность: 02:46:58.18, начало: 84671.804778, битрейт: 3163 кбит/с
  Программа 9220
  Поток #0:0[0x931]: Видео: mpeg2video (Main) ([2][0][0][0] / 0x0002), yuv420p(tv, top first), 704x576 [SAR 16:11 DAR 16:9], 25 fps, 25 tbr
, 90k tbn
      Дополнительные данные:
        cpb: максимальный/минимальный/средний битрейт: 15000000/0/0 размер буфера: 1605632 vbv_delay: N/A
  Поток #0:1[0x932](eng): Аудио: mp2 ([4][0][0][0] / 0x0004), 48000 Гц, стерео, s16p, 192 кбит/с
  Поток #0:2[0x933](NAR): Аудио: mp2 ([4][0][0][0] / 0x0004), 48000 Гц, стерео, s16p, 128 кбит/с
  Поток #0:3[0x934](eng,eng): Субтитры: dvb_teletext (libzvbi_teletextdec) ([6][0][0][0] / 0x0006), 492x250
  Поток #0:4[0x935](eng): Субтитры: dvb_subtitle (dvbsub) ([6][0][0][0] / 0x0006)
Input #1, srt, from 'subtitles.srt':
  Длительность: N/A, битрейт: N/A
  Поток #1:0: Субтитры: subrip (srt)
Сопоставление потоков:
  Поток #0:0 -> #0:0 (копировать)
  Поток #0:1 -> #0:1 (копировать)
  Поток #0:2 -> #0:2 (копировать)
  Поток #0:3 -> #0:3 (копировать)
  Поток #0:4 -> #0:4 (копировать)
  Поток #1:0 -> #0:5 (subrip (srt) -> mov_text (native))
Нажмите [q], чтобы остановить, [?] для справки
Вывод #0, mpegts, в 'output.ts':
  Метаданные:
    энкодер         : Lavf61.1.100
  Поток #0:0: Видео: mpeg2video (Main) ([2][0][0][0] / 0x0002), yuv420p(tv, top first), 704x576 [SAR 16:11 DAR 16:9], q=2-31, 25 fps, 25 tb
r, 90k tbn
      Дополнительные данные:
        cpb: максимальный/минимальный/средний битрейт: 15000000/0/0 размер буфера: 1605632 vbv_delay: N/A
  Поток #0:1(eng): Аудио: mp2 ([4][0][0][0] / 0x0004), 48000 Гц, стерео, s16p, 192 кбит/с (по умолчанию)
  Поток #0:2(NAR): Аудио: mp2 ([4][0][0][0] / 0x0004), 48000 Гц, стерео, s16p, 128 кбит/с
  Поток #0:3(eng): Субтитры: dvb_teletext ([6][0][0][0] / 0x0006), 492x250 (по умолчанию)
      Метаданные:
        handler_name    : Name1
        title           : Name1
  Поток #0:4(eng): Субтитры: dvb_subtitle ([6][0][0][0] / 0x0006)
      Метаданные:
        handler_name    : Name3
        title           : Name3
  Поток #0:5: Субтитры: mov_text
      Метаданные:
        энкодер         : Lavc61.3.100 mov_text
[mpegts @ 0000024c42b98200] Временные метки не установлены в пакете для потока 3. Это устарело и в будущем перестанет работать. Исправьте вашу
программу, чтобы установить временные метки должным образом
[mpegts @ 0000024c42b98200] Поток 5, кодек mov_text, собирается как частный поток данных и может не распознаваться при чтении.
[dvbsub @ 0000024c425e6500] Мусор в пакете3145.2kbits/s speed=85.2x
[dvbsub @ 0000024c425e6500] Мусор в пакете3139.1kbits/s speed=68.5x
[dvbsub @ 0000024c425e6500] Мусор в пакете3079.0kbits/s speed= 118x
[dvbsub @ 0000024c425e6500] Мусор в пакете3119.3kbits/s speed= 172x
    Последнее сообщение повторено 1 раз
[dvbsub @ 0000024c425e6500] Мусор в пакете3124.2kbits/s speed= 177x
[dvbsub @ 0000024c425e6500] Мусор в пакете3156.2kbits/s speed= 218x
[dvbsub @ 0000024c425e6500] Мусор в пакете3187.6kbits/s speed= 212x
[dvbsub @ 0000024c425e6500] Мусор в пакете3165.9kbits/s speed= 245x
[dvbsub @ 0000024c425e6500] Мусор в пакете3149.8kbits/s speed= 264x
[dvbsub @ 0000024c425e6500] Мусор в пакете3172.2kbits/s speed= 298x
[dvbsub @ 0000024c425e6500] Мусор в пакете3179.6kbits/s speed= 294x
[dvbsub @ 0000024c425e6500] Мусор в пакете3175.3kbits/s speed= 306x
[dvbsub @ 0000024c425e6500] Мусор в пакете3195.0kbits/s speed= 307x
[dvbsub @ 0000024c425e6500] Мусор в пакете3175.7kbits/s speed= 318x
[mpegts @ 0000024c425e1d00] Несоответствие размеров PES-пакетов/s speed= 327x
[mpegts @ 0000024c425e1d00] Поврежденный пакет (поток = 1, dts = 8522036508).
[in#0/mpegts @ 0000024c425e1980] Поврежденный входной пакет в потоке 1
    Последнее сообщение повторено 1 раз
[mpegts @ 0000024c425e1d00] Несоответствие размера PES-пакета
[mpegts @ 0000024c425e1d00] Поврежденный пакет (поток = 2, dts = 8522036508).
[in#0/mpegts @ 0000024c425e1980] Поврежденный входной пакет в потоке 2
    Последнее сообщение повторено 3 раза
[out#0/mpegts @ 0000024c42b23500] видео:3252315KiB аудио:391193KiB субтитры:76606KiB другие потоки:0KiB глобальные заголовки:0KiB накладные расходы мультиплексирования:
 4.940417%
размер= 3903904KiB время=02:46:34.70 битрейт=3199.8kbits/s скорость= 330x

Когда я воспроизвожу output.ts в VLC, я не могу увидеть новый поток субтитров, чтобы выбрать его. Я вижу некоторые проблемы в выводе ffmpeg.

Значит ли это, что кодек mov_text не поддерживается в моем случае?

[mpegts @ 0000024c42b98200] Поток 5, кодек mov_text, собирается как частный поток данных и может не распознаваться при чтении.

Также в выводе ffmpeg говорится:

Поток #1:0: Субтитры: subrip (srt)

И…

Сопоставление потоков:
Поток #1:0 -> #0:5 (subrip (srt) -> mov_text (native))

Мой вопрос:
Использую ли я неправильный кодек для добавления .srt файла в мой .ts поток?

Ответ или решение

Для добавления субтитров в формате .srt в существующий .ts файл с использованием FFmpeg, вы действительно на правильном пути, однако нужно учитывать определённые нюансы, поскольку кодек mov_text не поддерживается в контейнерах MPEG-TS. Вместо этого, вы можете использовать кодек srt непосредственно, что позволит корректно инкапсулировать субтитры в вашем .ts файле.

Вот как это можно сделать, чтобы добавить субтитры .srt к вашему файлу:

  1. Команда FFmpeg для объединения потоков: Вам нужно будет изменить вашу команду следующим образом:
ffmpeg -i "input.ts" -i "subtitles.srt" -map 0 -map 1 -c copy -c:s srt -metadata:s:s:0 language=eng -metadata:s:s:0 title="English Subtitles" "output.ts"
  1. Разъяснение параметров команды:

    • -i "input.ts" — указывает входной .ts файл.
    • -i "subtitles.srt" — указывает файл субтитров.
    • -map 0 и -map 1 — указывает, что нужно использовать все потоки из входного файла 0 (видеопотоки, аудиопотоки и существующие субтитры) и добавлять субтитры из файла 1.
    • -c copy — копирует видеопоток и аудиопотоки без перекодирования.
    • -c:s srt — добавляет субтитры с использованием подходящего кодека для формата .srt.
    • -metadata:s:s:0 language=eng и -metadata:s:s:0 title="English Subtitles" — задаёт метаданные для добавленных субтитров.
  2. Проблемы с совместимостью: Обратите внимание, что некоторые проигрыватели могут иметь ограниченную поддержку субтитров, особенно в контейнерах MPEG-TS. VLC поддерживает многие форматы, поэтому, если после выполнения вышеуказанной команды субтитры все равно не отображаются, убедитесь, что в VLC выбраны правильные настройки для отображения субтитров.

  3. Проверка результата: После выполнения команды проверьте output.ts, открыв его в вашем медиапроигрывателе и удостоверитесь, что субтитры доступны.

  4. Дополнительные советы: Если у вас по-прежнему возникают проблемы с отображением субтитров, вы можете рассмотреть возможность конвертации файла .srt в .ass или в другой формат субтитров, который может быть более совместим с вашим .ts файлом.

Надеюсь, вышеизложенная информация поможет вам успешно добавить субтитры .srt в ваш .ts файл. Если у вас возникнут дополнительные вопросы или потребуется дальнейшая помощь, не стесняйтесь спрашивать!

Оцените материал
Добавить комментарий

Капча загружается...