c语言怎么调用ffmpeg
时间: 2024-01-26 10:08:52 浏览: 170
要实现在 C 语言下使用 ffmpeg,可以使用 ff-api.h 头文件提供的 API。以下是示例代码:
```
#include <ff-api.h>
int main() {
int ret;
// 初始化 FFmpeg 库
ret = ff_init();
if (ret != 0) {
printf("Failed to initialize FFmpeg library: %s\n", ff_errstr(ret));
return -1;
}
// 打开输入文件
AVInputFormat* iformat = ff_get_input_format("filename.mp4");
AVFormatContext* ic = ff_open_input(iformat, "filename.mp4", NULL);
if (ic == NULL) {
printf("Failed to open input file: %s\n", ff_errstr(ff_errno()));
return -1;
}
// 获取输入数据流
AVStream* stream = ff_get_stream(ic, 0);
// 解码器初始化
AVCodec* codec = ff_find_decoder(stream->codecpar->codec_id);
AVCodecContext* cc = ff_init_decoder(codec, stream->codecpar);
if (cc == NULL) {
printf("Failed to initialize decoder: %s\n", ff_errstr(ff_errno()));
return -1;
}
// 解码
AVPacket* pkt = ff_read_packet(ic);
while (pkt != NULL) {
AVFrame* frame = ff_decode_packet(pkt, cc);
if (frame != NULL) {
// 输出解码后的数据
printf("Frame: %lld\n", pkt->pts);
// 释放帧数据
ff_free_frame(frame);
}
// 释放数据包
ff_free_packet(pkt);
// 读取下一个数据包
pkt = ff_read_packet(ic);
}
// 释放资源
ff_close_input(ic);
ff_close_decoder(cc);
ff_shutdown();
return 0;
}
```
上面的代码使用 FFmpeg 库解码一个 MP4 文件,并将每个解码后的帧数据输出到控制台。使用时,需要将该代码保存为 .c 文件,并在命令行中使用类似以下命令编译:
```
gcc -o myapp myapp.c -lff
```
其中,-lff 表示链接 FFmpeg 库。运行该程序即可解码指定的 MP4 文件。
阅读全文