FFmpeg 初级操作—打印日志,文件目录操作

文章目录

    • 日志输出操作
    • 文件的删除与重命名
    • 操作目录实现
      • 实现简单的ls命令—代码实现

日志输出操作

FFmpeg 提供了一套LOG操作,基本上和printf用法差不多,如下方所示

#include<stdio.h>
#include<libavutil/log.h>
int main(int argc, char * argv[]){av_log_set_level(AV_LOG_DEBUG);//基本上可以当作 printf来用av_log(NULL,AV_LOG_INFO,"hello ffmpeg log %d\n",123);return 0;
}

文件的删除与重命名

avpriv_io_delete()

这个函数的作用是用来删除文件的,其具体实现可能会依赖于FFmpeg当前的环境和构建选项。它通常在FFmpeg的内部代码中使用,用于处理一些特定的文件删除需求,可能会涉及更底层的文件系统操作或者特定的编解码器功能。

avpriv_io_remove()

参数

  • const char *url: 需要删除的文件的路径。

返回值

  • 成功删除文件时返回 0
  • 如果删除文件失败,返回一个负数的错误码。

操作目录实现

相关操作API:

1.avio_open_dir

参数

  • AVIODirContext **s:
    • 指向目录上下文的指针。该指针在函数成功返回后会指向一个有效的 AVIODirContext,用于后续的目录操作。
  • const char *url:
    • 要打开的目录的路径。可以是本地文件系统路径,也可以是支持的协议路径。
  • AVDictionary **options:
    • 选项字典,包含用于打开目录的其他选项。可以为 NULL 表示没有额外选项。常用于传递特定协议的参数。

返回值

  • 成功时返回 0
  • 失败时返回负数的错误码。

2.int avio_read_dir(AVIODirContext *s, AVIODirEntry **next);

参数

  • AVIODirContext *s:
    • 目录上下文指针。这个指针是通过之前调用 avio_open_dir 获得的。
  • AVIODirEntry **next:
    • 指向指针的指针。这个指针在成功读取后会指向一个有效的 AVIODirEntry,表示目录中的下一个条目。

返回值

  • 成功时返回 0,并将 next 指向一个新分配的 AVIODirEntry 结构体。
  • 目录读取完毕时返回 0,并将 next 设置为 NULL
  • 失败时返回负数的错误码。

注: AVIODirEntry 结构体 存放文件名,文件大小等相关属性

typedef struct AVIODirEntry {char *name;                           /**< Filename */int type;                             /**< Type of the entry */int utf8;                             /**< Set to 1 when name is encoded with UTF-8, 0 otherwise.Name can be encoded with UTF-8 even though 0 is set. */int64_t size;                         /**< File size in bytes, -1 if unknown. */int64_t modification_timestamp;       /**< Time of last modification in microseconds since unixepoch, -1 if unknown. */int64_t access_timestamp;             /**< Time of last access in microseconds since unix epoch,-1 if unknown. */int64_t status_change_timestamp;      /**< Time of last status change in microseconds since unixepoch, -1 if unknown. */int64_t user_id;                      /**< User ID of owner, -1 if unknown. */int64_t group_id;                     /**< Group ID of owner, -1 if unknown. */int64_t filemode;                     /**< Unix file mode, -1 if unknown. */
} AVIODirEntry;
  1. avio_close_dir(&ctx);

关闭目录,释放相关资源

实现简单的ls命令—代码实现

#include <libavformat/avio.h>
#include <libavutil/log.h>int main() {AVIODirContext *ctx = NULL;AVIODirEntry *entry = NULL;int ret;// 打开目录if ((ret = avio_open_dir(&ctx, "./", NULL)) < 0) {av_log(NULL, AV_LOG_ERROR, "Cannot open directory: %s\n", av_err2str(ret));return ret;}// 读取目录项while (1) {if ((ret = avio_read_dir(ctx, &entry)) < 0) {av_log(NULL, AV_LOG_ERROR, "Cannot read directory: %s\n", av_err2str(ret));break;}if (!entry)break;av_log(NULL, AV_LOG_INFO, "Name: %s, Size: %" PRId64 "\n", entry->name, entry->size);avio_free_directory_entry(&entry); // 释放目录项}// 关闭目录avio_close_dir(&ctx);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/869982.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

文案策划新手必看:7大秘诀助你快速融入创意领域

从报社编辑到品牌策划和文案策划&#xff0c;这一转变虽有不少共通之处&#xff0c;但也有一些独到之处。 作为一名多年行业从业人员&#xff0c;以下是一些小建议&#xff0c;帮你在这个转型过程中游刃有余。 1、深入了解行业 得多读读行业报告、专业杂志、博客文章&#x…

和鲸科技荣耀入选2024 H1 「中国最具价值 AGI 创新机构 TOP 50」

以下文章来源于Founder Park&#xff0c;作者Founder Par 大模型的盛宴&#xff0c;不应该只属于那些无数光环加身的算法天才们。 模型的冰山一角下&#xff0c;是应用层的暗流涌动&#xff0c;这是一个更庞大&#xff0c;也更隐秘的蓝海。但发掘这一切的前提是&#xff0c;所…

【RHCE】NFS 实验

主服务器 下载nfs-utils软件包&#xff1a; 1.如果停⽌该服务&#xff0c;启动并启⽤该服务&#xff1a; systemctl enable - now rpcbind 2.要启动 NFS 服务器&#xff0c;并使其在引导时⾃动启动&#xff1a;systemctl enable - now nfs- server 3.配置防火墙&#xff0c;开…

力扣题解( 最长湍流子数组)

978. 最长湍流子数组 已解答 给定一个整数数组 arr &#xff0c;返回 arr 的 最大湍流子数组的长度 。 如果比较符号在子数组中的每个相邻元素对之间翻转&#xff0c;则该子数组是 湍流子数组 。 更正式地来说&#xff0c;当 arr 的子数组 A[i], A[i1], ..., A[j] 满足仅满…

pd虚拟机去虚拟化是什么意思?pd虚拟机去虚拟化教程 PD虚拟机优化设置

Parallels Desktop for Mac&#xff08;PD虚拟机&#xff09;去虚拟化是指在虚拟机&#xff08;Virtual Machine&#xff0c;简称 VM&#xff09;中禁用或减少虚拟化层的影响&#xff0c;使其表现更接近于物理机。这种操作通常用于提高虚拟机的性能或解决某些软件兼容性问题。具…

ASP.NET Core----基础学习04----Model模型的创建 服务的注入

文章目录 1. 创建Models文件夹&#xff0c;3个文件的内容如下&#xff1a;&#xff08;1&#xff09;模型的创建&#xff08;2&#xff09;服务的注入 1. 创建Models文件夹&#xff0c;3个文件的内容如下&#xff1a; &#xff08;1&#xff09;模型的创建 模型的基础类Student…

单测使用 mock 如何解决使用 @Value 注解注入的属性

在编写单元测试时&#xff0c;在不启动容器的条件下&#xff0c;如何对这种属性进行mock ? 项目代码 Service public class LoginServiceImpl {Value("${config.timeLimit}")private int timeLimit;......public Object login(User user) {...} } 单测代码 RunW…

python拆分Excel数据,自动发邮箱

import pandas as pd import poplib import email from email.header import decode_header from email.parser import Parser df = pd.read_excel("年假明细表.xlsx") depts = df["部门"].unique() for dept in depts: department_df = df[df[&q…

每日Attention学习9——Efficient Channel Attention

模块出处 [CVPR 20] [link] [code] ECA-Net: Efficient Channel Attention for Deep Convolutional Neural Networks 模块名称 Efficient Channel Attention (ECA) 模块作用 通道注意力 模块结构 模块代码 import torch import torch.nn as nn import torch.nn.functional …

【雷达原理】数字波束形成(DBF)

目录 一、数字波束形成1.1 DBF原理1.2 工程应用实现方式1.2.1 预先存储权矢量1.2.2 利用DFT/FFT实现DBF 二、DBF应用2.1 通道间相干积累2.2 测量目标角度 三、MATLAB代码 一、数字波束形成 数字波束形成&#xff08;Digital Beam Forming&#xff0c;DBF) 技术&#xff0c;是针…

使用Python绘制气泡图

使用Python绘制气泡图 气泡图效果代码 气泡图 气泡图通过气泡的大小表示数据的一个维度&#xff0c;用于展示三个维度的数据。例如&#xff0c;可以展示城市的人口、面积和GDP。 效果 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Mjj27sP7-1720…

PDF 分割拆分 API 数据接口

PDF 分割拆分 API 数据接口 文件处理&#xff0c;PDF 高效的 PDF 分割工具&#xff0c;高效处理&#xff0c;可永久存储。 1. 产品功能 高效处理大文件&#xff1b;支持多语言字符识别&#xff1b;支持 formdata 格式 PDF 文件流传参&#xff1b;支持设置每个 PDF 文件的页数…

Docker核心知识手册

Docker核心知识手册 文章目录 Docker核心知识手册1 安装Docker1.1 环境说明1.2 安装1.3 修改配置1.4 启动 2 Docker基础命令2.1 查看Docker相关信息2.2 配置Docker镜像加速 3 Docker镜像相关命令3.1 搜索官方镜像3.2 获取镜像3.3 查看当前主机镜像列表3.4 导出镜像3.5 删除镜像…

java.time.ZonedDateTime介绍

java.time.ZonedDateTime 是 Java 8 引入的新日期时间 API 的一部分,用于表示带有时区的日期和时间。它结合了日期、时间和时区信息,使得处理跨时区的日期时间变得更加简单和直观。 主要特性 表示日期和时间,并包括时区。提供了一系列方法来操作和格式化日期时间。支持从其…

三、CoInitialize是以单线程的方式创建com对象是什么意思

CoInitialize函数是COM&#xff08;Component Object Model&#xff09;编程中的一个关键API&#xff0c;用于初始化COM库并为当前线程创建一个“公寓”&#xff08;Apartment&#xff09;。当提到CoInitialize是以单线程的方式创建COM对象时&#xff0c;这是指它准备当前线程以…

电脑压缩视频怎么压缩,电脑压缩视频大小

随着科技的进步&#xff0c;我们越来越喜欢用视频记录生活中的点点滴滴。但随之而来的问题就是&#xff0c;视频文件体积庞大&#xff0c;给我们的存储和分享带来了不小的困扰。那么&#xff0c;有没有什么方法能够轻松解决这个问题呢&#xff1f;答案当然是肯定的&#xff01;…

SpringSecurity认证逻辑源码分析

SpringSecurity源码分析-认证逻辑 1. Spring-security-core包中的三个重要类 SecurityContext 这个类中就两个方法getAuthentication()和setAuthentication()这个类用来存储Authentication对象 public interface SecurityContext extends Serializable {Authentication getAu…

element 如何实现文件上传下载导出

上传&#xff1a; 前端&#xff1a; <div><el-dialogtitle"低值易耗文件上传":visible.sync"dialogUploadVis"width"25%"><el-uploadclass"upload-demo"drag:on-change"handleChange":file-list"uplo…

如何保证Redis缓存和数据库的数据一致性

前言 如果项目业务处于起步阶段&#xff0c;流量非常小&#xff0c;那无论是读请求还是写请求&#xff0c;直接操作数据库即可&#xff0c;这时架构模型是这样的&#xff1a; 但随着业务量的增长&#xff0c;项目业务请求量越来越大&#xff0c;这时如果每次都从数据库中读数据…

【Redis】简单了解Redis中常用的命令与数据结构

希望文章能给到你启发和灵感&#xff5e; 如果觉得文章对你有帮助的话&#xff0c;点赞 关注 收藏 支持一下博主吧&#xff5e; 阅读指南 开篇说明一、基础环境说明1.1 硬件环境1.2 软件环境 二、Redis的特点和适用场景三、Redis的数据类型和使用3.1字符串&#xff08;String&…