使用FFmpeg C API调整视频大小

时间:2012-02-28 20:34:02

标签: android c api ffmpeg

我正在尝试使用FFmpeg在Android设备上调整视频文件的大小。备注:我不能将FFmpeg用作二进制文件 - 在我的情况下,它应该用作共享库(只能访问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调整视频文件的大小?

1 个答案:

答案 0 :(得分:1)

根据我的记忆,sws_scale()是使用最近的FFmpeg版本执行此操作的方法。尽管准备SwsContext等额外的步骤并不难以使用,并且有一些示例,例如您引用的网站上的教程。

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

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