使用python-ffmpeg无编码合并音视频文件报错求助
解决python-ffmpeg无编码合并纯视频与纯音频文件的问题
你之前的代码报错是因为用错了工具——concat滤镜是用来拼接同类型的媒体片段(比如把多个视频片段首尾相连,或者多个音频片段拼接),但你的需求是把独立的视频流和音频流封装到同一个容器文件中,这完全是两种不同的操作,所以会出现流匹配失败的错误。
对应你给出的有效ffmpeg命令ffmpeg -i "video.webm" -i "audio.webm" -c copy -map 0:v -map 1:a -shortest output.webm,我们可以直接用python-ffmpeg实现完全一致的逻辑,不需要用到任何滤镜,只需要正确映射输入流并指定无编码复制即可:
import ffmpeg # 分别读取纯视频和纯音频文件 video_input = ffmpeg.input('video.webm') audio_input = ffmpeg.input('audio.webm') # 输出文件:映射第一个输入的视频流、第二个输入的音频流,无编码复制,取较短时长 ( ffmpeg .output( video_input, audio_input, 'output.webm', vcodec='copy', acodec='copy', map='0:v', map='1:a', shortest=True ) .run(quiet=True) # quiet=True可以减少控制台输出,不需要的话可以去掉 )
代码解释:
video_input和audio_input:分别对应两个输入文件,不需要单独提取.video或.audio,因为我们会通过map参数精确指定要使用的流map='0:v':明确告诉ffmpeg,从第一个输入(索引0)中取视频流map='1:a':从第二个输入(索引1)中取音频流vcodec='copy'和acodec='copy':指定直接复制流,不进行重新编码,保证速度和质量shortest=True:让输出文件的时长等于视频和音频中较短的那个,和你命令行里的-shortest效果一致
这个写法和你给出的ffmpeg命令逻辑完全等价,同样能在10秒左右完成合并操作,因为没有编码过程,只是重新封装容器。
内容的提问来源于stack exchange,提问作者amplifier
相关产品推荐
相关产品推荐

