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

能否用FFmpeg一次性完成SRT字幕硬嵌与音视频变速且不调音调?

单次编码实现视频变速+硬嵌字幕的解决方案

完全可以在单次编码中同时完成视频变速(保持音频音调)和硬嵌SRT字幕这两个操作,不需要分两次编码。核心思路是把原本分开的视频滤镜逻辑整合到同一个filter_complex复杂滤镜链里,具体实现如下:

合并后的fish shell函数

function ffmpeg-speedup-burnin
    # 参数说明:$argv[1] = 输入视频文件,$argv[2] = 变速倍率,$argv[3] = SRT字幕文件路径
    ffmpeg -i $argv[1] -filter_complex "[0:v]setpts=1/$argv[2]*PTS,subtitles=$argv[3][v];[0:a]rubberband=tempo=$argv[2][a]" -map "[v]" -map "[a]" -preset ultrafast "$(date +%Y%m%d%H%M%S)-output.mkv"
end

代码说明

  • 视频处理链:先通过setpts=1/$argv[2]*PTS实现视频变速,紧接着用subtitles=$argv[3]把字幕硬嵌到变速后的视频上,两者用逗号分隔形成连续的滤镜链
  • 音频处理:用rubberband=tempo=$argv[2]实现音频变速且保持原始音调,参数和视频变速倍率一致
  • 输出文件名用date命令生成时间戳,避免重复覆盖
  • -preset ultrafast用于快速编码,若追求画质可换成medium或slow这类预设

极端情况的替代方案

如果因为滤镜兼容性问题(比如某些旧版ffmpeg不支持滤镜链嵌套)无法使用上述方法,最优替代方案是用管道传递原始流,避免写入中间文件,速度几乎和单次编码一致,且画质无损失:

# 示例:2倍速+嵌入sub.srt
ffmpeg -i input.mp4 -filter_complex "[0:v]setpts=1/2*PTS[v];[0:a]rubberband=tempo=2[a]" -map "[v]" -map "[a]" -c:v rawvideo -c:a pcm_s16le -f matroska - | ffmpeg -i - -vf subtitles=sub.srt -preset ultrafast output.mkv

这里第一个ffmpeg输出未编码的原始视频和音频流,直接通过管道传给第二个ffmpeg处理字幕,全程没有中间文件的写入和读取开销。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 18:35:24