最近不时需要实现这样一种需求:将一段 .wav 格式的录音,配一张静止画面(内容为几行文字),做成一个视频并上传 YouTube。要求整个过程中尽量不损失音频质量。
经实践发现一种简单有效的方案,现记录如下:
通过 Google Slides 制作静态画面。Google Slides 允许将单张幻灯片导出为 .png 格式的图片。
注意:导出前需将幻灯片尺寸设置为“Custom 1280×720”,否则默认生成的图片尺寸为 960×540,这样制成的视频是不会被 Youtube 标记为“HD”的。
安装 ffmpeg。在 Mac 上,最简单的方式是通过 Homebrew,有现成配方。其他平台安装方法从略。
1$ brew install ffmpeg 2$ ffmpeg -version 3ffmpeg version 3.3.2 Copyright © 2000-2017 the FFmpeg developers 4built with Apple LLVM version 8.1.0 (clang-802.0.42) 5(下略)
生成包含原始音频的 .flv 文件。
1$ ffmpeg -r 1 -loop 1 -i cover.png -i audio.wav -acodec copy -r 1 -shortest output.flv
注意这个命令中,各参数的顺序不能变。
- 前一个 -r 1 表示输入为每秒 1 帧。 -loop 1 表示无限循环。然后 -i cover.png 是输入的图片文件。
- 接着是输入的音频文件 -i audio.wav,-acodec copy 表示不对音频进行转码,即保留原始 Wave 格式。
- 后一个 -r 1 表示输出也为每秒 1 帧。 -shortest 保证了生成的视频与音频等长(因为视频是无限循环的)。
- 最后是输出文件名。
之所以选择生成 .flv 而非 .mp4 文件是因为(似乎)只有 .flv 支持 Wave 格式的音频;使用 .mp4 会报错,必须使用某种 codec 将音频编码。
将生成的 output.flv 上传 Youtube。Youtube 会自动选择合适的编码方案将音频重新编码,由于上传的是原始 Wave 文件,避免了二次编码造成信息进一步损失。