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