强大的多媒体命令行工具,第二部分 — Transcode
长期以来,MEncoder 通过 MPlayer 项目和 FFmpeg(现在也是 MPlayer 的一部分)支持视频编码。 Transcode 是一个新兴的命令行工具,用于视频和音频转换。 Transcode 曾经让我感到恐惧,但现在好多了。 它确实需要一些时间来学习其非常不直观的语法——作者使用了所有小写和大写英文字母来指定命令行选项。 在其他 Linux 命令中使用更长的助记选项可能会使事情变得更容易。 无论如何,让我们进入正题。
您可以使用 Transcode 应用某些视频滤镜来平滑、模糊、增强、添加或删除徽标、应用遮罩等等。 但在我们开始讨论所有这些之前,这里有一些来自实战的建议。 执行以下操作
$ tcmodinfo -p
然后,转到该目录并查看您的 Transcode 程序附带了哪些导入模块、导出模块和滤镜。 我的程序不包含几个导出模块,并且缺少一些滤镜。
Transcode 的错误报告不是很用户友好。 您需要仔细查看输出,以 выяснить Transcode 是否理解了某个命令开关。 有时它会挂起,偶尔它会告诉您命令行中哪里出错了。 因此,您需要花一些时间来熟悉命令的使用。
Transcode 的另一个问题是它支持大量的选项,因此您需要记住一些。 打开手册页,并确保您没有遗漏任何内容。 一旦您找到有效的组合,一切就都准备好了。 一些最重要的开关是 -x、-y、-J、-i 和 -o。
-x 和 -y 开关分别用于指定导入和导出模块。 根据输入/输出视频/音频格式,您可能需要更改它们。 使用 Transcode 附带的 tcprobe 工具来 выяснить Transcode 是否自动探测到特定的音频或视频输入。 如果 tcprobe 对此感到满意,您可以跳过 -x 选项。
-J 选项是最通用的。 它是滤镜选项,您可以使用它来指定滤镜链。 所有视频预处理和后处理都使用此开关执行。
-i 和 -o 选项用于视频输入和输出文件。 它们中的一个或两个可以是 /dev/null。 还有一些开关用于指定外部音频文件作为输入 (-p) 以及用于将处理后的音频转储到单独的文件 (-m)。 您可以进行大量调整,并将大量的滤镜子系统添加到链中。 Transcode 是一个年轻的程序,我希望会添加更多的滤镜。
Transcode 命令奇怪的是,Transcode 支持各种可以想象的输入和导出模块。 它对视频的理解非常广泛。 它可以从 ImageMagick 库中获取图像; 它可以进行纯音频处理; 它可以将声音文件作为视频的音频输入,并将输出音频重定向到不同的文件等等。
我测试了很长的命令列表,以了解它可以做什么。 一旦我 выяснить 了基本知识,剩下的就一帆风顺了。
以下是从 video.mpg 中提取音频的命令
$ transcode -i /home/girish/video.mpg -x mpeg2 -y null,ogg -J aclip,resample -m /tmp/foo.ogg -E 22050
我没有 MP3 导出模块,所以我将其编码为 Ogg Vorbis 格式。 -E 22050 开关指定输出采样率。 您还可以使用相同的开关指定每个采样的位数和输出通道数。
下一个命令将输出音频以 AC3 格式保存,并在按照 AC3 标准重采样到 48,000Hz 后保存。 -J resample 滤镜选项是必要的,但由 Transcode 内部调用
$ transcode -i /home/girish/videos/video.mpg -x mpeg2 -E 48000 -y null,ac3 -m /tmp/foo
以下行将运动 JPEG 格式的视频帧以及上述音频处理一起转储
$ transcode -i /home/girish/videos/video.mpg -x mpeg2 -E 48000 -y mjpeg,ac3 -J aclip,resample -m /tmp/foo -o /tmp/fop.mjpeg
此行将视频帧转储到 /tmp 目录中带有前缀 ppm 的单独 ppm 文件中
$ transcode -i /home/girish/videos/video.mpg -x mpeg2 -E 48000 -y ppm,ac3 -m /tmp/foo -o /tmp/ppm
此行执行相同的操作,但采用 JPEG 格式
$ transcode -i /home/girish/videos/video.mpg -x mpeg2 -E 48000 -y jpeg,ac3 -m /tmp/foo -o /tmp/foo
还支持 PNG,但我的 transcode 安装中没有导出模块。

图 1. Transcode 架构
DVD 包含 VOB 容器格式的视频,该格式可以包含多个音频和视频流,以及字幕文件,所有这些都组织成章节。 Transcode 可以使用 -T 开关理解 DVD 标题。 有许多在线资源提供了有关 DVD 处理的更多信息。
让我们回到我们的示例。 以下行执行与上一个示例命令相同的操作,但忽略音频
$ transcode -i /home/girish/videos/video.mpg -x vob -y jpg -o /tmp/foo
请注意,transcode 可以使用外部命令,例如 ffmpeg 或 oggenc,进行处理,并且您可以观察输出中发生的情况。
Transcode 有效地使用了 ANSI 终端颜色序列,您可以使用命令行开关打开或关闭它。 还有其他几个开关用于导出特定的配置文件或宽高比。 DVD 配置文件得到了很好的支持,通过它可以绕过一些其他选项。 还有一些开关用于翻转、拍摄彩色底片、镜像等等。
此命令反转视频颜色以拍摄彩色底片
$ transcode -i /home/girish/videos/video.mpg -x vob -y mjpeg,ogg -J invert -o /tmp/foo.mjpeg -m /tmp/foo.ogg
-J invert 滤镜执行此魔法。 滤镜子系统是 Transcode 最强大的组件; 特别注意它的威力和用法。
以下是应用巨大滤镜链的示例。 它演示了 Linux 命令行的强大功能,以及 Transcode 可以处理这种滤镜链的架构
$ transcode -i /home/girish/videos/video.mpg -x vob, -y mjpeg, -J mask=lefttop=0x0:rightbot=500x500,msharpen=strength=205:threshold=20,nored,normalize=smooth=0.2,pp=hb/vb/dr/al-o /tmp/foo.mjpeg
不要被长度吓到。 一旦您将其分解,它就很简单了。 大多数开关应该很熟悉; 只有 -J 开关如此冗长。
在上面的示例中,首先我应用遮罩滤镜。 它挑选出视频的某些部分并忽略其余部分。 我指定了用于遮罩的矩形坐标。 我得到了一个从屏幕左上角开始的 500x500 像素的正方形。 msharpen 滤镜是 Transcode 的锐化滤镜之一。 我通过指定锐化的阈值和强度来调整算法。 nored 和 normalize 滤镜分别去除红色分量并标准化音频。
您可以在同一链中混合音频和视频滤镜。 pp 滤镜的功能与 MPlayer 的后处理滤镜子系统相同。 这里我使用了 MPlayer 手册页 pp 部分中给出的相同选项。 它执行水平和垂直去块、去振铃和自动亮度/对比度校正。
在处理如此长的滤镜链时,请在得出像上面这样复杂的结果之前观察每个滤镜的效果。
此示例演示了 unsharp 滤镜,它类似于 MPlayer 同名的滤镜
$ transcode -i /home/girish/videos/video.mpg -x vob, -y mjpeg, -J unsharp=amount=-1.5:luma=0.6:matrix=7x7 -o /tmp/foo.mjpeg
而且,这个命令很酷
$ transcode -i /home/girish/videos/video.mpg -x vob, -y mjpeg, -J text=string='transcode is cool':posdef=2:font=/home/girish/.ttffonts/comicbd.ttf -o /tmp/foo.mjpeg
如上所示,您可以将文本添加到视频的任何位置,位置由 pos 坐标或 posdef 预定义位置指示。 Transcode 还可以渲染 ppml 字幕并处理 DVD 字幕。
因为我没有某些滤镜和模块,所以我无法尝试更多。 但这可以通过自行编译 Transcode 来解决。 正如您在此处看到的,Transcode 是非常强大的工具,但对于初学者来说可能不太友好。 一旦您牢牢掌握了它的强大功能,您就可以超越带有高昂价格标签的 GUI 工具和商业替代品。
资源音频物理学: http://www.harmony-central.com
音频工程: http://www.ee.washington.edu/conselec/CE/kuhn/audio/95x3.htm
HRTF: http://sound.media.mit.edu/KEMAR.html
Transcode: http://www.transcoding.org
查看本文的第一部分 这里。
Girish Venkatachalam 是一位对 UNIX 深入感兴趣的开源黑客。 在他的空闲时间,他喜欢烹饪素食菜肴并真正吃掉它们。 可以通过 girish1729@gmail.com 联系他。