FFmpeg硬编码SRT字幕无报错但输出视频无字幕问题求助
ffmpeg硬编码烧录SRT字幕不显示问题排查与解决方案
常见原因及对应解决方法
- SRT文件本身异常
问题点:sub.srt不在命令执行的当前工作目录、文件编码不是UTF-8无BOM格式、时间轴范围完全超出视频时长、字幕内容格式有语法错误,都会导致ffmpeg无法正常解析字幕,静默烧录失败。
解决操作:- 执行
ls sub.srt(Linux/macOS)或dir sub.srt(Windows)确认字幕文件在当前工作目录 - 执行
ffprobe sub.srt检查是否能正常识别字幕流,无报错说明文件格式合法 - 用文本编辑器打开SRT文件,确认编码为UTF-8,且第一条字幕的起始时间、最后一条字幕的结束时间在视频的时长范围内
- 执行
- ffmpeg版本不支持subtitles滤镜
问题点:subtitles滤镜依赖libass库,部分精简编译版的ffmpeg没有集成该依赖,会出现命令执行成功但实际未烧录字幕的情况。
解决操作:- 执行
ffmpeg -version检查编译参数中是否包含--enable-libass - 若无该参数,卸载当前精简版ffmpeg,安装官方完整编译版,Linux可执行
apt install ffmpeg,Windows/macOS可从ffmpeg官网下载正式发行版
- 执行
- 字幕默认样式与视频背景重叠
问题点:默认字幕为白色无描边,如果视频背景大面积为白色,会导致字幕肉眼不可见,并非没有烧录成功。
解决操作:手动指定字幕样式,强制添加描边、修改字体颜色和大小,参考命令如下:
说明:ffmpeg -i https://some-bucket.s3.region.amazonaws.com/my-video.mp4 -vf "subtitles=sub.srt:force_style='FontSize=24,PrimaryColour=&H0000FFFF,OutlineColour=&H00000000,Outline=1'" -c:v libx264 -c:a copy subtitled-video.mp4PrimaryColour=&H0000FFFF设置字幕为明黄色,OutlineColour=&H00000000设置黑色描边,避免和任何背景色重叠 - 网络视频元数据异常
问题点:直接拉取S3等存储的远程视频处理时,可能出现视频时长、帧率元数据读取错误,导致字幕时间轴和视频完全错位,无法看到字幕。
解决操作:先将远程视频下载到本地,再执行烧录命令,避免网络传输导致的元数据解析异常。
快速验证方法
你可以先修改SRT文件,添加1条测试字幕:
1 00:00:00,000 --> 00:00:05,000 TEST SUBTITLE
执行烧录命令后打开视频,看前5秒是否有测试字幕,可快速定位是字幕解析问题还是时间轴错位问题。
内容的提问来源于stack exchange,提问作者Rafael Castelo
相关产品推荐
相关产品推荐

