在没有重新编码的情况下从H.264中删除EIA-608隐藏式字幕

时间:2018-01-09 22:39:57

标签: ffmpeg h.264 captions

我希望在没有重新编码的情况下从H.264视频(包含为mkv)中删除隐藏式字幕(EIA-608)。

我最接近的是使用ffmpeg:

    ffmpeg -f lavfi -i movie=input.mkv[out+subcc] -map 0:0 output.mkv

为了将视频分成rawvideo和subrip组件并导出rawvideo。然而,这导致文件接近200GB,这不是一个可持续的解决方案。

基于ffmpeg的解决方案更可取,但我可以使用任何必要的软件。

1 个答案:

答案 0 :(得分:5)

使用位流过滤器实际上是可行的。据我所知,这是我自己发现的,因为到处都在寻找这种支持。

首先要了解的是,对于EIA-608和类似的隐藏式字幕标准,字幕直接作为用户数据嵌入到视频比特流中。 H.264比特流存储为NAL(网络抽象层)单元序列。每个单元都有一个类型。用户数据存储在补充增强信息(SEI)类型的NAL单元中。

事实证明,ffmpeg具有名为filter_units的比特流过滤器,可让您按类型通过或拒绝NAL单元。因此,我们可以使用它删除所有SEI NAL单元,从而去除字幕。

filter_units的{​​{3}}说我们必须通过数字指定类型。根据最新的filter documentation(表7-1),SEI单元的类型为6

因此,以下命令将删除嵌入式隐藏式字幕:

ffmpeg -i input.mkv -codec copy -bsf:v "filter_units=remove_types=6" output.mkv

这对我来说可以处理多个文件,而没有任何问题或副作用。