只有一个静态图像和声音,我应该使用哪种视频编码算法?

问题描述:

我在做视频处理任务,我需要解决的其中一个问题是为整个视频中只有一个静态图像的视频选择适当的编码算法。只有一个静态图像和声音,我应该使用哪种视频编码算法?

目前我尝试了几种算法,比如DivX和XviD,但是他们为1分钟长的视频制作了3MB视频。音频是64kbit/s mp3,所以音频只需要480KB。所以视频是2.5MB!

由于视频中的图像没有变化,所以可以非常有效地压缩视频,因为没有动作。图像大小本身(它是一个JPG)只有50KB。

所以理想情况下,我希望这个视频约为550KB - 600KB而不是3MB。

有关我如何优化视频的任何想法,所以它不是那么庞大?

我希望这是正确的stackexchange论坛来问这个问题。

+1

也许你可以设置帧每秒或比特率是令人难以置信的低。或者也许有一个压缩方案有关键帧,其中可以消除除了两个(开始和结束)之外的所有关键帧。 – ninjagecko 2012-04-06 02:08:30

+0

这不是一个编程问题。 – 2012-04-06 02:10:22

+0

@ninjagecko如果我将比特率设置得非常低,则视频中的图像质量也会非常低。我用300kbit/s解决了视频问题。好好考虑帧每秒!让我马上尝试一下。 (不知道它将如何与音频工作。) – bodacydo 2012-04-06 02:12:08

将每秒帧数设置得非常低。如果可以的话,低于1fps。您的目标是尽可能接近两个关键帧(一个开始,一个结束)。

您是否可以做到这一点取决于您使用的方案/编解码器,也取决于编码器。

许多编解码器将具有与关键帧相关的选项。例如,以下是一些开放源码编码器:

的lavc(libavcodec的):

在keyint = < 0-300> - 最大关键帧之间的在帧(默认时间间隔:250或一个关键帧每十秒在25fps电影中

这是MPEG-4的推荐默认值)。大多数编解码器需要定期的关键帧来限制失配错误的累积。寻找关键帧也是需要的,因为只有关键帧才能搜索 - 但关键帧需要比其他帧更多的空间,所以这里的较大数字意味着稍小的文件,但不太精确的搜索。 0等于1,这使得每个帧都成为关键帧。值> 300不推荐使用,因为质量可能不好,这取决于解码器,编码器和运气。 MPEG-1/2使用值< = 30是很常见的。

xvidenc:

max_key_interval = - 关键帧之间的最大间隔(默认值:10 * FPS)

有趣的是,这种解决方案可能降低寻求在文件中的能力,因此你会想测试一下。

+0

这是奇妙的忍术。我不知道FPS可以是分数。我认为他们只能是整数。我尝试的价值低至0.1,它的工作原理! – bodacydo 2012-04-06 03:45:15

+0

我下降到每个视频750KB! – bodacydo 2012-04-06 03:53:38

我觉得这个问题与视频编码器的实现有关,而不是视频编码标准本身。实际上,大多数视频编码器的实现并不是针对静态图像的视频而设计的,因此当输入静态图像的视频时,它不会产生完美的比特流。大多数视频编码器实现都是为处理“自然”视频而设计的。

如果你真的需要对静态图像的视频编码更好的结果,你可以做一个开源视频编码器的黑客,从第2帧,标志着所有MB‘跳跃’...

+0

什么是MB? () – bodacydo 2012-04-06 02:26:10

+0

MB表示MacroBlock。 MacroBlock通常是一个16x16的方块,视频编码器会将输入图像分割成MB,然后逐个处理它们。 – ciphor 2012-04-06 03:08:01