Как я могу преобразовать субтитры DVB в текстовый формат с помощью FFMpeg в прямом эфире или как я могу оптимизировать процесс записи DVB?

Я работаю над транскодером hls из любого формата в HLS, и мне нужно одновременно кодировать несколько субтитров в формате «dvbsub» с целью их выбора клиентом, который интерпретирует плейлист m3u8 HLS.

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

 "-filter_complex "[0:v][0:s:0]overlay[v0];[0:v][0:s:1]overlay[v1];[0:v][0:s:2]overlay[v2];......"

это очень ресурсоемкая задача. (у меня 8 и более dvbsub в одном потоке).

Кто-нибудь знает, как преобразовать каждый dvbsub в текстовый формат (например, webvtt) или есть ли способ оптимизировать процесс? (Я пытался выполнить этот процесс записи с графическим процессором NVIDIA, но не добился никаких улучшений)

Я читал о программах OCR, которые могут выполнять эту задачу, но после нескольких дней исследований я все еще не знаю, как это сделать.

Заранее спасибо.

РЕДАКТИРОВАТЬ: вход представляет собой живой сигнал UDP. Мне нужно сделать преобразование на лету.


person alexsua    schedule 28.10.2018    source источник
comment
См. stackoverflow.com/a/36327919/5726027.   -  person Gyan    schedule 28.10.2018
comment
Спасибо, но это решение не работает для меня. Я не могу получить субтитры из файла и выполнить преобразование OCR таким образом. Мне нужно взять видео, аудио и субтитры из живого UDP mpegts и преобразовать субтитры в реальном времени. Фильтр субтитров не работает для сигнала udp, а filter_complex — это то, что я сейчас использую.   -  person alexsua    schedule 28.10.2018
comment
Тогда вам не повезло. В настоящее время нет фильтров ffmpeg, которые выдают субтитры. OCR можно выполнить, но его нужно будет сбросить в файл.   -  person Gyan    schedule 28.10.2018
comment
Угу, большое спасибо за информацию.   -  person alexsua    schedule 29.10.2018


Ответы (2)


С помощью ccextractor (https://github.com/CCExtractor/ccextractor) вы можете извлекать субтитры dvbsub и dvb_teletext. .

Для извлечения dvbsub вам потребуется скомпилировать ccextractor с поддержкой OCR.

Установите зависимости:

$ sudo apt-get update
$ sudo apt-get install tesseract-ocr-dev
$ sudo apt-get install tessercat-ocr-*
$ sudo apt-get install -y gcc
$ sudo apt-get install -y libcurl4-gnutls-dev
$ sudo apt-get install -y libleptonica-dev

В коде ccextractor:

$ mkdir build && cd build
$ cmake -DWITH_OCR=ON ../src/ 
$ make -j4

Поток вашего контента по udp (-map 0:18 получает только контент dvbsub из мультиплекса):

$ ffmpeg -re -i mux562.ts -map 0:18 -c:s dvbsub -f mpegts udp://239.0.0.1:5000

Прочитайте ваш поток udp в прямом эфире и получите вывод srt:

$ ccextractor -s -codec dvbsub -in=ts -udp 239.0.0.1:5000 -o output.srt

Вы можете записать вывод srt в FIFO или на стандартный вывод, обратитесь к справке ccextractor.

person fmogollon    schedule 05.12.2018

Это ответ на ваш вопрос, однако он не будет принят как таковой, потому что вам не понравится ответ.

Вы не можете этого сделать. К сожалению, это ответ.

Ваши субтитры графические, растровые, вы должны распознавать их, а затем заранее проверять их на наличие ошибок и/или аномалий. Вы не можете сделать это на лету.

В зависимости от того, что вы играете, существует множество онлайн-ресурсов, где доступны текстовые эквиваленты субтитров.

Желаю тебе удачи.

person video.baba    schedule 29.10.2018