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()
关键修改说明
- 把字幕滤镜直接绑定到
image_input视频流上,生成带字幕的新视频流video_with_subtitle。 output只保留处理后的视频流、音频流和最终mp4路径,移除了错误的srt输出项。- 删掉重复的
r=10参数,将shortest=None改为有效取值shortest=True(不需要该逻辑可直接删除)。
内容的提问来源于stack exchange,提问作者Mr.Slow
相关产品推荐
相关产品推荐

