使用 FFmpeg 转换视频格式
如今价格实惠的数字摄像机已使数字录制能力普及到大多数人。不幸的是,随之而来的是可用文件格式和编解码器种类的相应增加。其中一些格式比其他格式更有效,而另一些格式受专有许可限制的约束较少。因此,能够从一种格式转换为另一种格式非常有帮助,因为您可以决定自己觉得舒适的格式,并使用该格式,而不是局限于特定的文件格式。
FFmpeg 是一个简单直接的应用程序,Linux 用户可以使用它轻松地在各种不同格式之间转换视频文件。在本文中,我将引导您安装 FFmpeg,并提供一些有指导意义的示例,以演示它可以使用的应用范围。
FFmpeg 是一款开源音频和视频转换器,支持大多数行业标准编解码器,可以快速轻松地在文件格式之间进行转换。它还允许您从实时源捕获视频和音频并进行处理。
FFmpeg 的源代码可从项目网站 (ffmpeg.sourceforge.net/index.php) 下载,在撰写本文时,该网站提供的最新版本为 0.4.9-pre1。
下载文件后,使用以下命令解压它
tar -zxf ffmpeg-0.4.9-pre1.tar.gz
这将创建一个新目录,其中包含 FFmpeg 的源代码。要使用默认配置选项安装它,请运行./configure从 FFmpeg 源代码目录中。配置脚本完成后,通过发出以下命令编译它make。编译完成后没有任何错误,您可以通过运行以下命令安装 FFmpegmake install以 root 用户身份。
另一方面,如果您想控制安装的内容并喜欢自定义软件安装,您可以将一些命令行参数传递给 configure 脚本。要查看安装程序的所有可用选项,请运行以下命令
./configure --help
此命令将为您提供多个屏幕,显示可以修改的各种设置,您可以选择任何您喜欢的选项。屏幕显示在解释每个选项的作用方面做得不错,因此我不会对此进行过多详细介绍。
我建议您启用以下选项,但这并非强制要求——请随意尝试
--enable-mp3lame:强烈推荐——没有它您将无法编码 MP3。需要预先安装 lame。
--enable-a52:启用 GPL 许可的 A52 支持,解码某些 VOB 文件时需要。
--enable-gpl:先前组件需要;否则,不需要。
由于我的系统上没有安装 lame,我运行了以下命令来配置 FFmpeg
./configure --enable-a52 --enable-gpl
配置完成后,通读输出以确保没有生成任何错误。然后,运行make,然后去喝点东西或做点什么,因为这可能需要一段时间。一旦系统完成编译 FFmpeg,运行make install以 root 用户身份安装 FFmpeg,安装就完成了。
现在您已成功安装 FFmpeg,您可以开始尝试使用它了。您要做的第一件事是选择一个视频文件进行实验。由于这是您第一次使用 FFmpeg,强烈建议您制作此文件的备份副本。您不想对毁坏稀有视频的唯一副本负责。
此输入文件很可能已使用特定编解码器进行编码,但由于 FFmpeg 支持大多数流行格式,因此我们无需对此过多担心。FFmpeg 支持的格式包括 MPEG、MPEG-4 (Divx)、ASF、AVI、Real Audio/Video 和 Quicktime。要查看 FFmpeg 支持的所有编解码器/格式的列表,请运行以下命令
ffmpeg --formats
支持的文件格式的详细列表也可在 FFmpeg 网站上找到。
FFmpeg 支持大量命令行参数,用于控制 FFmpeg 中的各种设置。要获取可用各种选项的列表,请运行以下命令
ffmpeg --help
不要让多页列表吓到您不敢使用 FFmpeg,基本用法实际上非常简单。要使用默认设置转换文件,请运行以下命令
ffmpeg -i InputFile OutputFile
-i 选项告诉 FFmpeg,紧随其后的文件名是要用作输入的文件名。如果省略此选项,FFmpeg 会在尝试创建输出文件时尝试覆盖该文件。FFmpeg 使用输出文件的扩展名来尝试确定要使用的格式和编解码器,尽管可以使用命令行参数覆盖此设置(稍后会详细介绍)。
默认设置创建的输出文件具有收音机质量的声音(64kbps 比特率)和非常差的视频质量(200kbps 比特率)。幸运的是,这些设置可以针对每次编码进行更改,这使您可以根据需要选择每个文件的质量。
要更改音频比特率,请添加-ab bitrate到之前使用的命令,其中bitrate是您要使用的比特率。请参阅 www.mp3-tech.org/tests/gb 以获取有关各种比特率代表的声音质量的信息。我更喜欢根据需要使用 128–192kbps 之间的比特率对文件进行编码,但如果您愿意,也可以输入更高的值。但是请记住,您使用的比特率越高,输出文件的大小就越大。另请记住,如果您的源文件以低比特率编码,则增加比特率除了增加输出文件大小外,不会取得太多效果。
现在,如果视频看起来像是用一台糟糕的五年前的摄像头拍摄的,那么为视频获得 CD 质量的音轨实际上没有意义。值得庆幸的是,这个问题也通过向命令行添加另一个参数即可轻松解决。
要更改视频比特率,请添加-b bitrate选项到命令行。这里的比特率可以是您喜欢的任何数值,我见过高达 23,000(DVD Rip)的比特率。虽然以 23,000kbps 比特率编码的视频质量令人惊叹,但该编码产生的文件大小也非常惊人(90 分钟的视频约为 4GB)。根据我的经验,大多数视频在 1,000–1,400 之间的比特率下看起来相当不错,但这是一种个人偏好,因此请尝试使用这些数字,直到您找到适合您的数字。
因此,要使用 128kbps 音频比特率和 1,200kbps 视频流对视频进行编码,我们将发出以下命令
ffmpeg -i InputFile.avi -ab 128 -b 1200 OutputFile.mpg
如果您要创建视频 CD 或 DVD,FFmpeg 通过让您指定目标类型使操作更加容易。然后,它使用目标类型自动计算所需的格式选项。要设置目标类型,请添加-target type; type可以是命令行上的 vcd、svcd、dvd、dv、pal-vcd 或 ntsc-svcd。因此,如果我们要创建 VCD,我们将运行以下命令
ffmpeg -i InputFile.mpg -target vcd vcd_file.mpg
FFmpeg 还支持音频文件编码。转换音频文件的命令与编码视频文件的命令相同。要将 WAV 文件转换为 128kbps MP3 文件,请发出以下命令
ffmpeg -i Input.wav -ab 128 Output.mp3
现在,FFmpeg 最大的卖点是您可以将其自定义到您感到舒适的程度。因此,如果所有您想做的只是从一种编解码器转换为另一种编解码器,并且您不太关心高级功能,那么您可以停止阅读此处,并且仍然能够编码/解码视频。另一方面,如果您希望对编码有更多控制权,请继续阅读,因为我们将介绍 FFmpeg 中可用的更多高级选项。
FFmpeg 中可用的选项太多了,我无法在此处一一介绍,因此我将介绍一些我认为最有趣的选项,并将其余的留给您自己探索。
有时您会想使用特定的编解码器和文件格式对视频进行编码。FFmpeg 允许您通过添加以下内容来选择要用于编码的编解码器-vcodec codec到命令行,其中 codec 是您要使用的编解码器的名称。因此,如果我们想使用 MPEG-4 编解码器以 1,200kbps 视频比特率和 128kbps 音频比特率进行编码,则命令如下所示
ffmpeg -i InputFile.mpg -ab 128 -b 1200 -vcodec mpeg4 OutputFile.avi
假设您录制了一个视频,其中有很多背景噪音和不需要的评论,因此您决定完全删除视频的音频组件。要完成此操作,您只需将 -an 选项添加到命令行,FFmpeg 会自动从输出中删除所有音频。请记住,使用此选项会否定影响音频流的任何其他选项。
因此,在我们的示例中,要删除音频组件,我们将运行以下命令
ffmpeg -i InputFile.mpg -an -b 1200 OutputFile.avi
假设您从网上下载了一个新闻视频,您想在上班途中在 iPod 上收听,但为了做到这一点,您必须从输出文件中删除视频组件。FFmpeg 允许您通过将 -vn 选项添加到命令行来完全删除文件的视频组件。使用此选项会否定影响视频流的任何其他选项。
因此,在我们的示例中,要删除视频组件并将音频保存为 256kbps MP3 文件,我们将运行以下命令
ffmpeg -i InputFile.mpg -vn -ab 256 OutputFile.mp3
许多 DVD 都有多种语言音轨可用,您可以选择您想观看视频的语言。如果您会说多种语言并希望能够以多种语言观看视频,那么拥有多个音轨是很酷的。但是,如果您不会说多种语言,则额外的音轨是无用的,并且会占用磁盘空间。
FFmpeg 允许您选择要保留哪些流并忽略其余流。允许您映射流的命令行参数称为 -map。因此,如果在我们的测试文件中,流 0 是视频流,流 1 是西班牙语音频流,流 2 是英语音频流,并且我们想在输出文件中保留英语音频,我们将发出以下命令
ffmpeg -i InputFile.mpg -map 0:0 -map 2:1 -b 1200 OutputFile.avi
根据我的经验,大多数视频文件中的流 0 通常是视频流,其余流是视频可用的音频流。
Suramya Tomar 是一位 Linux 系统管理员,也喜欢编程。访问 www.suramya.com 以获取有关他背景的更多信息。