市面上有很多开源工具可用于编辑、调整和转换多媒体,以完全满足您的需求。像 Audacity 或 Handbrake 这样的工具非常出色,但有时您只是想快速地将文件从一种格式更改为另一种格式。这时就需要用到 FFmpeg。
FFmpeg 是一个用于处理多媒体文件的不同项目的集合。它经常在许多其他媒体相关项目的幕后使用。尽管名称如此,但它与 运动图像专家组 或其创建的无数多媒体格式无关。
在本文中,我将通过命令行工具 ffmpeg 使用 FFmpeg,这只是 FFmpeg 项目中的一小部分。它在许多不同的操作系统上可用,并且默认包含在某些操作系统中。它可以从 FFmpeg 网站 或通过大多数软件包管理器下载。
FFmpeg 是一个强大的工具,几乎可以对多媒体文件执行您能想象到的任何操作。在本文中,我们有兴趣使用它来转换文件,因此我们不会深入探讨它的整个功能集。在我们了解如何使用 FFmpeg 之前,首先我们需要快速了解一下媒体文件到底是什么。
媒体文件
从非常高的层面来看,媒体文件被分解为容器及其流。流包括实际的 AV 组件,例如电影的音频或视频,并使用特定的媒体编码或 编解码器 进行编码。每个编解码器都有其自身的属性、优点和缺点。例如,FLAC 编解码器 适用于高质量的无损音频,而 Vorbis 旨在在文件大小上与 MP3 竞争,同时提供更好的音频质量。这意味着 FLAC 格式的文件将比 Vorbis 音频流大得多,但听起来应该更好。两者本身并没有优劣之分,因为每个都试图做不同的事情。
容器是流的包装器。它提供了一个单一的界面,媒体播放器和工具可以与之交互。一些容器非常先进,允许任何类型的流,包括单个容器内的多个视频和音频流。容器中的流不一定只是音频或视频。不同的容器将允许不同的流,例如,字幕、章节信息或其他元数据。这一切都取决于容器设置为允许的内容。
这是媒体文件的抽象表示,并跳过了容器之间的大量差异。许多容器需要特定的流和元数据,或者对允许的编解码器或内容施加限制。此解释足以让您理解本文。要了解更多信息,请单击上面的链接。
请注意,视频和音频编码可能需要很长时间才能运行。当您使用 FFmpeg 时,您应该准备好耐心等待一段时间。
基本转换
当涉及到转换音频和视频时,最容易让人困惑的事情是选择正确的格式和容器。幸运的是,FFmpeg 的默认设置非常智能。通常,它会自动选择正确的编解码器和容器,而无需任何复杂的配置。
例如,假设您有一个 MP3 文件,并希望将其转换为 OGG 文件
ffmpeg -i input.mp3 output.ogg
此命令采用名为 input.mp3 的 MP3 文件,并将其转换为名为 output.ogg 的 OGG 文件。从 FFmpeg 的角度来看,这意味着将 MP3 音频流转换为 Vorbis 音频流,并将此流包装到 OGG 容器中。您不必指定流或容器类型,因为 FFmpeg 会为您找出答案。
这也适用于视频
ffmpeg -i input.mp4 output.webm
因为 WebM 是一种定义明确的格式,所以 FFmpeg 会自动知道它可以支持哪些视频和音频,并将流转换为有效的 WebM 文件。
根据您选择的容器,这并非总是有效。例如,像 Matroska 这样的容器旨在处理几乎任何您想放入其中的流,无论它们是否有效。这意味着命令
ffmpeg -i input.mp4 output.mkv
可能会生成一个与 input.mp4 具有相同编解码器的文件,这可能不是您想要的。
选择您的编解码器
那么,当您想要使用像 Matroska 这样的容器(它可以处理几乎任何流)但仍然影响输出中包含哪些编解码器时,您该怎么办?FFmpeg 可以帮助您!您可以使用 -c 标志选择所需的编解码器。
此标志允许您为每个流设置要使用的不同编解码器。例如,要将音频流设置为 Vorbis,您可以使用以下命令
ffmpeg -i input.mp3 -c:a libvorbis output.ogg
同样的方法也可以用于更改视频和音频流
ffmpeg -i input.mp4 -c:v vp9 -c:a libvorbis output.mkv
这将创建一个 Matroska 容器,其中包含 VP9 视频流和 Vorbis 音频流,本质上与我们之前制作的 WebM 相同。
命令 ffmpeg -codecs 将打印 FFmpeg 知道的每个编解码器。此命令的输出将根据您安装的 FFmpeg 版本而有所不同。
更改单个流
您可能经常遇到这种情况:您拥有的文件部分正确,只有一个流的格式不正确。重新编码正确的流可能非常耗时。FFmpeg 可以帮助您解决这种情况
ffmpeg -i input.webm -c:v copy -c:a flac output.mkv
此命令将视频流从 input.webm 复制到 output.mkv 中,并将 Vorbis 音频流编码为 FLAC。-c 标志非常强大。
更改容器
前面的示例可以应用于音频和视频流,允许您从一种容器格式转换为另一种容器格式,而无需进行任何额外的流编码
ffmpeg -i input.webm -c:av copy output.mkv
影响质量
现在我们已经掌握了编解码器,下一个问题是:我们如何设置每个流的质量?
最简单的方法是更改比特率,但这可能会或可能不会导致质量发生变化。人类的视觉和听觉能力并不像我们想象的那么清晰和明确。有时更改比特率会对主观质量产生巨大影响。有时它可能什么都不做,只会更改文件大小。有时很难判断会发生什么,除非尝试一下。
要设置每个流的比特率,您可以使用 -b 标志,它的工作方式与 -c 标志类似,但您设置的是比特率,而不是编解码器选项。
例如,要更改视频的比特率,您可以像这样使用它
ffmpeg -i input.webm -c:a copy -c:v vp9 -b:v 1M output.mkv
这将从 input.webm 复制音频 (-c:a copy),并将视频转换为 VP9 编解码器 (-c:v vp9),比特率为 1M/s (-b:v),所有这些都捆绑在 Matroska 容器 (output.mkv) 中。
我们可以影响质量的另一种方法是使用 -r 选项调整视频的帧率
ffmpeg -i input.webm -c:a copy -c:v vp9 -r 30 output.mkv
这将创建一个新的 Matroska,其中音频流被复制过来,并且视频流的帧率被强制设置为每秒 30 帧,而不是使用来自输入的帧率 (-r 30)。
您还可以使用 FFmpeg 调整视频的尺寸。最简单的方法是使用预定的视频尺寸
ffmpeg -i input.mkv -c:a copy -s hd720 output.mkv
这将输出中的视频修改为 1280x720,但如果您愿意,也可以手动设置宽度和高度
ffmpeg -i input.mkv -c:a copy -s 1280x720 output.mkv
这将产生与先前命令完全相同的输出。如果您想在 FFmpeg 中设置自定义尺寸,请记住宽度参数 (1280) 在高度 (720) 之前。
调整帧率和比特率是影响媒体质量的两种粗略但有效的技术。如果现有来源的质量已经很低,则将这些值设置得非常高无法提高其质量。
更改这些设置对于快速降低高质量流以制作更小的文件大小最为有效。调整视频的大小无法提高质量,但可以使其更适合平板电脑而不是电视。将 640x480 视频的大小更改为 4K 不会改善它。
更改文件质量是一个非常主观的问题,这意味着没有一种方法可以每次都有效。最好的方法是进行一些更改并测试它对您来说是否看起来或听起来更好。
修改流
通常,您有一个几乎完美的文件,您只需要剪掉一些部分。使用可以向您显示您正在更改的内容的工具可以更轻松地完成此操作,但是如果您确切知道要修剪的位置,则在 FFmpeg 中执行此操作非常容易
ffmpeg -i input.mkv -c:av copy -ss 00:01:00 -t 10 output.mkv
这将复制视频和音频流 (-c:av copy),但会修剪视频。-t 选项将剪切持续时间设置为 10 秒,-ss 选项设置视频的修剪起始点,在本例中为一分钟 (00:01:00)。您可以比小时、分钟和秒更精确,如果需要,可以精确到毫秒。
提取音频
有时您并不真正在意视频,您只是想要音频。幸运的是,在 FFmpeg 中使用 -vn 标志非常简单
ffmpeg -i input.mkv -vn audio_only.ogg
此命令仅从输入中提取音频,将其编码为 Vorbis,并将其保存到 audio_only.ogg 中。现在您有了一个隔离的音频流。您还可以以相同的方式使用 -an 和 -sn 标志来剥离音频和字幕流。
将其制作为 GIF
最近,动态 GIF(发硬 g 音,因为我不是怪物)卷土重来。我个人认为 GIF 是您可以为视频选择的最糟糕的格式。它的压缩质量和大小很差;对颜色、帧率和容器元数据有非常严格的限制;并且不支持音频。尽管如此,它还是很受欢迎。那么,您如何将视频剪辑制作成动态 GIF 呢?
如果您想制作没有音频的视频,使用 -an 标志(类似于我们上面所做的)比创建动态 GIF 更好,但是有很多地方支持 GIF,但不支持其他视频格式。对于所有这些情况
ffmpeg -i input.mkv output.gif
此命令创建与输入文件尺寸相同的 GIF。这通常不是一个好主意,因为相对于其他视频格式,GIF 的压缩效果不佳(根据我的经验,GIF 将比源视频大八倍左右)。使用 -s 选项将 GIF 调整为更小的尺寸可能会有所帮助,特别是当输入源非常大时,例如高清视频。
其他工具
虽然 FFmpeg 是大多数 AV 任务的首选工具,但它并非在所有方面都完美。有一些工具与 FFmpeg 结合使用,可以使一切变得更容易一些。
从 YouTube 抓取视频
将内容上传到 YouTube 可能非常容易,丢失原始源视频,只剩下 YouTube 版本。检索 YouTube 视频副本的最简单方法是什么?
Youtube-dl 是一个方便的小工具,您可以使用它从 YouTube 和其他几个视频流服务中抓取视频。它非常简单易用
youtube-dl https://www.youtube.com/watch?v=2m5nW9CQLJ0
此命令下载指示 URL 中的视频并将其本地保存。
Youtube-dl 有几个选项可以控制下载视频的质量和格式,但我发现使用上面的命令更容易。它将最高质量的音频和视频下载到一个文件中,然后我使用 FFmpeg 将它们转换为我想要的格式。
获取有关媒体的信息
有时您只需要知道媒体容器内部的内容。虽然有几种工具可以做到这一点,但我首选的工具是 MediaInfo。MediaInfo 显示媒体容器内部的所有信息,包括每个不同流的信息以及输入文件的元数据。这为您提供了您可能想知道的一切——以及可能一堆您不需要的东西。
运行命令 mediainfo inputFile.mkv 会以人类可读的形式输出有关输入文件的信息列表。
以及更多...
这只是 FFmpeg 功能的冰山一角。幸运的是,FFmpeg 和该项目其他工具的 文档 非常好,值得查看。它将教您关于这只“狗”能做的许多不同技巧的所有知识。
如果您正在寻找具有图形界面的多媒体转换工具,Handbrake 是一个非常好的工具,可在 Linux、Mac OS X 和 Windows 上使用。Handbrake 在幕后使用了 FFmpeg(以及其他工具)。
6 条评论