使用 ffmpeg 和 python 将视频中的所有音频流提取到单独的音频文件中
Posted
技术标签:
【中文标题】使用 ffmpeg 和 python 将视频中的所有音频流提取到单独的音频文件中【英文标题】:Extract all audio streams from video into seperate audio files using ffmpeg and python 【发布时间】:2020-11-14 21:38:08 【问题描述】:我正在尝试从视频中提取所有音频流/音轨(无论您想如何称呼它们),并使用 python 和 ffmpeg 将每个音频文件保存到单独的音频文件中。 问题是,我需要知道有多少音频流,我不想手动输入文件的流数,也不想为每个文件运行 ffmpeg 命令来弄清楚。 程序有没有办法计算出有多少流,以便我可以将每个流提取到单独的文件中?
这是一个sn-p的代码
inputFiles
是每个正在输入的视频文件的目录列表_dir_in
是所有输入文件所在的目录_dir_out
是代码输出的所有文件所在的目录
for video in inputFiles:
number_of_audio_streams = 0 # this is where I need to know how many audio streams there are
for i in range(number_of_audio_stremas):
subprocess.call(f'ffmpeg -i _dir_in/video -map 0:a:str(i) _dir_out/audio/video-str(i).m4a')
【问题讨论】:
【参考方案1】:没有单独使用ffmpeg
自动提取所有音频流的方法。
您可以使用ffprobe
来确定音频流/轨道的数量:
$ ffprobe -loglevel error -select_streams a -show_entries stream=codec_type -of default=nw=1 input.mkv
codec_type=audio
codec_type=audio
codec_type=audio
这个例子表明input.mkv
有3个音频流。
您可以根据自己的喜好对其进行解析以获取总数。使用wc -l
的示例:
$ ffprobe -loglevel error -select_streams a -show_entries stream=codec_type -of default=nw=1 input.mkv | wc -l
3
对于您在 Python 中实现解决方案应该是一个好的开始(我对 Python 的了解不够,无法给您复制和粘贴答案)。
【讨论】:
这很有帮助,谢谢。我不得不使用不同的 cmd 而不是wc -1
因为我在 Windows 上大声笑
@Insberr Windows 等价物是什么?
我用过find /c /v ""
以上是关于使用 ffmpeg 和 python 将视频中的所有音频流提取到单独的音频文件中的主要内容,如果未能解决你的问题,请参考以下文章
FFmpeg的使用——PHP转换视频截取视频以及JW Player播放器控制
如何合并文件夹中的所有视频以使用 FFMPEG 制作单个视频文件
将音频和视频块从 python 中传输到 ffmpeg 的最佳方法