FFmpeg开发实战(二):FFmpeg 文件操作

Stella981
• 阅读 877

FFmpeg 提供了丰富的API供我们使用,下面我们来讲述一下文件操作相关的API:

  • FFmpeg 删除文件:avpriv_io_delete()
  • FFmpeg 重命名文件:avpriv_io_move()
  • FFmpeg 打开目录:avio_open_dir()
  • FFmpeg 读取目录:avio_read_dir();
  • FFmpeg 关闭目录:avio_close_dir()

使用FFmpeg文件操作API实现删除和重命名的实例代码如下:

// FFmpeg 删除文件操作
void ffmpegDelFile() {
    int ret;
    ret = avpriv_io_delete("1.txt");  // 在项目目录下创建的文件(测试时需要创建好)
    printf("Del File Code : %d \n", ret);
    if (ret < 0) {
        av_log(NULL, AV_LOG_ERROR, "Failed to delete file \n");
    } else {
        av_log(NULL, AV_LOG_INFO, "Delete File Success!\n ");
    }
}

// FFmpeg 重命名或移动文件
void ffmpegMoveFile(char* src, char* dst) {
    int ret;
    ret = avpriv_io_move(src, dst);
    printf("Move File Code : %d \n", ret);
    // 重命名时,如果文件不存在,ret也会0
    if (ret < 0) {
        av_log(NULL, AV_LOG_ERROR, "Failed to Move File %s!\n ", src);
    } else {
        av_log(NULL, AV_LOG_INFO, "Success Move File %s!\n", src);
    }
}

使用FFmpeg文件操作API实现读取文件目录及输出文件目录List的相关代码如下:

// FFmpeg 目录操作
void ffmpegDir() {

    int ret;
    
    // 上下文
    AVIODirContext *dirCtx = NULL;
    AVIODirEntry *dirEntry = NULL;
    
    // 注意Windows下会返回-40,也就是Function not implement,方法未实现,也就是说windows下不支持此方法
    ret = avio_open_dir(&dirCtx, "include", NULL);  

    if (ret < 0) {
        // 输出错误日志
        printf("cant open dir,msg = %s", av_err2str(ret));
        return;
    }

    av_log(NULL, AV_LOG_INFO, "Open Dir Success!");

    while (1){
        ret = avio_read_dir(dirCtx, &dirEntry);
        if (ret < 0) {
            printf("cant read dir : %s", av_err2str(ret));
            // 防止内存泄漏
            goto __failed;
        }
        av_log(NULL, AV_LOG_INFO, "read dir success");
        if (!dirEntry) {
            break;
        }
        printf("Entry Name = %s", dirEntry->name);
        // 释放资源
        avio_free_directory_entry(&dirEntry);
    }
// 释放资源
__failed:
    avio_close_dir(&dirCtx);
}
点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
3年前
FFmpeg RTSP流通过UDP传输问题
我自己在使用SRS服务的Ingest功能时发现在读取一个网络摄像头的RTSP流时一直不成功,具体分析后发现SRS在调用FFmpeg时出了问题:/usr/local/ffmpeg/bin/ffmpegirtsp://admin:admin123@192.168.50.187:554/profile1vcodeccopyacode
Stella981 Stella981
3年前
Cmake opencv_videoio_ffmpeg.dll下载失败
用Cmake对OpenCV进行Configure,下载opencv\_videoio\_ffmpeg.dll和opencv\_videoio\_ffmpeg\_64.dll经常失败,解决方案是:到CMake中设置的Wheretobuildthebinaries的路径下去找名为CMakeDownloadLog.txt的文件,里面会有ffmpeg.dll
Wesley13 Wesley13
3年前
Linux 下完整安装ffmpeg(包括各种解码器)
FFmpeg是什么?FFmpeg是一个开源免费跨平台的视频和音频流方案,属于自由软件,采用LGPL或GPL许可证(依据你选择的组件)。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec,为了保证高可移植性和编解码质量,libavcodec里很多codec都是从头开发的。FFmpeg在Linux平
Stella981 Stella981
3年前
FFmpeg 学习(二):Mac下安装FFmpeg
一、安装ffmpeg分为两种安装方式:1\.命令行安装brewinstallffmpeg2\.下载压缩包安装去http://evermeet.cx/ffmpeg/(https://www.oschina.net/action/GoToLink?urlhttp%3A%2
Stella981 Stella981
3年前
FFmpeg + OpenGLES 实现视频解码播放和视频滤镜
该原创文章首发于微信公众号:字节流动FFmpeg开发系列连载:FFmpeg开发(01):FFmpeg编译和集成(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fwww.jianshu.com%2Fp%2F0792f6bbc9f6)FFmpeg开发(02):FFm
Stella981 Stella981
3年前
FFmpeg使用教程(一)
ffmpeg是一个开源的音视频转码工具,它提供了录制、转换以及流化音视频的完整解决方案,可以转码、压制、提取、截取、合并、录屏等。一、下载FFmpeg下载地址:http://ffmpeg.zeranoe.com/builds/(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F
Python进阶者 Python进阶者
10个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这