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

使用FFmpeg嵌入带定位格式的SRT到MP4时丢失格式,能否实现保留?

保留SRT字幕定位格式嵌入MP4的FFmpeg方案

问题根源

默认情况下,FFmpeg将SRT嵌入MP4时使用mov_text编码器,该编码器仅支持基础字幕文本,无法识别SRT中的定位(如{\pos(x,y)})、对齐(如{\anN})等扩展格式属性,导致格式丢失。要保留这些属性,需选择支持样式的字幕编码器和格式。

解决方案1:嵌入软字幕(保留可开关性)

通过将SRT转换为ASS格式(原生支持丰富样式与定位),再嵌入MP4,步骤如下:

  1. 转换SRT到ASS
    ffmpeg -i input.srt input.ass
    FFmpeg会自动识别SRT中的定位、对齐标记并转换为ASS格式的对应属性。

  2. 将ASS字幕嵌入MP4
    ffmpeg -i input.mp4 -i input.ass -c:v copy -c:a copy -c:s ass -metadata:s:s:0 language=chi output.mp4
    参数说明:

  • -c:v copy/-c:a copy:直接复制音视频流,避免重新编码耗时
  • -c:s ass:使用ASS编码器处理字幕,完整保留定位与样式
  • -metadata:s:s:0 language=chi:可选,设置字幕语言为中文

解决方案2:硬编码字幕(所有播放器兼容)

若需确保所有播放器都能显示定位格式,可将字幕直接绘制到视频画面(硬编码):
ffmpeg -i input.mp4 -vf "subtitles=input.srt" -c:a copy output_hard.mp4

  • 若需自定义字体、大小等,可添加force_style参数:
    ffmpeg -i input.mp4 -vf "subtitles=input.srt:force_style='FontName=微软雅黑,FontSize=24'" -c:a copy output_hard.mp4
    硬编码后的字幕无法关闭,但格式会永久保留。

注意事项

  • 确保SRT中的定位标记为标准格式,如{\pos(150,300)}(指定坐标)或{\an8}(右上对齐),FFmpeg才能正确解析
  • 部分旧版播放器可能不支持MP4中的ASS软字幕轨道,此时优先选择硬编码方案

内容的提问来源于stack exchange,提问作者Dzseti

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 07:33:22