重新编码AVI文件以适应给定的输出文件大小。

问题描述:

我有一个AVI文件,我想要重新编码以适合尺寸为650 MB的CD。我如何编码,使文件大小不超过给定的大小?我可以使用哪个程序?重新编码AVI文件以适应给定的输出文件大小。

+0

抱歉,如果我想盗版一部电影,我可能会有些匆忙。我如何重新打开一个问题? – 2008-11-24 21:16:35

AutoGK可以非常有效地做到这一点。主要为DVD ****咳嗽****备份目的而设计,但它也将接受AVI作为源。它更多的是一个开放源码程序集合和一个协调的GUI,所以当安装程序安装多个项目时不要担心。

我假设你希望以编程方式做到这一点:

对于Windows:

可以使用的DirectShow通过建立一个filter图表来转码视频。

获取(如果您还没有)用于Windows的平台SDK。然后在这里浏览,查看一些为转码创建滤波器图的directshow示例。

建立你将需要基类。你可以在这里建立他们:

C:\Program Files\Microsoft SDKs\Windows\v6.1\Samples\Multimedia\DirectShow\BaseClasses 

然后检查这里的例子:

C:\Program Files\Microsoft SDKs\Windows\v6.1\Samples\Multimedia\DirectShow 

您也可以手动创建过滤器图表获得挂起如何使用它们,看看这些东西是如何意义(如编码器的枚举,你将在示例中学习):

C:\Program Files\Microsoft SDKs\Windows\v6.1\Bin\graphedt.exe 

一旦有了这种过分了,了解的DirectShow是如何工作的,你可以使用一些数学推测OU t如何对视频进行转码以适应您需要的尺寸。要做到这一点,你可能想看看你的输入视频有多少帧/秒,每帧有多大。

不同的编码器的工作方式不同:

让我们假设你正在转码avi文件到一个较小的或较低品质的AVI文件。看看你的输入帧大小和fps来确定整个文件大小,然后用一些代数来计算如何减少帧大小或减少每秒帧数(或两者的组合)以达到所需的大小(可以是你的输入变量)。

至于其他编码器,你可能想看看它们是如何工作的。诸如mp4之类的有损编码器执行估计以找出哪个视频在帧之间发生了变化 - 并且该信息被存储在文件中以重建帧。您必须阅读它们的工作方式 - 或查看如何使用特定的编码器获取更多详细信息。

对于Linux(和窗口):

您可以使用ffmpeg这是一个全功能于一身的转码和其他东西的视频。您甚至可以找到预编译的命令行应用程序的exe,尽管主页面并未托管它(只是源代码)。此应用程序使用开源视频库来执行大量的视频转码以及其他许多事情。如果你可以找到一个好的可靠的exe文件,你应该检查一下,如果你想要一些易于使用的应用程序。在这里查看他们的主页。

我希望这能让你开始。

要使它适合特定的大小,您必须使用适当的比特率。

对于固定比特率视频,要获得目标比特率,您需要以目标大小(以位为单位)和源的长度(以秒为单位)。

target bit-rate = size/seconds 

例如:

seconds = (90mins * 60) = 5400 
size = ((650MB * 1024) * 8) = 5324800 
target bit-rate = ~986 kilobytes per second 

随着可变的比特率,事情而更加复杂。不太确定是否有办法准确地将输出文件设置为一个设定的大小。最简单的方法是使用上述方法计算最大比特率,

计算AVI的秒数。然后,将文件大小除以长度。转换为每秒千比特,并将其用作比特率中位数。 (使用Google轻松完成数学计算和转换。)

您可以根据需要权衡视频和音频比特率。 AAC通常96 kbps足够好,但您可能需要更多或更少。实验。