跳转到内容

FFMPEG 中级指南/格式

来自维基教科书,开放的书籍,开放的世界

你是否曾经好奇为什么一个 MP3 文件可以告诉你歌曲的名称和制作人? 嗯,这是有原因的,它与 MPEG 如何设计格式有关。 它可以处理元数据,称为 ID3 标签,MP3 播放器会在播放来自编解码器的音乐时从格式中读取这些标签。 格式也通常被称为文件格式容器格式容器。 一些视频的例子包括高级系统格式 (ASF)、音频视频交错 (AVI) 和MPEG-4 第 14 部分 (.mp4)、Ogg (.ogg) 和Matroska (.mkv)。

要了解编解码器如何在格式中使用,你可以看看在多种语言被很多人说的地方制作和销售的商业 DVD 和蓝光光盘。 外壳背面通常会解释光盘有两个不同的音轨;一个是用该国的主要语言,另一个是用第二语言或内容被配音的原始语言。 或者,一些主要的制片厂会发布带有 5.1 和立体声扬声器设置的母带音频的电影,或者他们可能会提供音频描述或视障人士。 无论哪种情况,大多数 DVD 播放器都能够在运行时切换这些音轨,如果没有自动切换,制片厂通常会提供一种方法让人们在 DVD 中导航到选项菜单并在播放电影之前选择它。 字幕也是如此。

使用正确的软件,这些音轨可以完全相互隔离,这个过程被称为解复用,FFmpeg 是这些程序之一,这并不奇怪。 它可以执行解复用和解码,作为多媒体工具的功能之一。 查询一般文档 以获取 FFmpeg 支持的编解码器列表。

FFmpeg 使用一个名为 libavformat 的库来与格式交互。 一些格式有默认的编解码器和设置,你不需要自己设置。 这就是为什么 ffmpeg -i input -o output 在没有任何特定标志的情况下也能正常工作。

编解码器

[编辑 | 编辑源代码]

FFmpeg 使用一个名为 libavcodec 的库来与编解码器交互。 与格式类似,一些编解码器有默认设置,你不需要自己设置。

流复制

[编辑 | 编辑源代码]

可以在不重新编码流的情况下将编解码器从一种格式传输到另一种格式。[1]

ffmpeg -i input -acodec copy -vcodec copy -o output

虽然这确实允许在现有视频编解码器之上添加字幕,但也意味着你要牺牲对媒体播放器的支持。 根据你切换到的格式,你可能需要重新编码。

你也可以从多媒体文件中剪切和转换一部分。 这对于从包含多个歌曲的原始 (PCM) 音频 CD 复制文件中提取和压缩音轨很有用。

ffmpeg -c:a pcm_s16le -ss 1615.3 -t 279  -i RawAudio-example.bin Track-6.ogg

在本例中,音轨是通过指定编解码器 (-c:a pcm_s16le PCM 16 位小端)、源文件中的开始时间 -ss 1615.3、包含音轨的摘录长度 -t 279、源文件名 -i RawAudio-example.bin 和一个示例输出文件名 Track-6.ogg 来提取的。

批处理转换

[编辑 | 编辑源代码]

虽然 ffmpeg 缺乏本地的批处理转换功能,但可以使用 for 循环 命令。 例如,以下命令将工作目录中的所有 wavesound 文件转换为 OGG 格式

for i in *.wav; do ffmpeg -i "$i" "${i%.*}.ogg"; done

FFMPEG 工具会自动检测文件扩展名。 请注意,该命令区分大小写。

参考资料

[编辑 | 编辑源代码]
  1. FFmpeg 文档中的流复制
华夏公益教科书