2

我有一个 Delphi 6 应用程序,它从机器人传入的视频和音频流中制作电影。PC 将视频流作为一系列 JPEG 帧接收,将音频作为 PCM 音频数据块接收。我正在使用 Windows AVIFile 函数(AVIStreamCreate 等)来创建电影。对于视频压缩器的选择,我使用 AVISaveOptions() 函数并让用户从系统上可用的压缩器中选择一种可用的压缩器。例如:Microsoft Video 1、Radius 的 Cinepak Code 等。请注意其他几个可用的,如 Microsoft H.263 或 H.261 因 AVIERR_BADFORMAT 错误而失败,因此我无法对其进行测试。使用 GSM 6.10 压缩器压缩音频。

问题是我似乎无法接近使用 Adob​​e Premiere 等工具进行比较的压缩率。请注意,我知道 Premiere 使用与我不同的整体过程进行压缩,并使用不同的文件格式(如 MPEG 或 Quicktime 等)进行压缩。但如果可以的话,我希望获得可比较的压缩率。

无论我从 AVISaveOptions() 中选择哪个压缩器,无论我将压缩器的可用压缩质量设置调到多低(例如,Microsoft Video 1 的时间质量比和压缩质量),一分钟的视频总是结束创建一个大小约为 14MB 的 AVI 文件。作为比较,我可以使用 Adob​​e Premiere 创建的文件大小小于 1 MB,并且看起来几乎相同的视觉质量(换句话说,对于我的目的来说已经足够了。我不关心这里的实际质量损失。)。

如果我检查使用 Windows AVI API 的文件输出,我会发现我使用压缩器更改的所有设置都不会影响帧速率。它始终与输入帧速率相同。现在,如果有必要,显然我可以在输入端丢帧,但这会有点混乱,因为它与音频同步,如果可以的话,我想避免这种情况。

但更重要的是数据速率。无论我将压缩器设置调到多低,我都无法将其降低到大约 2.3 kbps。我使用 Premiere 创建的视频,以及我玩过的其他视频文件大小与时长的比例都正常,都在 1.2 kbps 左右。

总的来说,我的 AVI 文件的文件大小与我使用 Premiere 或其他人发送给我的压缩良好的文件大小之间的差异是10 比 1。因此,我的压缩率比其他视频文件差 10 倍,而其他文件的视频质量没有令人不快的差异。

我该怎么做才能获得可比较的压缩比?

更新:David Heffernan 的回复包含一个对我有用的快速解决方案。我之所以强调它,是因为它还包含一个重要的许可警告。对于像我一样希望让您的用户尽可能方便地使用 XVid 编解码器的人,请阅读下面的文章。它包含有关如何在以后的会话中重新使用用户的压缩器选择以及他们选择的压缩配置选项的说明,而不会再次打扰用户:

http://msdn.microsoft.com/en-us/magazine/hh580739.aspx

出于好奇,从我之前的输出 AVI 文件大小到使用 XVid 编解码器创建的文件大小的变化是 12.231 MB 到 632 KB,视频质量非常合理。

4

1 回答 1

2

真正简单的答案是安装XVID编码器。随 Windows 提供的编解码器都不适合您的用途。XVID 既高质量又免费。

关于分发和许可的影响,XVID FAQ有这样的说法:

我可以将 Xvid 与我的专有程序一起分发吗?

如果您的程序在运行时调用 Xvid 功能,则它是派生作品,因此,GPL 的条款适用于包括您的程序在内的整个作品。所以不,您不能将 Xvid 与您的专有程序一起分发。如果你想分发,你也必须在 GPL 下发布你的程序。这还需要提供完整的应用程序源代码。有关更多信息,请参阅 GPL 许可文本。

我们根本不链接到 Xvid,只是在运行时通过 VfW 接口调用——我们可以使用我们的专有软件进行分发吗?

不,您以何种方式链接到 Xvid 或您认为是链接的方式以及不链接的方式都没有关系。GPL 根本不关注“链接”一词,而是要求根据 GPL 的条款将组合/衍生作品作为一个整体发布。基本上,任何两个(或更多)作品在被分发以供组合使用时构成一个组合作品。因此,如果您的程序在运行时调用 Xvid 功能,它将构成派生工作 - 无论您如何在技术上实现对 Xvid 的调用。如果您不想在 GPL 下发布您的程序,请避免与 Xvid 一起分发它。

这对您意味着,如果您的程序也获得 GPL 许可,您只能随您的程序分发 XVID。但是你建议你的用户为自己获取 XVID 是完全没问题的。

于 2012-05-12T15:01:45.630 回答