如何使用Python的moviePy库提取视频文件中的第二条音轨?
实现方法
moviePy 底层依赖FFmpeg处理音视频,你已知的-map 0:a:1参数可以直接通过框架暴露的参数传入实现需求,有两种常用实现方案:
方案1:最小改动原有代码
在VideoFileClip初始化时指定读取第二条音轨作为剪辑的音频流,原有逻辑基本不需要调整:
from moviepy.editor import * def foo(): # 初始化时通过ffmpeg_params指定读取视频流+第二条音轨(音轨从0开始编号) videosrc = VideoFileClip("/Volumes/testfile.avi", ffmpeg_params=["-map", "0:v:0", "-map", "0:a:1"]) audiostrip = videosrc.audio audiostrip.write_audiofile(filename= '/Volumes/test.wav', fps = 48000, codec= "pcm_s24le", bitrate= "96k", buffersize=6000, write_logfile= True, ffmpeg_params= [ "-map_metadata", "-1", "-metadata", "creation_time=now"]) audiostrip.close() videosrc.close()
方案2:更高性能的实现
如果仅需要提取音轨、不需要处理视频内容,可以直接用AudioFileClip加载指定音轨,省去加载视频的性能开销:
from moviepy.editor import AudioFileClip def extract_second_audio(): # 直接指定读取第二条音轨 audio = AudioFileClip("/Volumes/testfile.avi", ffmpeg_params=["-map", "0:a:1"]) audio.write_audiofile(filename='/Volumes/test.wav', fps=48000, codec="pcm_s24le", bitrate="96k", buffersize=6000, write_logfile=True, ffmpeg_params=[ "-map_metadata", "-1", "-metadata", "creation_time=now"]) audio.close()
注意事项
- 音轨编号从0开始计数,第二条音轨对应
0:a:1,第三条音轨对应0:a:2,以此类推 - 若不清楚视频内音轨数量,可通过FFmpeg命令
ffmpeg -i 视频文件路径查看所有流的详细信息
内容的提问来源于stack exchange,提问作者DeltaFi
相关产品推荐
相关产品推荐

