当前位置: 首页 > article >正文

六.FFmpeg对mp4文件操作(ubuntu)

一.抽取aac数据

1.代码抽取aac没有声音,使用ffmpeg命令行也无法转换为wav

问题解决:ADTS头的采样率没有设置正确,av_dump_format 获取视频信息的时候可以看到aac的详细信息。

void Widget::adts_header(char *szAdtsHeader, int dataLen)
{int audio_object_type = 2; //音频对象类型 2 aac_lcint sampling_frequency_index = 4;//采样率int channel_config = 2;//声道数int adtsLen = dataLen + 7;szAdtsHeader[0] = 0xff;         //syncword:0xfff                          高8bitsszAdtsHeader[1] = 0xf0;         //syncword:0xfff                          低4bitsszAdtsHeader[1] |= (0 << 3);    //MPEG Version:0 for MPEG-4,1 for MPEG-2  1bitszAdtsHeader[1] |= (0 << 1);    //Layer:0                                 2bitsszAdtsHeader[1] |= 1;           //protection absent:1                     1bitszAdtsHeader[2] = (audio_object_type - 1)<<6;            //profile:audio_object_type - 1                      2bitsszAdtsHeader[2] |= (sampling_frequency_index & 0x0f)<<2; //sampling frequency index:sampling_frequency_index  4bitsszAdtsHeader[2] |= (0 << 1);                             //private bit:0                                      1bitszAdtsHeader[2] |= (channel_config & 0x04)>>2;           //channel configuration:channel_config               高1bitszAdtsHeader[3] = (channel_config & 0x03)<<6;     //channel configuration:channel_config      低2bitsszAdtsHeader[3] |= (0 << 5);                      //original:0                               1bitszAdtsHeader[3] |= (0 << 4);                      //home:0                                   1bitszAdtsHeader[3] |= (0 << 3);                      //copyright id bit:0                       1bitszAdtsHeader[3] |= (0 << 2);                      //copyright id start:0                     1bitszAdtsHeader[3] |= ((adtsLen & 0x1800) >> 11);           //frame length:value   高2bitsszAdtsHeader[4] = (uint8_t)((adtsLen & 0x7f8) >> 3);     //frame length:value    中间8bitsszAdtsHeader[5] = (uint8_t)((adtsLen & 0x7) << 5);       //frame length:value    低3bitsszAdtsHeader[5] |= 0x1f;                                 //buffer fullness:0x7ff 高5bitsszAdtsHeader[6] = 0xfc;
}
void Widget::loadMp4Info()
{AVFormatContext *fmt_ctx=NULL;AVPacket avpkt;av_log_set_level(AV_LOG_INFO);aac_file=fopen("./2159.aac","wb");if(!aac_file){qDebug()<<"failed open aac file";}int ret=0;ret=avformat_open_input(&fmt_ctx,"./1.mp4",NULL,NULL);if(ret!=0){qDebug()<<"failed open avformat";return;}av_dump_format(fmt_ctx,0,"/2.mp4",0);//get aac dataint audio_index=av_find_best_stream(fmt_ctx,AVMEDIA_TYPE_AUDIO,-1,-1,NULL,0);if(audio_index<0){av_log(NULL,AV_LOG_ERROR,"can't find the best stream\n");return;}//write data to fileav_init_packet(&avpkt);int wirteLen=0;while(av_read_frame(fmt_ctx,&avpkt)>=0){if(avpkt.stream_index==audio_index){            //add aac headerchar adts_header_buff[7];adts_header(adts_header_buff,avpkt.size);fwrite(adts_header_buff,1,7,aac_file);wirteLen=fwrite(avpkt.data,1,avpkt.size,aac_file);if(wirteLen!=avpkt.size){av_log(NULL,AV_LOG_WARNING,"warning wirteLen != pkt.size %d , %d",wirteLen,avpkt.size);}}av_packet_unref(&avpkt);}avformat_close_input(&fmt_ctx);}

二.抽取h264数据

相关文章:

六.FFmpeg对mp4文件操作(ubuntu)

一.抽取aac数据 1.代码抽取aac没有声音&#xff0c;使用ffmpeg命令行也无法转换为wav 问题解决&#xff1a;ADTS头的采样率没有设置正确&#xff0c;av_dump_format 获取视频信息的时候可以看到aac的详细信息。 void Widget::adts_header(char *szAdtsHeader, int dataLen) …...

Apache Doris 2025 Roadmap:构建 GenAI 时代实时高效统一的数据底座

在全球 290 位开发者的协作下&#xff0c;Apache Doris 在 2024 年完成了 7000 次代码提交&#xff0c;并发布了 22 个版本&#xff0c;实现在实时分析、湖仓一体和半结构化数据分析等核心场景的技术突破及创新。 2025 年&#xff0c;Apache Doris 社区将秉承“以场景驱动创新…...

HTTP数据传输的几个关键字Header

本文着重针对http在传输数据时的几种封装方式进行描述。 1. Content-Type(描述body内容类型以及字符编码) HTTP的Content-Type用于定义数据传输的媒体类型&#xff08;MIME类型&#xff09;&#xff0c;主要分为以下几类&#xff1a; (一)、‌基础文本类型‌ text/plain‌ …...

二极管正负极区分

二极管正负极区分 二极管是一种具有单向导电性的半导体器件&#xff0c;正确区分正负极对于其使用非常重要。以下是几种常见的二极管正负极区分方法&#xff1a; 1. 外观标识 有标记的二极管 色环或色点&#xff1a;许多二极管在表面会有一个色环或色点&#xff0c;这个标记…...

CyclicBarrier、Semaphore、CountDownLatch的区别,适用场景

CyclicBarrier、Semaphore 和 CountDownLatch 是 Java 并发包中用于线程协作的工具类&#xff0c;它们虽然都与线程同步相关&#xff0c;但设计目的和使用场景有显著差异。以下是它们的核心区别和典型应用场景&#xff1a; 1. CountDownLatch 核心机制 一次性计数器&#xf…...

【c++深入系列】:类与对象详解(中)

&#x1f525; 本文专栏&#xff1a;c &#x1f338;作者主页&#xff1a;努力努力再努力wz &#x1f4aa; 今日博客励志语录&#xff1a; 不是因为看到希望才坚持&#xff0c;而是坚持了才能看到希望 那么上一篇博客我讲解了什么是类和对象以及类和对象是怎么定义的&#xff0…...

解锁界面设计密码,打造极致用户体验

界面设计是对软件、网站、移动应用等产品的用户界面进行设计的过程&#xff0c;旨在为用户提供美观、易用、高效的交互体验。以下是关于界面设计的一些主要方面&#xff1a; 一、设计原则 用户中心原则&#xff1a;以用户为中心&#xff0c;了解用户的需求、期望、行为和习惯…...

用Python和Pygame创造粉色粒子爱心:3D渲染的艺术

引言 在计算机图形学中&#xff0c;3D效果的2D渲染是一个迷人的领域。今天&#xff0c;我将分享一个使用Python和Pygame库创建的粉色粒子爱心效果。这个项目不仅视觉效果惊艳&#xff0c;而且代码简洁易懂&#xff0c;非常适合图形编程初学者学习3D渲染的基础概念。 项目概述…...

汽车 HMI 设计的发展趋势与设计要点

一、汽车HMI设计的发展历程与现状 汽车人机交互界面&#xff08;HMI&#xff09;设计经历了从简单到复杂、从单一到多元的演变过程。2012年以前&#xff0c;汽车HMI主要依赖物理按键进行操作&#xff0c;交互方式较为单一。随着特斯拉Model S的推出&#xff0c;触控屏逐渐成为…...

《AI大模型应知应会100篇》第56篇:LangChain快速入门与应用示例

第56篇&#xff1a;LangChain快速入门与应用示例 前言 最近最火的肯定非Manus和OpenManus莫属&#xff0c;因为与传统AI工具仅提供信息不同&#xff0c;Manus能完成端到端的任务闭环。例如用户发送“筛选本月抖音爆款视频”&#xff0c;它会自动完成&#xff1a; 爬取平台数据…...

vue-office 支持预览多种文件(docx、excel、pdf、pptx)预览的vue组件库

官网地址&#xff1a;https://github.com/501351981/vue-office 支持多种文件(docx、excel、pdf、pptx)预览的vue组件库&#xff0c;支持vue2/3。也支持非Vue框架的预览。 1.在线预览word文件&#xff08;以及本地上传预览&#xff09; 1.1&#xff1a;下载组件库 npm inst…...

Java 大视界 -- Java 大数据在智能农业无人机植保作业路径规划与药效评估中的应用(165)

&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎来到 青云交的博客&#xff01;能与诸位在此相逢&#xff0c;我倍感荣幸。在这飞速更迭的时代&#xff0c;我们都渴望一方心灵净土&#xff0c;而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识&#xff0c;也…...

哈希表系列一>两数之和

目录 题目&#xff1a;方法&#xff1a;暴力代码&#xff1a;优化后代码&#xff1a; 题目&#xff1a; 链接: link 方法&#xff1a; 暴力代码&#xff1a; public int[] twoSum(int[] nums, int target) {解法一&#xff1a;暴力解法&#xff1a;int n nums.length;for(int…...

【SPP】深入解析蓝牙 L2CAP 协议在SPP中的互操作性要求

在蓝牙协议体系中,L2CAP(Logical Link Control and Adaptation Protocol)作为基带协议与高层协议之间的桥梁,承担着数据分帧、协议复用、QoS协商等核心功能。当涉及串行端口通信时,L2CAP的规范实现直接决定了设备间数据传输的可靠性、效率及兼容性。本文基于《Serial Port…...

CAD插件实现:自动递增编号(前缀、后缀、位数等)——CADc#实现

cad中大量输入一定格式的递增编号时&#xff0c;可用插件实现&#xff0c;效果如下&#xff1a; ①本插件可指定数字位数、起始号码、加前缀、后缀、文字颜色等&#xff08;字体样式和文字所在图层为cad当前图层和当前字体样式&#xff09;。 ②插件采用Jig方式&#xff0c;即…...

Spring | Spring、Spring MVC 和 Spring Boot 的区别

关注&#xff1a;CodingTechWork 引言 在 Java 开发领域&#xff0c;Spring、Spring MVC 和 Spring Boot 是三个经常被提及的概念。它们之间既有联系又有区别&#xff0c;对于初学者来说可能会感到困惑。本文将详细介绍它们的区别&#xff0c;并通过示例代码帮助读者更好地理解…...

观察者模式在Java微服务间的使用

一.、使用RabbitMQ来实现 (1) 生产者&#xff08;订单微服务&#xff09; import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.stereotype.Service;Service public class OrderService {private final RabbitTemplate rabbitTemplate;…...

C语言--回文字符串

输入&#xff1a;字符串&#xff0c;判断是否是回文字符串&#xff0c;例如abcba输出Yes 输出&#xff1a;是否 代码 思路&#xff1a;使用两个指针分别指向头和尾&#xff0c;依次对比第一个元素和最后一个元素&#xff0c;第二个和倒数第二个元素&#xff0c;如果遇到不相同…...

【云计算物理网络】数据中心网络架构设计

云计算的物理基础&#xff1a;数据中心网络架构设计 一、技术背景&#xff1a;从“三层架构”到“云原生网络”二、技术特点&#xff1a;云数据中心网络的四大支柱三、技术细节&#xff1a;CLOS架构的实现挑战四、未来方向&#xff1a;从“连接设备”到“感知服务”结语&#x…...

Coco-AI 支持嵌入,让你的网站拥有 AI 搜索力

在之前的实践中&#xff0c;我们已经成功地把 Hexo、Hugo 等静态博客和 Coco-AI 检索系统打通了&#xff1a;只要完成向量化索引&#xff0c;就可以通过客户端问答界面实现基于内容的智能检索。 这一层已经很好用了&#xff0c;但总觉得少了点什么—— 比如用户还得专门打开一…...

批处理脚本的主要解析规则

批处理脚本的主要解析规则 批处理脚本(Batch files)有一套独特的解析规则&#xff0c;这些规则在很多情况下不太直观&#xff0c;但了解它们对于编写可靠的脚本至关重要。以下是最重要的一些规则&#xff1a; 1. 变量扩展规则 标准变量扩展 (%变量%) 解析时扩展&#xff1a…...

TRDI 公司的RiverPro 和 RioPro ADCP 用户指南

TRDI 公司 RiverPro 和 RioPro ADCP 用户指南 简介第一章 - 概述第二章 - 安装第三章 - 采集数据第四章 - 维护第五章 - 测试RIVERPRO/RIOPRO第六章 - 故障排除第七章 - 将系统返回TRDI进行维修第八章 - 规格第九章 - 命令第十章 - 输出数据格式附录A-合规通知首次完整翻译《Ri…...

Linux 基础入门操作 前言 linux操作指令介绍

1 linux 目录介绍 Linux 文件系统采用层次化的目录结构&#xff0c;所有目录都从根目录 / 开始 1.1 核心目录 / (根目录) 整个文件系统的起点、包含所有其他目录和文件 /bin (基本命令二进制文件) 存放系统最基本的shell命令&#xff1a;如 ls, cp, mv, rm, cat 等&#…...

【总结】SQL注入防护手段

1、对提交的数据进行数据类型判断&#xff0c;比如id值必须是数字&#xff1a;is_numeric&#xff08;$id&#xff09; 2、对提交的数据进行正则匹配&#xff0c;禁止出现注入语句&#xff0c;比如union、or、and等 3、对提交数据进行特殊符号转义&#xff0c;比如单引号、双引…...

OpenCV 图形API(11)对图像进行掩码操作的函数mask()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 描述 对矩阵应用掩码。 该函数mask设置来自给定矩阵的值&#xff0c;如果掩码矩阵中对应的像素值设为true&#xff0c;否则将矩阵的值设为0。 支持的源矩阵…...

使用C#写的一个Kafka的使用工具

由于offset不支持通过界面推送数据&#xff0c;所以我写了一个kafka的连接工具&#xff0c;能够直接从界面推送数据&#xff0c;方便使用。由于使用的是C#写的&#xff0c;所以比offset要流畅的多。 1、数据源连接 2、获取集群的topic 3、点击获取数据能够获取最新的100条数…...

【通知】STM32MP157驱动开发课程全新升级!零基础入门嵌入式Linux驱动,掌握底层开发核心技能!

在嵌入式Linux系统开发中&#xff0c;驱动程序开发是一项关键技术&#xff0c;它作为硬件与软件之间的桥梁&#xff0c;实现了操作系统对硬件设备的控制。相较于嵌入式Linux应用开发&#xff0c;驱动开发由于涉及底层硬件且抽象程度较高&#xff0c;往往让初学者感到难度较大。…...

MCP协议java开发的servers,已开源

访问地址: mcp-server-java 已实现的filesystem提高性能和效率&#xff0c;比Python的操作更顺畅。java实现&#xff0c;让部署更容易。...

飞浆PaddlePaddle 猫狗数据大战

猫狗数据大战 1 数据集的准备以及处理操作1.1 数据集1.2 文件解压操作&#xff08;python&#xff09; 1.3 数据的分类1.4 创建训练集和测试集 2 网络构建CNN版本--DeepID 人脸识别网络结构DeepID 与 CNN 网络结构的差异 3 深度学习模型训练和推理的核心设置4 制图5 训练6 预测…...

嵌入式硬件篇---JSON通信以及解析

文章目录 前言一、JSON特点语法简单数据格式灵活轻量化跨语言使用二、JSON数据结构对象数组三、JSON在单片机之间通信的应用数据封装与传输四、JSON示例代码五、JSON在上位机与单片机之间通信的应用数据交互六、JSON示例代码七、JSON解析与生成解析生成八、Python中的数据解析1…...