我是靠谱客的博主 执着招牌,最近开发中收集的这篇文章主要介绍ffmpeg在Linux下的编译与使用,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

ffmpeg在Linux下的编译请看文章:https://blog.csdn.net/yihuanyihuan/article/details/84405091

ffmpeg安装第三方库请看文章:https://blog.csdn.net/yihuanyihuan/article/details/84405111

linux下编译ffmpeg后会生成相关的动态文件与头文件,如何按照上述方法进行安装,其生成路径为/monchickey/ffmpeg,其目录下有四个文件夹,include,lib,bin,share。

.
├── bin
│   ├── ffmpeg
│   ├── ffprobe
│   └── ffserver
├── include
│   ├── libavcodec
│   ├── libavdevice
│   ├── libavfilter
│   ├── libavformat
│   ├── libavutil
│   ├── libswresample
│   └── libswscale
├── lib
│   ├── libavcodec.so -> libavcodec.so.57.64.101
│   ├── libavcodec.so.57 -> libavcodec.so.57.64.101
│   ├── libavcodec.so.57.64.101
│   ├── libavdevice.so -> libavdevice.so.57.1.100
│   ├── libavdevice.so.57 -> libavdevice.so.57.1.100
│   ├── libavdevice.so.57.1.100
│   ├── libavfilter.so -> libavfilter.so.6.65.100
│   ├── libavfilter.so.6 -> libavfilter.so.6.65.100
│   ├── libavfilter.so.6.65.100
│   ├── libavformat.so -> libavformat.so.57.56.101
│   ├── libavformat.so.57 -> libavformat.so.57.56.101
│   ├── libavformat.so.57.56.101
│   ├── libavutil.so -> libavutil.so.55.34.101
│   ├── libavutil.so.55 -> libavutil.so.55.34.101
│   ├── libavutil.so.55.34.101
│   ├── libswresample.so -> libswresample.so.2.3.100
│   ├── libswresample.so.2 -> libswresample.so.2.3.100
│   ├── libswresample.so.2.3.100
│   ├── libswscale.so -> libswscale.so.4.2.100
│   ├── libswscale.so.4 -> libswscale.so.4.2.100
│   ├── libswscale.so.4.2.100
│   └── pkgconfig
└── share
    └── ffmpeg

2.使用ffmpeg生成的动态库与头文件
程序可以打印出FFmpeg类库的基本信息,使用该程序通常可以验证FFmpeg是否正确的安装配置:

#include <stdio.h>  
  
#define __STDC_CONSTANT_MACROS  
  
#ifdef __cplusplus  
extern "C"  
{  
#endif  
#include "libavcodec/avcodec.h"
#include "libavformat/avformat.h"
#include "libavfilter/avfilter.h"
#ifdef __cplusplus  
};  
#endif  
  
  
/** 
 * AVFormat Support Information 
 */  
char * avformatinfo(){  
  
    char *info=(char *)malloc(40000);  
    memset(info,0,40000);  
  
    av_register_all();  
  
    AVInputFormat *if_temp = av_iformat_next(NULL);  
    AVOutputFormat *of_temp = av_oformat_next(NULL);  
    //Input  
    while(if_temp!=NULL){  
        sprintf(info, "%s[In ] %10sn", info, if_temp->name);  
        if_temp=if_temp->next;  
    }  
    //Output  
    while (of_temp != NULL){  
        sprintf(info, "%s[Out] %10sn", info, of_temp->name);  
        of_temp = of_temp->next;  
    }  
    return info;  
}  
  
/** 
 * AVCodec Support Information 
 */  
char * avcodecinfo()  
{  
    char *info=(char *)malloc(40000);  
    memset(info,0,40000);  
  
    av_register_all();  
  
    AVCodec *c_temp = av_codec_next(NULL);  
  
    while(c_temp!=NULL){  
        if (c_temp->decode!=NULL){  
            sprintf(info, "%s[Dec]", info);  
        }  
        else{  
            sprintf(info, "%s[Enc]", info);  
        }  
        switch (c_temp->type){  
        case AVMEDIA_TYPE_VIDEO:  
            sprintf(info, "%s[Video]", info);  
            break;  
        case AVMEDIA_TYPE_AUDIO:  
            sprintf(info, "%s[Audio]", info);  
            break;  
        default:  
            sprintf(info, "%s[Other]", info);  
            break;  
        }  
  
        sprintf(info, "%s %10sn", info, c_temp->name);  
  
        c_temp=c_temp->next;  
    }  
    return info;  
}  
  
/** 
 * AVFilter Support Information 
 */  
char * avfilterinfo()  
{  
    char *info=(char *)malloc(40000);  
    memset(info,0,40000);  
  
    avfilter_register_all();  
  
    AVFilter *f_temp = (AVFilter *)avfilter_next(NULL);  
      
    while (f_temp != NULL){  
        sprintf(info, "%s[%15s]n", info, f_temp->name);  
        f_temp=f_temp->next;  
    }  
    return info;  
}  
  
/** 
 * Configuration Information 
 */  
char * configurationinfo()  
{  
    char *info=(char *)malloc(40000);  
    memset(info,0,40000);  
  
    av_register_all();  
  
    sprintf(info, "%sn", avcodec_configuration());  
  
    return info;  
}  
  
int main(int argc, char* argv[])  
{  
    char *infostr=NULL;  
    infostr=configurationinfo();  
    printf("n<<Configuration>>n%s",infostr);  
    free(infostr);  
  
    infostr=avformatinfo();  
    printf("n<<AVFormat>>n%s",infostr);  
    free(infostr);  
  
    infostr=avcodecinfo();  
    printf("n<<AVCodec>>n%s",infostr);  
    free(infostr);  
  
    infostr=avfilterinfo();  
    printf("n<<AVFilter>>n%s",infostr);  
    free(infostr);  
  
    return 0;  
}

编译方法:

g++ -I ../include/ hello_world.cpp -o hello_world -L../lib/ -lavcodec -lavdevice -lavfilter -lavformat -lavutil

-I 指定头文件的搜索路径, -L指定动态库的搜索路径 -l指定要链接的动态库

最后

以上就是执着招牌为你收集整理的ffmpeg在Linux下的编译与使用的全部内容,希望文章能够帮你解决ffmpeg在Linux下的编译与使用所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(56)

评论列表共有 0 条评论

立即
投稿
返回
顶部