1. 程式人生 > >FFmpeg開發實戰(二):FFmpeg 文件操作

FFmpeg開發實戰(二):FFmpeg 文件操作

打開 重命名 har ffmpeg else 刪除 ext %d 操作

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的相關代碼如下:

void ffmpegDir() {
    int ret;
    av_log_set_level(AV_LOG_INFO);
    // 上下文
    AVIODirContext *ctx = NULL;
    AVIODirEntry *entry = NULL;
    // 打開目錄
    ret = avio_open_dir(&ctx, "./", NULL);
    if (ret < 0) {
        av_log(NULL, AV_LOG_ERROR, "cant open dir");
        return;
    }
    else {
        av_log(NULL, AV_LOG_INFO, "open success");
    }

    while (1) {
        // 讀取目錄
        ret = avio_read_dir(ctx, &entry);
        if (ret < 0) {
            av_log(NULL, AV_LOG_ERROR, "cant read dir");
            // 防止內存泄漏
            goto __fail;
        }
        else {
            av_log(NULL, AV_LOG_INFO, "read dir success");
        }
        // 末尾
        if (!entry) {
            break;
        }
        printf("entry->name = %s", entry->name);
        // 釋放資源
        avio_free_directory_entry(&entry);
    }
    // 釋放資源
__fail:
    avio_close_dir(&ctx);
}

FFmpeg開發實戰(二):FFmpeg 文件操作