如何用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
相关产品推荐
相关产品推荐

