使用FFmpeg从视频文件中提取音频
1. 概述
在本文中,我们将学习如何使用FFmpeg 音视频转换器从视频文件中提取音频。此外,我们还将了解如何指定输出音频格式以及如何设置提取音频的比特率。
2. 安装FFmpeg
要在 Ubuntu/Debian 上安装 FFmpeg,我们可以运行以下命令:
$ sudo apt install ffmpeg
现在让我们确保它已安装:
$ ffmpeg -version
ffmpeg version 4.4.2-1ubuntu0.1 Copyright (c) 2000-2022 the FFmpeg developers
...
我们已经成功安装了 FFmpeg。
3. 提取所有音轨
重要的是,在提取多个音轨时,我们必须为最终文件使用容器格式。在本例中,我们选择了mp4格式。
根据编码,我们可以通过两种主要方式从输入视频文件中提取所有轨道。让我们看看两者。
3.1. 无需重新编码即可提取音频
首先,我们必须选择要提取的音频流。ffprobe 将列出所有流:
$ ffprobe video.mkv
...
Input #0, matroska,webm, from 'video.mkv':
Metadata:
encoder : no_variable_data
creation_time : 1970-01-01T00:00:00.000000Z
Duration: 00:23:30.07, start: 0.000000, bitrate: 1392 kb/s
Stream #0:0: Audio: aac (LC), 48000 Hz, stereo, fltp (default)
Metadata:
...
我们可以看到音频流格式是aac。现在,我们可以为输出音频文件指定一个容器格式:
$ ffmpeg -i video.mkv -map 0:a -acodec copy audio.mp4
首先,-i标志指定输入视频文件名。其次,使用*-map 0:a选择我们之前找到的所有音频流。接下来,-acodec copy*复制流而不重新编码。最后,audio.mp4将是输出音频文件的名称。
由于我们没有重新编码音频流,只是复制了它,因此输出音频文件将很快生成。
3.2. 通过重新编码提取音频
和之前一样,但是这次,我们需要在*-acodec*标志之后指定编解码器,而不是复制音频流:
$ ffmpeg -i video.mkv -map 0:a -acodec libmp3lame audio.mp4
我们使用FFmpeg 编解码器中的 libmp3lame对音频流进行编码,并选择mp4作为容器格式。由于从aac重新编码为mp3,这将需要一些时间才能完成。
4. 提取部分音频
当然,我们也可以决定只提取部分音轨或给定的流。让我们使用 aac格式。
4.1. 基于流的提取
最初,我们提取了所有流。但是,我们也可以使用*-map*标志选择一个特定的进行提取 :
$ ffmpeg -i video.mkv -map 0:0 -acodec copy audio.aac
在这里,我们只提取流 0:0。
4.2. 基于时间的提取
之前,我们介绍了基于时间的剪辑视频 。现在,我们将学习如何根据时间提取音频的特定部分:
$ ffmpeg -i video.mkv -map 0:0 -ss 00:03:00 -t 00:00:20.0 -acodec copy audio.aac
新增内容如下:
- -ss指定部分的起点
- -t指定要提取的音频的持续时间
因此,我们上面的示例将提取20秒的音频,从3分钟开始到输入视频文件中。
5. 指定比特率编码
此外,我们还可以设置输出音频文件的比特率编码。特别是,我们可以选择可变比特率 (VBR) 或恒定比特率 (CBR)。
5.1. 可变比特率 (VBR)
通常,建议使用 VBR,因为它为我们提供了质量和文件大小之间的最佳平衡:
$ ffmpeg -i video.mkv -map 0:0 -q:a 0 -acodec copy audio.aac
使用*-q:a 0输出具有可变比特率和最高质量的音频。我们可以将质量设置为0到9*,其中 0是最高质量,9是最低质量。此外,4 是默认质量。
5.2. 恒定比特率 (CBR)
最后,要获得具有恒定比特率的音频,我们可以输入以下内容:
$ ffmpeg -i video.mkv -map 0:0 -b:a 320k -acodec copy audio.aac
在这里,-b:a 320k将比特率设置为 320k。或者,我们可以将其设置为128k、 256k或其他比特率。