如何在Python中从视频中提取音频?代码实现教程

2021年11月17日14:32:23 发表评论 838 次浏览

Python如何从视频中提取音频?本文带你了解如何使用 ffmpeg 和 subprocess 或使用 Python 中的 MoviePy 库将视频转换为音频。

如何在Python中从视频中提取音频?如果你想使用 Python 将视频转换为音频格式,那么你来对地方了。在本教程中,我将向你展示两种在 Python 中的FFmpegMoviePy 库的帮助下从视频文件中提取音频的简单方法。

在我们开始之前,你需要在你的机器上安装 FFmpeg。如果你使用的是 Windows,请查看本教程,你只需安装它并将其添加到PATH变量即可。如果你使用的是 Linux,那么使用以下命令安装它很简单:

$ sudo apt update
$ sudo apt install ffmpeg

注意MoviePy依赖FFmpeg软件进行视频读写,第一次使用时会自动安装。因此,如果你在上述步骤中失败并想使用第二种方法(即使用 MoviePy),则不必太担心。

现在让我们安装 MoviePy:

$ pip install moviepy

方法一:直接使用FFmpeg

Python如何从视频中提取音频?使用FFmpeg,此方法涉及将 Python 的内置subprocess模块用于适当的 FFmpeg 命令,完整Python从视频中提取音频示例代码如下:

import subprocess
import os
import sys

def convert_video_to_audio_ffmpeg(video_file, output_ext="mp3"):
    """Converts video to audio directly using `ffmpeg` command
    with the help of subprocess module"""
    filename, ext = os.path.splitext(video_file)
    subprocess.call(["ffmpeg", "-y", "-i", video_file, f"{filename}.{output_ext}"], 
                    stdout=subprocess.DEVNULL,
                    stderr=subprocess.STDOUT)

if __name__ == "__main__":
    vf = sys.argv[1]
    convert_video_to_audio_ffmpeg(vf)

convert_video_to_audio_ffmpeg()函数中,我们首先将输入的视频文件名拆分为不带扩展名的原始文件名和扩展名本身,这样我们只需在原始名称上加上音频扩展名就可以得到输出文件名。在这种情况下,它是mp3.

我们使用该subprocess.call()方法运行FFmpeg命令,该-y标志用于忽略覆盖提示,以及-i用于指定输入视频文件。最后一个参数是带有mp3音频扩展名的输出文件名,你可以根据需要将其更改为,wav但由于某种原因,在我的情况下会导致音频文件很大。

最后,我们通过subprocess.DEVNULLstdout参数,subprocess.STDOUTstderr使我们可以放弃FFmpeg的输出。你可以通过以下方式运行脚本:

$ python video2audio_ffmpeg.py zoo.webm

zoo.webm任何格式的视频文件在哪里。

方法 2:使用 MoviePy

如何在Python中从视频中提取音频?在这种方法中,我们使用非常简单的 MoviePy 库,它在底层使用了 FFmpeg,完整的Python从视频中提取音频示例代码如下:

import os
import sys
from moviepy.editor import VideoFileClip


def convert_video_to_audio_moviepy(video_file, output_ext="mp3"):
    """Converts video to audio using MoviePy library
    that uses `ffmpeg` under the hood"""
    filename, ext = os.path.splitext(video_file)
    clip = VideoFileClip(video_file)
    clip.audio.write_audiofile(f"{filename}.{output_ext}")


if __name__ == "__main__":
    vf = sys.argv[1]
    convert_video_to_audio_moviepy(vf)

Python如何从视频中提取音频?在这里,我们实例化VideoFileClip()类,然后使用该write_audiofile()方法从audio对象clip,将其保存为音频文件。使用脚本:

$ python video2audio_moviepy.py zoo.webm

结论

好的,这就是本快速教程的内容,我希望它可以帮助你快速可靠地完成你的项目。

木子山

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: