FFmpeg 安装+文件处理Api使用

 

1:Windows下编译安装 FFmpeg

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

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

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

  2.1 安装yasm Yasm是什么

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

2.3 安装 lame lame是什么?

2.4 安装 nasm  nasm是什么

2.4 安装 x264  什么是X264

安装ffmpeg FFmpeg是什么

安装ffmpeg后续操作

 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;
}
  

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;
}
~      

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;
}
05-29 13:47