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

如何用Python统计视频文件中的音轨数量(非声道数)

嘿,我明白你遇到的问题了——MoviePy确实在处理多音轨视频这块不太给力,它默认只会加载第一个音轨,所以你拿到的nchannels只是这个音轨的声道数(比如立体声就是2),根本不是你要的音轨数量。下面给你几个靠谱的解决方案,都是专门用来统计多音轨数量的:

方法1:用ffprobe命令行(最直接,无需额外Python库)

如果你已经装了FFmpeg(很多音视频处理场景都会用到),可以直接调用它的ffprobe工具来获取媒体信息,这是最准确的方式。

你可以用Python的subprocess模块来执行命令并解析结果:

import subprocess
import json

def get_audio_track_count(source):
    # 构造ffprobe命令,输出JSON格式的媒体信息
    cmd = [
        'ffprobe',
        '-v', 'quiet',
        '-print_format', 'json',
        '-show_streams',
        source
    ]
    # 执行命令并获取输出
    result = subprocess.check_output(cmd).decode('utf-8')
    # 解析JSON
    streams = json.loads(result)['streams']
    # 统计类型为audio的流数量
    audio_track_count = sum(1 for stream in streams if stream['codec_type'] == 'audio')
    return audio_track_count

# 调用示例
source = "你的视频文件路径.mp4"
print(get_audio_track_count(source))  # 比如输出3
方法2:用pymediainfo库(纯Python方式,易用)

这个库专门用来读取媒体文件的元数据,用起来很直观,不需要直接写命令行。

首先安装库:

pip install pymediainfo

然后用下面的代码统计音轨数量:

from pymediainfo import MediaInfo

def get_audio_track_count(source):
    media_info = MediaInfo.parse(source)
    # 遍历所有轨道,统计音频轨道的数量
    audio_track_count = sum(1 for track in media_info.tracks if track.track_type == 'Audio')
    return audio_track_count

# 调用示例
source = "你的视频文件路径.mp4"
print(get_audio_track_count(source))
方法3:用ffmpeg-python库(基于FFmpeg的Python封装)

这是FFmpeg的官方Python封装库,如果你需要在代码里做更多音视频处理,这个库会很有用。

先安装:

pip install ffmpeg-python

然后代码示例:

import ffmpeg

def get_audio_track_count(source):
    # 获取媒体流信息
    probe = ffmpeg.probe(source)
    # 统计音频流数量
    audio_track_count = sum(1 for stream in probe['streams'] if stream['codec_type'] == 'audio')
    return audio_track_count

# 调用示例
source = "你的视频文件路径.mp4"
print(get_audio_track_count(source))

这些方法都能准确统计视频里的可选语言音轨数量,完全不会把声道数(比如立体声2声道)和音轨数量搞混。

内容的提问来源于stack exchange,提问作者Király Csaba

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 09:32:30