我尝试在视频中硬编码字幕,通过将带有字幕的视频重新编码为图形(而不是作为附加流)。
字幕是希伯来语/阿拉伯语。
(所有文本均采用 UTF-8 编码。这不是文本编码/字符集问题。)
我愿意接受其他命令行工具或编程解决方案。
问题:
我希望能够为 RTL 字幕设置句子方向。
ffmpeg
似乎没有考虑方向性,所以结果文本是错误的。它是视觉上写的,而不是逻辑上的:
- 标点符号写在句子的错误一侧,
- 句子部分被破坏:例如
<hebrew-text-A> <LATIN-TEXT-B> <heb-text-C>
写道:<heb-text-C> <LATIN-TEXT-B> <hebrew-text-A>
ffmpeg 命令:
ffmpeg -i "nosubs.avi" -vf "subtitles='subs.srt'" withsubs.mp4
我尝试过的:
- 我尝试过以下字幕格式:srt、ass、ssa、vtt、ttml
- 我尝试在字幕格式中查找与 RTL 相关的属性或标签;到目前为止,我还没有找到;TTML 手册确实提到了与复杂方向性相关的内容,但我找不到示例,也不知道在哪里/如何实现它们
- 我尝试在字幕中设置语言,格式允许(ttml)
部分成功:
- 我在句子/从句末尾手动添加了一个 unicode 控制字符 x200F。这解决了句子末尾问题 (#1),但没有解决句子不连贯问题 (#2)。
另一个问题是,我必须找到一种编程方法来插入这些控制字符,这可能需要几天的时间。
可能的解决方案方向
- 另一个控制整个句子的 unicode 控制字符(???)
- 隐藏的 ffmpeg 开关用于控制语言/方向性、RTL 设置
- 特定的字幕格式设置,ffmpeg 对此表示尊重。
例子:
- 这个视频显示 1) 由于混合了希伯来语/拉丁语单词而导致句子流畅度中断,2) 一些句子以标点符号开头(这是错误的)。3) 其他句子看起来是正确的,因为我在句子末尾添加了控制字符。
- 示例字幕文件用于制作上述视频
不相关的问题:
- 使用 ffmpeg 设置字幕语言 - 将字幕称为流
- how-to-fix-ffmpeg-mencoder-pushing-persian-rtl-subtitles-reversed - 相关但被 SO 拒绝,没有给出答案
- 如何正确地在 ffmpeg 中转换 rtl 字幕 - 讨论字符集,而不是方向性