如何在直播中使用 FFMpeg 将 dvb 字幕转换为文本格式,或者如何优化 dvb 刻录过程?

Posted

技术标签:

【中文标题】如何在直播中使用 FFMpeg 将 dvb 字幕转换为文本格式,或者如何优化 dvb 刻录过程?【英文标题】:How can i transform dvb subtitles into text format using FFMpeg within a live streaming or how can i optimize the dvb burning process? 【发布时间】:2018-10-28 17:49:41 【问题描述】:

我正在开发从任何格式到 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 信号。我需要即时进行转换。

【问题讨论】:

见***.com/a/36327919/5726027 谢谢,但该解决方案对我不起作用。我无法从文件中获取字幕并以这种方式进行 OCR 转换。我需要从实时 UDP mpegts 中获取视频、音频和字幕并实时转换字幕。字幕过滤器不适用于 udp 信号,而我现在使用的是 filter_complex。 那你就不走运了。目前,没有发出字幕的 ffmpeg 过滤器。可以执行 OCR,但必须将其转储到文件中。 嗯,非常感谢您提供的信息。 【参考方案1】:

使用 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帮助

【讨论】:

【参考方案2】:

这是您问题的答案,但是,由于您不喜欢这个答案,因此不会被接受。

你做不到。不幸的是,这就是答案。

您的字幕是基于图形的位图,您必须进行 OCR,然后事先检查它们是否有错误和/或异常。您不能即时执行。

根据您正在播放的内容,有许多在线资源可提供基于文本的字幕等价物。

祝你好运。

【讨论】:

以上是关于如何在直播中使用 FFMpeg 将 dvb 字幕转换为文本格式,或者如何优化 dvb 刻录过程?的主要内容,如果未能解决你的问题,请参考以下文章

使用为 android 编译的 LibVLC 从 MPEG2 流中显示 DVB 字幕

从 dvb-t 中提取隐藏式字幕

如何在ffmpeg中禁用字幕解码

批处理使用ffmpeg为mp4批量加入字幕

如何使用 ffmpeg 在视频中的任意位置显示大量字幕?

使用ffmpeg压制硬字幕与logo