![ffmpeg 对 tx3g 的支持](https://linux22.com/image/1350886/ffmpeg%20%E5%AF%B9%20tx3g%20%E7%9A%84%E6%94%AF%E6%8C%81.png)
我正在尝试使用 ffmpeg 在 MP4 容器中嵌入字幕。
我正在使用以下命令:
ffmpeg -i input.MOV -i input.srt -map 0 -map 1 -c copy -c:s mov_text output.MOV
我希望将字幕编码为 tx3g 而不是文本,以便与我的视频流媒体(Wowza)兼容。
有什么办法更改字幕编码器?
谢谢!
答案1
我必须承认,我不知道 FourCC 的tx3g
真正含义。FFmpeg 编解码器mov_text
和tx3g
是同一个东西:MPEG-4 第 17 部分(定时文本)。
FFmpeg 唯一不支持的是其嵌入文本的自定义样式。如果你查看源代码,你会发现它们应用默认样式:
目前,我们将使用固定的默认样式。当我们添加样式支持时,这将从 ASS 样式生成。
话虽如此,免费和跨平台的MP4盒应该能够按照您的要求将这些字幕添加到 MP4 文件中。即使带有样式。如何将它们添加到文件中取决于它们的编码方式。从其文档中:
文本流没有官方的文本表示。此外,规范依赖于 IsoMedia 知识来进行大多数结构描述。为了帮助编写文本流,GPAC 开发了一种 XML 格式,称为 TTXT(用于计时文本)——使用的扩展名为
.ttxt
。
要创建 TTXT 文件,您可以执行以下操作:
找到 SRT 或 SUB 字幕文件,然后运行
MP4Box -ttxt file.srt
。这将转换 TTXT 格式的字幕。
然后 MP4Box 应该能够将字幕流添加到现有的 MP4 文件中,如下所示:
MP4Box -add input.mp4 -add subtitles.ttxt output.mp4
务必先将字幕文件转换为 TTXT。如果它们仍为 SUB 或 SRT 编码,MP4Box 将使用默认选项对其进行布局:
当导入 SRT 或 SUB 文件时,MP4Box 会选择默认布局选项,使字幕出现在视频的底部。
答案2
在 MP4 视频上嵌入 macOS 和 iOS 兼容字幕的纯 ffmpeg 方法是:
ffmpeg -i input.MOV -i input.srt -c copy -c:s mov_text -tag:s:s:0 tx3g output.mov
这-tag:s:s:0 tx3g
招很管用。