【音视频】FFmpeg 安装+Api使用+Android+笔记(一)

12 篇文章 0 订阅
11 篇文章 14 订阅

                         FFmpeg 安装+文件处理Api使用

 

1:Windows下编译安装 FFmpeg

         https://www.imooc.com/article/247113

      (音频专家李超老师的手记,老师慕课网视频:《FFmpeg音视频核心技术精讲与实战》

2:FFmpeg在Linux(ubuntu)下编译使用

  2.1 安装yasm Yasm是什么

          Ubuntu包安装
                    sudo apt-get install yasm

          源码安装:

                   wget http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz
                   tar zxvf yasm-1.3.0.tar.gz
                   cd yasm-1.3.0
                  ./configure
                   make &&  make install    

  2.2 编译安装fdk-aac  AAC是什么

           wget https://jaist.dl.sourceforge.net/project/opencore-amr/fdk-aac/fdk-aac-0.1.6.tar.gz
           tar xvf fdk-aac-0.1.6.tar.gz
           cd fdk-aac-0.1.6
           ./configure
           make && sudo make install

2.3 安装 lame lame是什么?

     Ubuntu包安装
                    sudo apt-get install yasm

       源码安装:

                  wget http://downloads.sourceforge.net/project/lame/lame/3.99/lame-3.99.5.tar.gz
                  tar -xzf lame-3.99.5.tar.gz
                  cd lame-3.99.5
                 ./configure
                  make && sudo make install
 
 

2.4 安装 nasm  nasm是什么

      Ubuntu包安装
                    sudo apt-get install nasm

       源码安装:

                   wget https://www.nasm.us/pub/nasm/releasebuilds/2.13.03/nasm-2.13.03.tar.gz
                   tar xvf nasm-2.13.03.tar.gz
                   cd nasm-2.13.03
                   ./configure
                   make && sudo make install 

2.4 安装 x264  什么是X264

                   wget http://mirror.yandex.ru/mirrors/ftp.videolan.org/x264/snapshots/last_x264.tar.bz2
                   bunzip2 last_x264.tar.bz2
                   tar -vxf last_x264.tar
                   cd last_x264
                   ./configure --enable-static --enable-shared --disable-asm --disable-avs
                   make && sudo make install

安装ffmpeg FFmpeg是什么

            Ubuntu包安装

                      apt  install ffmpeg  【可能版本较低,安装之前可以先apt-get  updtae】

            源码安装:

                        FFmpeg官网网站下载地址

                       1:git地址                   git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg

                       2:压缩包地址             https://ffmpeg.org/releases/ffmpeg-4.1.3.tar.bz2  

                       cd ->  拉取&下载解压后的代码 目录下

                       执行:

                           ./configure --prefix=/usr/local/ffmpeg --enable-gpl --enable-small  --arch=x86_64 --enable-nonfree --                                      enable-libfdk-aac --enable-libx264  --enable-filter=delogo --enable-debug --disable-optimizations --                                      enable-shared

                            make && sudo make install

安装ffmpeg后续操作

上面我们编译完了FFMPEG之后可以去运行以下bin目录下生成的可执行文件

        root@poc-virtual-machine:/usr/local/ffmpeg/bin# ./ffmpeg  -help
./ffmpeg: error while loading shared libraries: libavdevice.so.58: cannot open shared object file: No such file or directory

          发现系统提示找不到动态库,可以用

       root@poc-virtual-machine:/usr/local/ffmpeg/bin#    ldd ffmpeg

    

root@poc-virtual-machine:/usr/local/ffmpeg/bin# ldd ffmpeg
    linux-vdso.so.1 (0x00007ffebe789000)
    libavdevice.so.58 => not found
    libavfilter.so.7 => not found
    libavformat.so.58 => not found
    libavcodec.so.58 => not found
    libpostproc.so.55 => not found
    libswresample.so.3 => not found
    libswscale.so.5 => not found
    libavutil.so.56 => not found
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fe61c757000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fe61c538000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fe61c147000)
    /lib64/ld-linux-x86-64.so.2 (0x00007fe61cd2a000)

   不想编译FFMPEG之后还要动自己系统的环境,这时有一个简单的方法可以解决这个问题。就是在当前终端export一个环 境变量:

  /usr/local/ffmpeg/bin#    export LD_LIBRARY_PATH=../lib/

再次执行  ldd ffmpeg

    

root@poc-virtual-machine:/usr/local/ffmpeg/bin# ldd ffmpeg 
    linux-vdso.so.1 (0x00007ffcba331000)
    libavdevice.so.58 => ../lib/libavdevice.so.58 (0x00007fd9ad168000)
    libavfilter.so.7 => ../lib/libavfilter.so.7 (0x00007fd9acd0c000)
    libavformat.so.58 => ../lib/libavformat.so.58 (0x00007fd9ac937000)
    libavcodec.so.58 => ../lib/libavcodec.so.58 (0x00007fd9ab65d000)
    libpostproc.so.55 => ../lib/libpostproc.so.55 (0x00007fd9ab44a000)
    libswresample.so.3 => ../lib/libswresample.so.3 (0x00007fd9ab230000)
    libswscale.so.5 => ../lib/libswscale.so.5 (0x00007fd9aafba000)
    libavutil.so.56 => ../lib/libavutil.so.56 (0x00007fd9aad6b000)
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fd9aa9cd000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fd9aa7ae000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fd9aa3bd000)
    libfdk-aac.so.1 => /usr/local/lib/libfdk-aac.so.1 (0x00007fd9aa0ff000)
    libx264.so.157 => /usr/local/lib/libx264.so.157 (0x00007fd9a9c48000)
    /lib64/ld-linux-x86-64.so.2 (0x00007fd9ad5aa000)
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fd9a9a44000)

 如果仍有

  XX.so.55 => not found

      则 find  / -name xx.so  找到 so库后 cp 拷入  xx//ffmpeg/lib  下即可正常 【若找不到,则请安装对应的库】

root@poc-virtual-machine:/usr/local/ffmpeg/bin# ./ffmpeg  -help       【查看命令使用】

root@poc-virtual-machine:/usr/local/ffmpeg/bin# ./ffmpeg  -version  【查看当前FFmpeg版本】 并列出 configuration

ffmpeg version 4.1.3 Copyright (c) 2000-2019 the FFmpeg developers
  built with gcc 7 (Ubuntu 7.4.0-1ubuntu1~18.04)
  configuration: --prefix=/usr/local/ffmpeg --enable-gpl --enable-small --arch=x86_64 --enable-nonfree --enable-libfdk-aac --enable-libx264 --enable-filter=delogo --enable-debug --disable-optimizations --enable-shared
  libavutil      56. 22.100 / 56. 22.100
  

...省略.....  

FFmpeg开发

     Api文档: https://ffmpeg.org/documentation.html 

FFmpeg 的日志使用

   通过av_log_set_level()设置当前Log的级别 

   通过 v_log()来输入日志

   例子:

#include <stdio.h>
#include <libavutil/log.h>
int main()
{
    av_log_set_level(AV_LOG_DEBUG);

    printf("Hello, World! \n");
    av_log(NULL, AV_LOG_DEBUG, "Hello World FFmpeg!!\n");
    return 0;
}
  

  gcc -g -o test test.c -I/home/FFmpeg/ffmpeg/ffmpeg-4.1.3   -lavutil          其中-l 后跟着FFmpeg的源码路径 -l后跟着Lib的 名称(Libxxx  ,xxx为库的名称,编译的时候填入xxx即可  )

ffmpeg对文件的重命名和删除操作 

avpriv_io_delete("file_path");    其中file_path 可以使  url 格式

avpriv_io_move("file_path1","file_path2");   其中file_path1 重命名为->file_path2

代码:

#include <stdio.h>
#include <libavutil/log.h>
#include <libavformat/avformat.h>

int main()
{

    av_log_set_level(AV_LOG_DEBUG);

    int result = avpriv_io_delete("./a.txt");
    if(result < 0){
        av_log(NULL,AV_LOG_ERROR,"delete file is failed. \n");
        return -1;
    }else
    {
        av_log(NULL,AV_LOG_ERROR,"delete file  success. \n");
    }

    //move & rename   file
     result = avpriv_io_move("./1.txt","./2.txt");
    if(result < 0){
        av_log(NULL,AV_LOG_ERROR,"rename file is failed. \n");
        return -1;
    }else
    {

        av_log(NULL,AV_LOG_ERROR,"rename file  success. \n");
    }

    return 0;
}
~      

编译:gcc -g -o test test.c -I/home/FFmpeg/ffmpeg/ffmpeg-4.1.3   -lavutil -lavformat
创建测试文件: touch a.txt && touch  1.txt

FFmpeg操作目录(ls)

AVIODirContext *ctx =NULL;   AVIOContext是FFmpeg管理输入输出数据的结构体

AVIODirEntry *entry =NULL;    AVIODirEntry 为文件信息的结构体,内部包含 文件名称,大小等信息 ls -all 下的属性

使用 avio_open_dir(&ctx,"路径",NULL); 来打开需要操作的目录路径

使用 avio_read_dir(ctx, &entry);  来读取目录下的每个目录&文件 

使用 avio_close_dir(&ctx);  来关闭目录 释放资源

代码:

   

#include <stdio.h>
#include <libavutil/log.h>
#include <libavformat/avformat.h>
int main()
{
    av_log_set_level(AV_LOG_DEBUG);

    int ret;

    AVIODirContext *ctx =NULL;
    AVIODirEntry *entry =NULL;
    ret = avio_open_dir(&ctx,"/home/FFmpeg",NULL);

    if(ret <0)  {

          av_log(NULL, AV_LOG_ERROR,"Cant open dir: %s\n", av_err2str(ret));
          return -1;
     }

    while(1)
    {
            ret = avio_read_dir(ctx, &entry);
            if(ret <0) {
                    av_log(NULL, AV_LOG_ERROR,"Cant read dir:%s\n", av_err2str(ret));
                    goto __fail;
            }
            if(!entry) {

               break;

            }
            av_log(NULL, AV_LOG_INFO,"%12"PRId64" %s \n", entry->size, entry->name);
            //释放资源
            avio_free_directory_entry(&entry);
    }

    __fail:

        avio_close_dir(&ctx); //关闭文件

    return 0;
}

 第一节:安装FFmpeg和基本Api的使用 结束

 下一节:

          FFmpeg 安装+Api使用+Android+笔记( 二) 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值