You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 13:58:09