如何使用 FFmpeg 进行视频转码:媒体文件的结构
媒体文件的结构[编辑 | 编辑源代码]
知道了命令行怎么使用以后,我们还得搞清一些概念,才能开始使用 FFmpeg 。在这一章,我将会为大家讲明一个媒体文件的组成,免得到后面混淆概念,产生不应该产生的问题。如果你已经对此有所了解,可以放心跳过这一章。
一个媒体文件并不像许多人想象的那样,是将媒体内容编码起来直接作为文件的。实际上,它通常是由多个不同种类的媒体流( Stream )组成,再以特定的封装格式封装起来的。
比较常见的媒体流就是视频流跟音频流了,顾名思义,视频流存储的就是视频信息,音频流存储的就是音频信息。一个视频流或者音频流的内容,就是以特定的编码格式所存储的视频或音频信息。
编码格式有许多种,有的适用于视频,有的适用于音频,大家运行 ffmpeg -codecs
后所看到的内容就是 FFmpeg 支持的编码格式。一个文件的里面的媒体流所采用的编码格式跟这个文件的后缀名并没有完全的必然联系。
不同的编码格试的编码效率以及功能不同,要查看一个编码格式的详细信息和参数,运行 ffmpeg -help encoder=编码格式
。
裸露的音频流和视频流就像白饭团,拿起来容易散开,吃起来也没什么味道。所以通常情况下,我们需要一条紫菜将它们包裹起来成为寿司,这个紫菜就是封装格式。
封装格式也有很多种,大家运行 ffmpeg -formats
就可以看到。文件的后缀名通常就代表这个文件的封装格式。
现在我们有了用白米饭和紫菜做成的寿司,不过白米饭未免显得有些单调了,所以我们也可以加一些蔬菜、肉什么的进去。比如字幕,附件什么的。这些将会在后面的章节讲到。
不同的封装格式不一定能够装下同样的东西。有的封装格式可以装下视频流和音频流,有的只能装下音频流,有的只能装下视频流。有的能塞进很多东西,有的只能放特定的几个媒体流。要查看一个封装格式的详细信息,运行 ffmpeg -help muxer=封装格式
。
总而言之,一个媒体文件就像一个寿司,由一条紫菜(封装格式)包裹,里面包含了许多米饭和蔬菜。
下一章将是我们的重头戏——开始转码。看了这么多枯燥的理论知识,是时候发挥其实际用途了!