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

如何使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 13:06:00