ffmpeg使用bmp编码器把bgr24编码为bmp图像
version
#define LIBAVCODEC_VERSION_MAJOR 60
#define LIBAVCODEC_VERSION_MINOR 15
#define LIBAVCODEC_VERSION_MICRO 100
note
不使用AVOutputFormat
code
void CFfmpegOps::EncodeBGR24ToBMP(const char* infile, const char* width_str, const char* height_str, const char *outfile)
{if ((!infile) || (!width_str) || (!height_str) || (!outfile)){return;}int width = 0;int height = 0;AVFrame *avframe = nullptr;int frame_bytes = 0;AVPixelFormat src_fmt = AV_PIX_FMT_BGR24;int ret = -1;FILE *in_fp = nullptr;size_t n = 0;AVPacket *avpacket = nullptr;const AVCodec *encoder = nullptr;AVCodecContext *encoder_ctx = nullptr;FILE *out_fp = nullptr;try{width = std::stoi(width_str);height = std::stoi(height_str);}catch (const std::exception &e){return;}avframe = av_frame_alloc();if (!avframe){printf("av_frame_alloc error\n");goto end;}avframe->format = src_fmt;avframe->width = width;avframe->height = height;frame_bytes = av_image_get_buffer_size(src_fmt, width, height, 1);ret = av_frame_get_buffer(avframe, 0);if (ret < 0){printf("av_frame_get_buffer error(%s)\n", GetFfmpegERR(ret));goto end;}in_fp = fopen(infile, "rb");if (!in_fp){printf("fopen error\n");goto end;}n = fread(avframe->data[0], sizeof(uint8_t), frame_bytes, in_fp);if ((int)n != (frame_bytes)){printf("n != (frame_bytes)\n");goto end;}avpacket = av_packet_alloc();if (!avpacket){printf("av_packet_alloc error\n");goto end;}encoder = avcodec_find_encoder(AV_CODEC_ID_BMP);if (!encoder){printf("avcodec_find_encoder error\n");goto end;}encoder_ctx = avcodec_alloc_context3(encoder);if (!encoder_ctx){printf("avcodec_alloc_context3 error\n");goto end;}encoder_ctx->pix_fmt = src_fmt;encoder_ctx->width = width;encoder_ctx->height = height;encoder_ctx->time_base.num = 1;encoder_ctx->time_base.den = 25;encoder_ctx->framerate.num = 25;encoder_ctx->framerate.den = 1;encoder_ctx->bit_rate = frame_bytes * encoder_ctx->framerate.num * 8;ret = avcodec_open2(encoder_ctx, encoder, nullptr);if (ret < 0){printf("avcodec_open2 error(%s)\n", GetFfmpegERR(ret));goto end;}out_fp = fopen(outfile, "wb");if (!out_fp){printf("fopen error\n");goto end;}ret = avcodec_send_frame(encoder_ctx, avframe);if (ret != 0){printf("avcodec_send_frame error(%s)\n", GetFfmpegERR(ret));goto end;}while (1){ret = avcodec_receive_packet(encoder_ctx, avpacket);if (ret != 0){if (ret == AVERROR(EAGAIN)){continue;}printf("avcodec_receive_packet error(%s)\n", GetFfmpegERR(ret));break;}n = fwrite(avpacket->data, avpacket->size, sizeof(uint8_t), out_fp);av_packet_unref(avpacket);break;}end:if (out_fp){fclose(out_fp);out_fp = nullptr;}if (encoder_ctx){avcodec_free_context(&encoder_ctx);encoder_ctx = nullptr;}if (avpacket){av_packet_free(&avpacket);avpacket = nullptr;}if (in_fp){fclose(in_fp);in_fp = nullptr;}if (avframe){av_frame_free(&avframe);avframe = nullptr;}}
performance
相关文章:

ffmpeg使用bmp编码器把bgr24编码为bmp图像
version #define LIBAVCODEC_VERSION_MAJOR 60 #define LIBAVCODEC_VERSION_MINOR 15 #define LIBAVCODEC_VERSION_MICRO 100 note 不使用AVOutputFormat code void CFfmpegOps::EncodeBGR24ToBMP(const char* infile, const char* width_str, const char* height_str…...

基于YOLOv10+YOLOP+PYQT的可视化系统,实现多类别目标检测+可行驶区域分割+车道线分割【附代码】
文章目录 前言视频效果必要环境一、代码结构1、 训练参数解析2、 核心代码解析1.初始化Detector类2. torch.no_grad()3. 复制输入图像并初始化计数器4. 调用YOLOv10模型进行目标检测5. 提取检测结果信息6. 遍历检测结果并在图像上绘制边界框和标签7. 准备输入图像以适应End-to-…...

计算机网络之令牌总线
上文内容:什么是以太网 1.令牌总线工作原理 在总线的基础上,通过在网络结点之间有序地传递令牌来分配各结点对共享型总线的访问权利,形成闭合的逻辑环路。 完全采用半双工的操作方式,只有获得令牌的结点才能发送信息ÿ…...

策略模式的应用
前言 系统有一个需求就是采购员审批注册供应商的信息时,会生成一个供应商的账号,此时需要发送供应商的账号信息(账号、密码)到注册填写的邮箱中,通知供应商账号信息,当时很快就写好了一个工具类࿰…...

如何使用uer做多分类任务
如何使用uer做多分类任务 语料集下载 找到这里点击即可 里面是这有json文件的 因此我们对此要做一些处理,将其转为tsv格式 # -*- coding: utf-8 -*- import json import csv import chardet# 检测文件编码 def detect_encoding(file_path):with open(file_path,…...

【HICE】转发服务器实验
1.在本地主机上操作 2.在客户端操作设置主机的IP地址为dns 3.测试,客户机是否能ping通...

MATLAB-分类CPO-RF-Adaboost冠豪猪优化器(CPO)优化RF随机森林结合Adaboost分类预测(二分类及多分类)
MATLAB-分类CPO-RF-Adaboost冠豪猪优化器(CPO)优化RF随机森林结合Adaboost分类预测(二分类及多分类) 分类CPO-RF-Adaboost冠豪猪优化器(CPO)优化RF随机森林结合Adaboost分类预测(二分类及多分类…...

绝区贰--及时优化降低 LLM 成本和延迟
前言 大型语言模型 (LLM) 为各行各业带来了变革性功能,让用户能够利用尖端的自然语言处理技术处理各种应用。然而,这些强大的 AI 系统的便利性是有代价的 — 确实如此。随着 LLM 变得越来越普及,其计算成本和延迟可能会迅速增加,…...

JDBC【封装工具类、SQL注入问题】
day54 JDBC 封装工具类01 创建配置文件 DBConfig.properties driverNamecom.mysql.cj.jdbc.Driver urljdbc:mysql://localhost:3306/qnz01?characterEncodingutf8&serverTimezoneUTC usernameroot passwordroot新建配置文件,不用写后缀名 创建工具类 将变…...

Windows打开redis以及Springboot整合redis
目录 前言Windows系统打开redisSpringboot整合redis依赖实体类yml配置文件config配置各个数据存储类型分别说明记录string数据写入redis,并查询通过命令行查询 list插入数据到redis中从redis中读取命令读取数据 hash向redis中逐个添加map键值对获取key对应的map中所…...
MySQL使用LIKE索引是否失效的验证
1、简单的示例展示 在MySQL中,LIKE查询可以通过一些方法来使得LIKE查询能够使用索引。以下是一些可以使用的方法: 使用前导通配符(%),但确保它紧跟着一个固定的字符。 避免使用后置通配符(%)&…...

封装日历uniapp,只显示年月不显示日
默认展示最新日期 子组件 <template><view class"date-picker"><picker mode"date" fields"month" change"onDateChange" :value"selectedDate"><view class"picker">{{ selectedDate…...

golang线程池ants-实现架构
1、总体架构 ants协程池,在使用上有多种方式(使用方式参考这篇文章:golang线程池ants-四种使用方法),但是在实现的核心就一个,如下架构图: 总的来说,就是三个数据结构: Pool、WorkerStack、goW…...

Mysql面试合集
概念 是一个开源的关系型数据库。 数据库事务及其特性 事务:是一系列的数据库操作,是数据库应用的基本逻辑单位。 事务特性: (1)原子性:即不可分割性,事务要么全部被执行,要么就…...
Android Gradle 开发与应用 (五): 构建变体与自定义任务
目录 1. 概述 2. 构建变体 2.1 构建变体的概念 2.2 构建类型 2.3 产品风味 2.4 构建变体的使用 3. 自定义任务 3.1 自定义任务的概念 3.2 创建自定义任务 3.3 配置任务依赖 3.4 任务类型 3.5 动态任务 3.6 自定义任务执行顺序 4. 案例 4.1 多渠道打包 4.2 自动…...

Django学习第六天
启动项目命令 python manage.py runserver 取消模态框功能 js实现列表数据删除 第二种实现思路 使用jquery修改模态框标题 编辑页面拿到数据库数据显示默认数据功能实现 想要去数据库中获取数据时:对象/字典 三种不同的数据类型 使用Ajax传入数据实现表单编辑&…...

docker部署mycat,连接上面一篇的一主二从mysql
一、docker下载mycat镜像 查看安装结果 这个名称太长,在安装容器时不方便操作,设置标签为mycat docker tag longhronshens/mycat-docker mycat 二、安装容器 先安装一个,主要目的是获得配置文件 docker run -it -d --name mycat -p 8066:…...
VUE2拖拽组件:vue-draggable-resizable-gorkys
vue-draggable-resizable-gorkys组件基于vue-draggable-resizable进行二次开发, 用于可调整大小和可拖动元素的组件并支持冲突检测、元素吸附、元素对齐、辅助线 安装: npm install --save vue-draggable-resizable-gorkys 全局引用: import Vue from vue import vdr fro…...

容器:stack
以下是关于stack容器的一些总结: stack容器比较简单,主要包括: 1、构造函数:stack [staName] 2、添加、删除元素: push() 、pop() 3、获取栈顶元素:top() 4、获取栈的大小:size() 5、判断栈是否为空&#x…...

跨平台Ribbon UI组件QtitanRibbon全新发布v6.7.0——支持Qt 6.6.3
没有Microsoft在其办公解决方案中提供的界面,就无法想象现代应用程序,这个概念称为Ribbon UI,目前它是使应用程序与时俱进的主要属性。QtitanRibbon是一款遵循Microsoft Ribbon UI Paradigm for Qt技术的Ribbon UI组件,QtitanRibb…...

国防科技大学计算机基础课程笔记02信息编码
1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制,因此这个了16进制的数据既可以翻译成为这个机器码,也可以翻译成为这个国标码,所以这个时候很容易会出现这个歧义的情况; 因此,我们的这个国…...
【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15
缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下: struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...

智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql
智慧工地管理云平台系统,智慧工地全套源码,java版智慧工地源码,支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求,提供“平台网络终端”的整体解决方案,提供劳务管理、视频管理、智能监测、绿色施工、安全管…...

Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
【Go】3、Go语言进阶与依赖管理
前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课,做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程,它的核心机制是 Goroutine 协程、Channel 通道,并基于CSP(Communicating Sequential Processes࿰…...

2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面
代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口(适配服务端返回 Token) export const login async (code, avatar) > {const res await http…...
Python如何给视频添加音频和字幕
在Python中,给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加,包括必要的代码示例和详细解释。 环境准备 在开始之前,需要安装以下Python库:…...

智能仓储的未来:自动化、AI与数据分析如何重塑物流中心
当仓库学会“思考”,物流的终极形态正在诞生 想象这样的场景: 凌晨3点,某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径;AI视觉系统在0.1秒内扫描包裹信息;数字孪生平台正模拟次日峰值流量压力…...

全志A40i android7.1 调试信息打印串口由uart0改为uart3
一,概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本:2014.07; Kernel版本:Linux-3.10; 二,Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01),并让boo…...
Rapidio门铃消息FIFO溢出机制
关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系,以下是深入解析: 门铃FIFO溢出的本质 在RapidIO系统中,门铃消息FIFO是硬件控制器内部的缓冲区,用于临时存储接收到的门铃消息(Doorbell Message)。…...