ffmpeg:无法重新编码字幕事件

ffmpeg:无法重新编码字幕事件

我正在尝试将带有德语变音符号的字幕编码到视频文件中 - 经过对 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 的更多信息,请访问:

FFMPEG基础课程
FFMPEG 文档
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

相关内容