2012-02-28 114 views
0

我正尝试使用FFmpeg调整Android设备上的视频文件大小。备注:我不能使用FFmpeg作为二进制文件 - 在我的情况下它应该用作共享库(只能访问FFmpeg C API)。使用FFmpeg C API调整视频大小

我没有找到关于视频大小调整的任何文件,但它看起来像算法如下:

10 OPEN video_stream FROM video.mp4 
20 READ packet FROM video_stream INTO frame 
30 IF frame NOT COMPLETE GOTO 20 
40 RESIZE frame 
50 WRITE frame TO converted_video.mp4 
60 GOTO 20 

我应该使用sws_scale功能,以调整框架?是否有任何其他(更简单?)的方式来调整使用FFmpeg C API视频文件?

+0

如果你想要的话,你可以使用ffmpeg可执行文件exec ... – 2012-02-28 20:35:45

+0

我不能使用FFmpeg作为二进制 - 在我的情况下它应该用作共享库(只有FFmpeg C API可以访问)。 – 2012-02-28 20:40:14

+0

嘿,你设法做到了吗?你可以通过一些代码吗? – shem 2013-02-20 17:41:48

回答

1

从我记得,sws_scale()是用最新的FFmpeg版本做到这一点。尽管准备一个SwsContext这样的额外步骤并不难,但也有一些示例,例如您引用的网站上的教程。

旧版本也有一个img_convert()函数,它使用起来有点简单,有一段时间它仍然在库中,但没有在通常的头文件中 - 它仍然工作,如果你提供了你自己的原型(取自旧版本)。如果你愿意偶然的话,这可能仍然有效 - 尽管我没有用最新版本尝试过。不过,使用sws_scale()可能会更安全。

也可以处理FFmpeg库之外的扩展,但在这种情况下它可能比它的价值更麻烦。这些库的Doxygen文档描述了AVPicture结构足够好,可以直接使用它,或将图像传输到其他表单或从其他表单传输。主要困难在于确保您可以使用或转换所使用的颜色/像素格式 - 如果您不得不将其转换为其他格式,则至少应该使用sws_scale(),如果不是调整大小的话。