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

Python中如何通过FFmpeg滤镜正确添加SRT字幕?

你的subtitles滤镜用法确实有问题,以下是错误点和修正方案

核心错误点

  • subtitles滤镜调用逻辑错误:ffmpeg-python里,滤镜必须绑定到具体的视频输入流上,不能直接用ffmpeg.filter(),这样无法关联到你的视频源。
  • output参数混乱:你把输入流(image_input、audio_input)和输出文件路径混在一起,还错误地把srt文件设为输出目标——我们要的是把字幕嵌入视频,不是重新输出字幕文件。
  • 参数冲突/无效:vf已经设置了fps=10,又单独写r=10属于重复设置;shortest=None是无效值,应该用shortest=True(取音视频中较短的时长)或者直接移除。

修正后的代码

audio = f'{PROJECT_PATH}/data/ppt-elements/audio_{file_id}.txt'
images = f'{PROJECT_PATH}/data/ppt-elements/images_{file_id}.txt'

# 读取视频和音频输入
image_input = ffmpeg.input(images, f='concat', safe=0, t=seconds).video
audio_input = ffmpeg.input(audio, f='concat', safe=0, t=seconds).audio

# 将subtitles滤镜应用到视频流上
video_with_subtitle = image_input.filter('subtitles', f"{PROJECT_PATH}/data/subtitles/final_subtitle_srt/all_slides.srt")

# 合并带字幕的视频和音频,输出最终mp4
command = (
    ffmpeg.output(
        video_with_subtitle,
        audio_input,
        f"{PROJECT_PATH}/data/final-{file_id}.mp4",
        vf="fps=10,format=yuv420p",
        preset="veryfast",
        shortest=True,
        max_muxing_queue_size=4000,
        **additional_parameters
    )
)

# 执行命令生成视频
command.run()

关键修改说明

  1. 把字幕滤镜直接绑定到image_input视频流上,生成带字幕的新视频流video_with_subtitle。
  2. output只保留处理后的视频流、音频流和最终mp4路径,移除了错误的srt输出项。
  3. 删掉重复的r=10参数,将shortest=None改为有效取值shortest=True(不需要该逻辑可直接删除)。

内容的提问来源于stack exchange,提问作者Mr.Slow

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 10:12:52