我正在研究从任何格式到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];......"
是一项非常占用CPU的任务。 (我在同一视频流中有8个或更多dvbsub。)
有人知道如何将每个dvbsub转换为文本格式(例如webvtt),或者是否有一种优化过程的方法? (我尝试使用NVIDIA gpu执行此刻录过程,但未取得任何改善)
我了解了可以执行此任务的OCR程序,但是经过几天的研究,我仍然不知道该怎么做。
谢谢。
编辑:输入为实时UDP信号。我需要即时进行转换。
答案 0 :(得分:0)
这是您问题的答案,但是,您不会喜欢它,因此不会被接受。
您无法做到。不幸的是答案。
您的字幕是基于图形的位图,必须进行OCR,然后事先检查其是否存在错误和/或异常。您无法即时做到。
根据您所播放的内容,有许多在线资源可提供基于文本的字幕对等功能。
祝你好运。
答案 1 :(得分:0)
使用ccextractor(https://github.com/CCExtractor/ccextractor),您可以提取dvbsub和dvb_teletext字幕。
要提取dvbsub,您需要编译具有OCR支持的ccextractor。
安装依赖项:
$ 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仅从Multiplex获取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或stdout,请参考ccextractor帮助