FFmpeg烧录UTF-8字幕时字符间出现未知符号问题求助
FFmpeg烧录UTF-8字幕时字符间出现未知符号问题求助
各位大佬好,我最近遇到一个特别棘手的问题:用FFmpeg给视频烧录UTF-8编码的波斯语字幕时,字符之间会莫名其妙冒出未知的占位符号——关键是这不是因为字体缺少对应字符才替换的,而是凭空多出来的,我实在摸不着头脑。
先说说我最开始使用的命令:
x=src.mkv y=src.srt format=mkv out=out mkdir $out speak="ffmpeg finished" params="-preset fast -crf 25" ffmpeg -i "$x" -to 00:15:35 $params -vf "subtitles=$y" $out/1.$format ; espeak "$speak"
我的SRT字幕文件确实是UTF-8编码的,之后我尝试手动指定字幕编码和支持波斯语的字体,结果问题依旧:
ffmpeg -i "$x" -to 00:15:35 $params -vf "subtitles=$y:force_style='FontName=B Nazanin':charenc='utf-8'" $out/1.$format ; espeak "$speak"
我还怀疑是SRT格式的问题,特意把字幕转换成了ASS格式,结果还是没能解决这个奇怪的符号问题。
对了,我用的是最新版的FFmpeg:
ffmpeg version 6.0-full_build-www.gyan.dev Copyright (c) 2000-2023 the FFmpeg developers
built with gcc 12.2.0 (Rev10, Built by MSYS2 project)
有意思的是,我用老版本的HandBrake(1.1.1 2018061800)烧录同一份ASS字幕时,完全没有出现未知符号!我猜HandBrake内部应该也是基于FFmpeg的,那肯定是它加了某些我没用到的参数才避免了这个问题,但我找不到头绪。
下面是可以复现问题的完整步骤,大家可以试试:
- 创建一个名为
sub.srt的字幕文件,内容如下:
1 00:00:00,000 --> 00:01:00,000 اگه بتونم کلانتر رو قانع کنم...
- 用Imagemagick生成一张测试用的静止图片:
convert -size 1280x720 xc:gray +noise gaussian jpg: | convert -define jpeg:extent=400kb - image.jpg
- 执行FFmpeg命令烧录字幕到视频:
ffmpeg -loop 1 -i image.jpg -c:v libx264 -tune stillimage -pix_fmt yuv420p -shortest -preset fast -crf 25 -vf "subtitles=sub.srt" -to 00:01:00 out.mp4
有没有大佬遇到过类似的问题?或者知道HandBrake可能用了什么参数来解决这个问题?求指点!
备注:内容来源于stack exchange,提问作者Shayan
相关产品推荐
相关产品推荐

