我正在尝试将带有德语变音符号的字幕编码到视频文件中 - 经过对 ffmpeg 的大量研究后,我想到了这一点:
ffmpeg -fflags +genpts -i in.avi -i in1.srt -sub_charenc UTF-8 -i in2.srt -c:s mov_text -c:v copy -c:a copy -map 0:v -map 0:a -map 1 -map 2 -metadata:s:s:0 language=english -metadata:s:s:1 language=german output.mp4
...但它告诉我它不能这样做,因为
Unable to recode subtitle event "und gehõngt." from UTF-8 to UTF-8.5x
解码流 #2:0 时出错:非法字节序列
谁能告诉我这有什么问题,以及如何正确地解决?
非常感谢!
答案1
有两种方法可以在视频中插入字幕,至少我知道这两种方法。
- 首先是插入一个溪流放入容器中。
- 第二是烧伤视频中的他们。
优点:
- 作为溪流您可以启用或禁用字幕。
- 如果你刻录字幕所有玩家都可以使用它们,无需进行任何配置。
缺点:
- 作为溪流您需要视频播放器支持检测这些流(字幕),大多数都有,所以这个选项是最推荐的。
- 如果你烧伤将无法删除字幕或者停用它们。
这是添加字幕的命令流:
ffmpeg -i 输入.mp4 -sub_charenc ISO-8859-1 -i 输入.srt -map 0:v -map 0:a -c copy -map 1 -c:s:0 mov_text 输出.mp4
注意:必须指定正确的字幕编码类型,并用ISO-8859-1代替。
要了解字幕的正确编码,请执行以下命令:
文件 your_subtitle.srt
这将打印类似这样的内容
your_subtitle.srt: ISO-8859 文本,带有 CRLF 行终止符
这是命令刻录 字幕:
ffmpeg -i 输入.mp4 -vf 字幕=sub_file.srt 输出.mp4
有关 Streams、编解码器和 FFMPEG 的更多信息,请访问:
答案2
确定文件的字符编码:
$ file in2.srt
in2.srt: ISO-8859 text, with CRLF line terminators
现在使用-sub_charenc
:
ffmpeg -fflags +genpts -i in.avi -i in1.srt -sub_charenc ISO-8859-1 -i in2.srt -c:s mov_text -c:v copy -c:a copy -map 0:v -map 0:a -map 1 -map 2 -metadata:s:s:0 language=english -metadata:s:s:1 language=german output.mp4
-1
请注意其中包含的部分ISO-8859-1
。
iconv
或者使用或其他工具将字符编码转换为 utf8,然后ffmpeg
无需使用-sub_charenc
:
iconv -f ISO-8859-1 -t utf8 in2.srt > in3.srt