python - 用python计算电影文件中的音轨

标签 python audio media audiotrack moviepy

我正在尝试获取视频文件中的音轨数量。该视频有多个音轨(例如同一部电影的不同可选语言。)因此,如果视频有三种可选语言,我希望最后得到数字 3,无论音频是否为立体声,单声道或 5.1。

到目前为止,我试图用moviepy来做到这一点。我只找到函数“reader.nchannels”,但它只计算第一个音轨的左右声道,所以我每次都得到数字 2。

现在的代码非常简单,如下所示:

from moviepy.editor import *
from moviepy.audio import *

clip = VideoFileClip(source)
audio_tracks = clip.audio.reader.nchannels

我还尝试从音频中获取所有信息,如下所示:
audio = AudioFileClip(source)
tracks= audio_tracks.reader.infos

输出如下所示:
"'audio_found': True, 'audio_fps': 48000}"

最佳答案

tburrows13,感谢您指出正确的方向。
我能够获取音频 channel 的数量并通过 py 脚本将其存储在一个变量中。也许这不是最优雅的解决方案,但它确实有效,所以如果有人需要,它就在这里。您必须导入“子进程”并使用 ffprobe。 ffprobe 带有 ffmpeg。
要获取流的数量,命令如下:

ffprobe <filename here> -show_entries format=nb_streams
这将为您提供文件中的流数,不仅是音频,还有视频流。可以选择仅获取音频流的数据,但这对我的项目来说不是必需的。
您可以通过 python 脚本调用此命令。该命令需要是一个字符串,您也可以将它存储在一个变量中。要获取此命令的输出并将其存储在其他变量中,您可以使用以下命令:
variable = subprocess.check_output(subprocesscommand) # subprocesscommand is the string version of the command wrote above. 
如果您现在打印此变量,输出将类似于:b'[FORMAT]\r\nnb_streams=3\r\n[/FORMAT]\r\n'
现在您只需要对字符串值进行切片,即可获得流的数量。
再次感谢您的帮助!

关于python - 用python计算电影文件中的音轨,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62466483/

相关文章:

python - Pandas 和 python : split dataframe into many dataframes based on column value containing substring

android - 如何在android中以编程方式执行命令行ffmpeg命令?

php - 要存储到数据库中的音频文件

Python - 如何从输入文本文件中仅编写以 $ 开头的 case 语句和实例?

python - 将 python 中的两个字符串与重复项进行比较

python - 使用 igraph 投影二分网络有困难

Android:来自音频的外部硬件中断

swift - 观看操作系统 : Microphone & Audio Processing

angular - 将MINUTES放在进度元素的Max属性中