FFmpeg枚举编解码器

通过获取FFmpeg中的编码器名字,codec->name),然后可以直接通过avcodec_find_encoder_by_name获取编码器;

codec = avcodec_find_encoder_by_name("h264_nvenc");

当然,也可通过获取codec->id (AVCodecID),通过avcodec_find_encoder获取编解码器;

codec =  avcodec_find_encoder( AV_CODEC_ID_H264 );

 

但是有区别,H264,如果通过AV_CODEC_ID_H264获取,默认获取的是软编码,通常就是x264;

但是通过name,h264_nvenc,可以获取硬件编码器,来指定编码H264;

因为,nvenc 和libx264或者libopenh264的encoder AVcodecID 都是AV_CODEC_ID_H264,但是name不同;

 

一:获取视频编码器  

这个方法是示例,源码示例还有,在FFmpeg 4.1版本中av_codec_next函数已经不用了;用后面的方法;

#include "libavcodec/avcodec.h"

 


int enum_codec() 
{
AVCodec *codec = NULL;
int ret = 0;
char chget[10];


avcodec_register_all();


while (codec = av_codec_next(codec))
{
if (av_codec_is_encoder(codec)) 
{
if (codec->type == AVMEDIA_TYPE_VIDEO) 
{
if (1) 
{
av_log(NULL, AV_LOG_FATAL, "Encoder %s is missing the sample_fmts field\n", codec->name);
printf(codec->name); printf("\n");
ret = 1;
}
}
}
}



gets(chget);
return ret;

 

 

}

 

 

二:获取视频解码:

 

三:获取音频编解码器;

 

 

 

 现在用新的方法获取机器相关的编解码器信息系;

int enum_codec() 
{
    FILE * f = fopen("C:/ffmpeg_codec.txt", "w+b");;

    AVCodec *prev = NULL, *p;
    void *i = 0;
    while ((p = (AVCodec*)av_codec_iterate(&i))) 
    {
        if (prev)
            prev->next = p;
        prev = p;

        p->name;
        p->long_name;
        p->type;
    

        if(p->long_name && strlen(p->long_name))
        {
            fwrite(p->name, 1, strlen(p->name), f);        
            fwrite("\n", 1, 1, f);
            fwrite(p->long_name, 1, strlen(p->long_name), f);
            fwrite("\n", 1, 1, f);
            fwrite("\n", 1, 1, f);
        }

    }

    fclose(f);

 

return 1;
}

 

 

当然也可以通过 ffmpeg -encoders 命令查看;更多命令可以通过 FFmpeg -h 查看;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

chinabinlang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值