Python使用ffmpeg合并mp3与mp4文件时触发TypeError报错如何解决
错误原因
报错根因是ffmpeg.concat()返回的合并流节点不支持数字下标取值,必须用字符串键访问对应流:
- 合并后的视频流通过
merged['v']获取 - 合并后的音频流通过
merged['a']获取
你代码里写的merged[0]、merged[1]传入了数字索引,不符合ffmpeg-python的节点访问规则,直接触发类型报错,和output参数缺失没有关系。
修正后的代码
if haveAudio: infile1 = ffmpeg.input(f"{title}_video.mp4") infile2 = ffmpeg.input(f"{title}_audio.mp3") merged = ffmpeg.concat(infile1, infile2, v=1, a=1) output = ffmpeg.output(merged['v'], merged['a'], f"{title}.mp4") # 配置完输出后需要调用run才会实际执行合并操作,别漏写 # ffmpeg.run(output)
可选优化
如果不需要对视频做二次编码,可以在输出参数里配置流拷贝,合并速度会提升数倍:
output = ffmpeg.output(merged['v'], merged['a'], f"{title}.mp4", vcodec="copy", acodec="aac")
注意:MP4容器对MP3格式音频的兼容性较差,将音频转成AAC编码可以避免绝大多数播放器无法正常播放音轨的问题。
内容的提问来源于stack exchange,提问作者Dairop
相关产品推荐
相关产品推荐

