业余视频制作:使用免费软件和Linux

作者:Mike Petullo

1999 年,我购买了我的第一台 DVD 播放器。我和妻子有一些 VHS 录像带,我们想用新买的播放器观看。此外,光盘媒体非常方便和稳定,将我们的视频收藏存储在 CD-R 光盘上的想法对我们非常有吸引力。接下来是一次深入的调查,并发展成了一个有趣的爱好。在本文中,我将介绍如何数字化模拟视频源,以便在计算机上存储和处理,介绍在计算机上编辑视频的工具,以及发布数字视频的一些选项。我介绍的一种发布选项是视频 CD (VCD) 格式存储,它与许多 DVD 播放器兼容。所有这些步骤都使用免费软件完成。

我是一名软件开发人员,而不是视频制作人,所以请在阅读本文时多多包涵。

数字化

我在转换视频过程中遇到的第一个障碍是如何数字化模拟 VHS 录像带。因为我想转换标准的模拟录像带,所以 IEEE 1394(苹果称之为 FireWire;索尼称之为 i.LINK)虽然非常强大,但它定义了一个纯数字接口,无法满足我的需求。相反,我决定购买一块视频采集卡。许多供应商生产这种卡,它可以接收标准的模拟视频流,并将其数字化,以便在计算机上存储或显示。我购买了一块 Hauppauge WinTV PCI 视频采集卡,它在 Linux 上运行良好,价格约为 80 美元。顺便说一句,Linux 视频采集卡的驱动框架名为 Video4Linux。

在购买视频采集卡时,有一些重要的考虑因素,尽管随着计算机速度的不断提高,这些因素变得越来越不重要。由于从大多数模拟源捕获视频必须实时进行,因此将原始视频写入磁盘需要非常快的硬盘驱动器。根据我的经验,即使是 10,000 RPM SCSI 驱动器也很难存储分辨率为 640 x 480,帧速率为 23.9 帧/秒的原始 24 位视频。想想看:大约每秒 30 帧,640 x 480 = 每帧 307,200 像素,每个像素为 24 位。为了存储这种质量的未压缩视频,硬盘驱动器需要每秒写入 2.21 x 108 位,或大约 26MB!

先别急着购买昂贵的高速磁盘阵列——还有一种替代方案。在将原始视频写入磁盘之前对其进行压缩,可以将一部分工作转移到硬盘上。压缩可以通过专用处理器完成,将工作转移到视频采集卡压缩硬件,或者在软件中完成,将工作转移到系统的 CPU。由于我的系统有两颗 1,000MHz 的 CPU,我便宜的 Hauppauge 卡(没有压缩硬件)性能也很好。如果您的计算机 CPU 稍慢,那么购买具有硬件压缩功能的视频采集卡可能更有意义,并将相对昂贵的 CPU 升级推迟到以后。

捕获原始或无损压缩视频是编辑的理想选择,但是使用精心选择的有损技术(例如 MJPEG,它使用 JPEG 静止图像压缩来存储每一帧)进行捕获是一种现实的折衷方案。JPEG 压缩可以在软件中相对快速地执行。此外,许多硬件视频压缩器输出 MJPEG。

即使在写入磁盘之前压缩视频流,硬盘速度在数字化视频中也很重要。由此可见,使用的文件系统是性能的一个重要因素。我尝试过 ext2、ReiserFS 和 XFS 文件系统。我的经验是,将视频捕获到 XFS 文件系统的性能通常优于捕获到 ext2 或 ReiserFS 格式化的磁盘。XFS 相对于 ext2 的另一个优点是它是一个日志文件系统。

Andrew Morton 的 低延迟内核补丁 似乎也有助于数字化过程。我发现使用 Andrew 的补丁,我可以在捕获视频的同时在我的计算机上执行一些次要任务,而不会丢失太多帧。

我来自美国,所以我对使用国家电视系统委员会模拟视频格式 (NTSC) 很感兴趣。许多欧洲人可能对 PAL 更感兴趣,PAL 具有类似的属性。如果您住在其他地方,稍加研究就会发现您所在地区使用的模拟视频格式。我的 VHS 录像带使用 NTSC 编码。NTSC 有一系列可接受的分辨率和帧速率;当从 VHS 源捕获时,我通常以 23.976 帧/秒的速率捕获 640 x 480 帧。虽然 VCD 是数字的,没有像 NTSC 这样的视频标准,但 DVD 播放器通常使用 VCD 包含的帧速率来决定它们将发送到与之连接的电视的模拟信号类型。例如,如果我以 25 帧/秒的速度编码 VCD,我的 DVD 播放器会输出 PAL 信号,在我的 NTSC 电视上看起来会失真。如果我以 23.976 帧/秒(有效的 NTSC 帧速率)的速度编码相同的视频流,我的 DVD 播放器会向我的电视输出 NTSC 信号。

在计算机上找到的数字媒体流通常存储为包装格式,其中包含一个或多个音频和视频轨道。包装格式的示例是 AVI 和 QuickTime。QuickTime 的优点是 Apple 对其进行了很好的定义,在 Linux 上受支持,并且能够存储远大于 4GB 的视频流。在包装格式中,可以使用不同的压缩技术,例如 MJPEG、OpenDivX、Ogg Vorbis 和 MPEG 音频。这些压缩/解压缩技术通常称为编解码器。QuickTime 等包装格式也可以包含存储密集型的原始数字音频和视频。

我发现 streamer,它是 xawtv 包 的一部分,可以很好地执行数字化任务。使用 streamer,我的系统可以从我的视频采集卡以 23.976 帧/秒的帧速率捕获 640 x 480 视频,并将其实时压缩为 MJPEG 编码的 QuickTime,然后再写入磁盘。

编辑视频

一旦我的计算机上有了数字视频,下一步就是编辑它。Broadcast 2000(MandrakeSoft 生产了一个名为 bcast-2000c 的 RPM)是一个 GPL 许可的非线性视频编辑器 [参见“Linux Box 上的电影制作?”,《LJ》2001 年 1 月和“NLE 视频编辑器”,《LJ》2002 年 2 月]。使用它,可以操作音频和视频轨道。Broadcast 2000 的屏幕截图可以在图 1 中看到。SuSE 有一个关于 Broadcast 2000 的相当不错的指南。Cinelerra 最适合擅长编译开发质量代码的用户,可以在 SourceForge 上找到,并且是 Broadcast 2000 的新兴继任者。这两个工具都适用于来自 xawtv 的 QuickTime 输出。

Amateur Video Production Using Free Software and Linux

图 1. Broadcast 2000 屏幕截图

发布视频

现在我已经能够数字化和编辑我的 VHS 录像带,是时候将它们编码为 VCD 了。一点研究表明,VCD 包含 MPEG-1 视频流和 MPEG-1 layer 2 音频流。这些数据以及一些简单的目录信息被编码到 CD 上。有关 VCD 格式的更多信息,也称为白皮书规范,可以在 www.cdpage.com/Compact_Disc_Books/whitebook.html 上找到。

一个名为 mjpegtools 的软件包可以很好地将 MJPEG 编码的 QuickTime 文件转码为 MPEG-1 流。使用 vcdimager,可以从生成的 MPEG-1 流创建 VCD 映像。最后,可以使用 cdrdao 将 VCD 映像刻录到 CD-R 媒体。以下是我如何在我的系统上使用这些工具创建 VCD 的方法

streamer -r 23.976024 -s 640x480 -f jpeg -F stereo
        -i Composite1 -n ntsc -c /dev/v4l/video0
        -b 64 -o foo.mov -p 2 -t 00:45:00

您可能需要对 -c 使用不同的参数,它指定要使用的视频捕获设备。通常它是 /dev/video0。-t 参数指定程序应继续捕获多长时间

lav2yuv +n -n 2 -d 3 foo.mov | yuvscaler -n n
        -O VCD | mpeg2enc -n n -f 1 -r 16
        -o foo_video.mpg
lav2wav +n foo.mov | mp2enc -V -o foo_audio.mp2
mplex -f 1 foo_audio.mp2 foo_video.mpg -o foo.mpg
vcdimager foo.mpg
cdrdao write --driver generic-mmc --device 0,4,0
--speed 1 videocd.cue

将 0,4,0 替换为引用您系统上的 CD 刻录驱动器的数字。

我使用一个名为 qtutils 的软件包简化了这个过程,其中包括一个名为 vcdize 的脚本。

许多 DVD 播放器除了 DVD 之外还可以播放 VCD。但是,一些 DVD 播放器在播放 CD-R 光盘时遇到问题。我的 Phillips Magnavox DVD 825 DVD 播放器可以很好地播放我刻录到 CD-R 媒体的 VCD。

除了 VCD 格式之外,还存在一些相对节省存储空间的替代方案,包括 MPEG-2 和使用 OpenDivX 和 Ogg Vorbis 编解码器的 QuickTime。这些格式可以使用视频播放器在计算机上播放,这些播放器使用 QuickTime for Linux 库,例如 X-Movie

结论

就是这样。现在您应该能够完全使用免费软件将 VHS 录像带转换为更方便的格式。您制作的 VCD 将在支持 VCD 格式和 CD-R 媒体的 DVD 播放器中播放。有关此主题的更多信息,请访问我提到的软件项目的主页。还存在两个非常相关的邮件列表:video4linux 和 mjpegtools 邮件列表,分别由 Red Hat 和 SourceForge 托管。祝您玩得愉快!

Mike Petullo 是美国陆军的一名排长,驻扎在德国。他晚上与 C 代码错误作斗争,自 1997 年初以来一直在摆弄 Linux,并欢迎您的评论。

电子邮件: lj@flyn.org

加载 Disqus 评论