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

提取视频文件里的音频和无声视频

一、提取视频文件里的音频:

public static void generateMediaRadio(){// 视频提取器MediaExtractor extractor = new MediaExtractor();try {//本地视频文件extractor.setDataSource("/storage/emulated/0/mjyyfep/alpha.mp4");//网络视频文件
//                extractor.setDataSource(OwnApplicationLike.getInstance(),Uri.parse("http://zhl-file.xxfz.com.cn/group1/M08/07/B2/dr5jH1_Hd9CIbYreAAAAPBKTEOgAALdDQPnvw0AAABU754.mp4"),null);} catch (Exception e) {e.printStackTrace();
//            showShortToast("视频资源路径出错");LogUtil.eLog("视频资源路径出错");}// 获取通道数int trackCount = extractor.getTrackCount();// 视频轨道索引int radioTrackIndex = 0;// 视频格式MediaFormat radioMediaFormat = null;long radioFrameRate = 0;// 查找需要的视频轨道与音频轨道indexfor (int i = 0; i < trackCount; i++) { //遍历所以轨道MediaFormat itemMediaFormat = extractor.getTrackFormat(i);String itemMime = itemMediaFormat.getString(MediaFormat.KEY_MIME);if (itemMime.startsWith("audio")) { //获取音频轨道位置radioTrackIndex = i;radioMediaFormat = itemMediaFormat;
//                Log.d(TAG,"audio format start --- ");
//                Log.d(TAG,"audio format --> \r\n"+itemMediaFormat.toString());
//                Log.d(TAG,"audio format end --- ");extractor.selectTrack(i);long first_sampletime = extractor.getSampleTime();extractor.advance();long second_sampletime = extractor.getSampleTime();radioFrameRate = Math.abs(second_sampletime - first_sampletime);//时间戳extractor.unselectTrack(i);}}//        File outVideoFile = new File(getFileOutPath() + File.separator + "out_audio.mp4");//提取出的音频文件最终存放路径File outVideoFile = new File("/storage/emulated/0/mjyyfep/alpha_audio_1.mp3");if(outVideoFile.exists()){outVideoFile.delete();}try{// 分离音频MediaMuxer mediaMuxer = new MediaMuxer(outVideoFile.getAbsolutePath(), MediaMuxer.OutputFormat.MUXER_OUTPUT_MPEG_4);int mVideoTrackIndex  = mediaMuxer.addTrack(radioMediaFormat);mediaMuxer.start();MediaCodec.BufferInfo info =  new MediaCodec.BufferInfo();info.presentationTimeUs =  0;extractor.selectTrack(radioTrackIndex);int videoFlag = extractor.getSampleFlags();int length;ByteBuffer buffer = ByteBuffer.allocate(100 * 1024);while ((length = extractor.readSampleData(buffer,0)) != -1){info.offset = 0;info.size = length;info.flags = videoFlag;info.presentationTimeUs += radioFrameRate;mediaMuxer.writeSampleData(mVideoTrackIndex, buffer, info);// 预先加载后面的数据extractor.advance();}extractor.release();mediaMuxer.stop();mediaMuxer.release();//            showShortToast("音频生成成功");LogUtil.eLog("音频生成成功");}catch (Exception e){e.printStackTrace();LogUtil.eLog("音频生成失败");
//            showShortToast("音频生成失败");}}

二、提取视频文件里的无声视频

public static void generateMediaVideo(){// 视频提取器MediaExtractor extractor = new MediaExtractor();try {//本地视频文件
//            extractor.setDataSource("/storage/emulated/0/mjyyfep/my.mp4");//网络视频文件extractor.setDataSource(OwnApplicationLike.getInstance(),Uri.parse("http://zhl-file.xxfz.com.cn/group1/M08/07/B2/dr5jH1_Hd9CIbYreAAAAPBKTEOgAALdDQPnvw0AAABU754.mp4"),null);} catch (IOException e) {e.printStackTrace();LogUtil.eLog("视频资源路径出错");}// 获取通道数int trackCount = extractor.getTrackCount();// 视频轨道索引int videoTrackIndex = 0;// 视频格式MediaFormat videoMediaFormat = null;// 查找需要的视频轨道与音频轨道indexfor (int i = 0; i < trackCount; i++) { //遍历所以轨道MediaFormat itemMediaFormat = extractor.getTrackFormat(i);String itemMime = itemMediaFormat.getString(MediaFormat.KEY_MIME);if (itemMime.startsWith("video")) { //获取视频轨道位置videoTrackIndex = i;videoMediaFormat = itemMediaFormat;LogUtil.eLog("video format start --- ");LogUtil.eLog("video format --> \r\n"+itemMediaFormat.toString());LogUtil.eLog("video format end --- ");}}//        File outVideoFile = new File(getFileOutPath() + File.separator + "out_video.mp4");//提取出的无声视频最终存放路径File outVideoFile = new File("/storage/emulated/0/mjyyfep/my_video_4.mp4");if(outVideoFile.exists()){outVideoFile.delete();}try{// 分离视频MediaMuxer mediaMuxer = new MediaMuxer(outVideoFile.getAbsolutePath(), MediaMuxer.OutputFormat.MUXER_OUTPUT_MPEG_4);int mVideoTrackIndex  = mediaMuxer.addTrack(videoMediaFormat);mediaMuxer.start();MediaCodec.BufferInfo info =  new MediaCodec.BufferInfo();info.presentationTimeUs =  0;extractor.selectTrack(videoTrackIndex);int videoFlag = extractor.getSampleFlags();long videoFrameRate = 1000 * 1000 /(videoMediaFormat.getInteger(MediaFormat.KEY_FRAME_RATE));int length;ByteBuffer buffer = ByteBuffer.allocate(100 * 1024);while ((length = extractor.readSampleData(buffer,0)) != -1){info.offset = 0;info.size = length;info.flags = videoFlag;info.presentationTimeUs += videoFrameRate;mediaMuxer.writeSampleData(mVideoTrackIndex, buffer, info);// 预先加载后面的数据extractor.advance();}extractor.release();mediaMuxer.stop();mediaMuxer.release();LogUtil.eLog("生成视频文件成功");}catch (Exception e){e.printStackTrace();LogUtil.eLog("视频生成失败");}}

相关文章:

提取视频文件里的音频和无声视频

一、提取视频文件里的音频&#xff1a; public static void generateMediaRadio(){// 视频提取器MediaExtractor extractor new MediaExtractor();try {//本地视频文件extractor.setDataSource("/storage/emulated/0/mjyyfep/alpha.mp4");//网络视频文件 // …...

SpringBoot原理

一、Bean原理 1、配置文件的优先级 SpringBoot项目当中支持的三类配置文件&#xff1a; ​ - application.properties - application.yml - application.yaml 配置文件优先级排名&#xff08;从高到低&#xff09;&#xff1a; 1. properties配置文件 2. yml配置文件 3. yaml…...

MySQL事务原理、MVCC详解

事务原理 1 事务基础 1). 事务 事务 是一组操作的集合&#xff0c;它是一个不可分割的工作单位&#xff0c;事务会把所有的操作作为一个整体一起向系 统提交或撤销操作请求&#xff0c;即这些操作要么同时成功&#xff0c;要么同时失败。 2). 特性 原子性&#xff08;Atomi…...

在Windows操作系统上安装Neo4j数据库

在Windows操作系统上安装Neo4j数据库 一、在Windows操作系统上安装Neo4j数据库 一、在Windows操作系统上安装Neo4j数据库 点击 MySQL可跳转至MySQL的官方下载地址。 在VUE3项目的工程目录中&#xff0c;通过以下命令可生成node_modules文件夹。 npm install&#xff08;1&am…...

国民八路参考文献:[8]许少辉.乡村振兴战略下传统村落文化旅游设计[M]北京:中国建筑工业出版社,2022.

国民八路参考文献&#xff1a;&#xff3b;&#xff18;&#xff3d;许少辉&#xff0e;乡村振兴战略下传统村落文化旅游设计&#xff3b;&#xff2d;&#xff3d;北京&#xff1a;中国建筑工业出版社&#xff0c;&#xff12;&#xff10;&#xff12;&#xff12;&#xff0…...

24 Linux高级篇-备份与恢复

24 Linux高级篇-备份与恢复 文章目录 24 Linux高级篇-备份与恢复24.1 安装dump和restore24.2 使用dump备份24.4 使用restore恢复 学习视频来自于B站【小白入门 通俗易懂】2021韩顺平 一周学会Linux。可能会用到的资料有如下所示&#xff0c;下载链接见文末&#xff1a; 《鸟哥的…...

微信小程序的图书馆预约系统设计与实现

摘 要 近年来随着社会竞争压力的不断加剧&#xff0c;人们需要不断充实自己的学识来提升自己的竞争力&#xff0c;对于在校的大学生而言需要利用在校期间实现考研考编的内容&#xff0c;职场的上班族需要通过考取职业技能资格证书来实现升职加薪&#xff0c;各行各业的人们都在…...

《2023年网信人才培训-网络安全从业人员能力素养提升培训》第一期成功举办

随着网络强国和数字中国建设的步伐加快&#xff0c;建设规模宏大、结构合理、素质优良的人才队伍成为一项重要工作。知了汇智作为数字产教融合基地&#xff0c;通过与高校、企业等多方合作&#xff0c;建立了完整的网络安全人才培养生态链。凭借自身技术优势和丰富的产业资源&a…...

WebGpu VS WebGL

推荐&#xff1a;使用 NSDT场景编辑器 助你快速搭建3D应用场景 WEBGPU VS. WEBGL 粗略地概述一下WebGPU与WebGL的不同之处是很有用的。在不涉及太多复杂的技术细节的情况下&#xff0c;两者的整体设计大致如下&#xff1a; WebGL和OpenGL一样&#xff0c;涉及许多单独的函数调…...

HTML <tfoot> 标签

实例 带有 thead、tbody 以及 tfoot 元素的 HTML 表格: <table border="1"><thead><tr><th>Month</th><th>Savings</th></tr></thead><tfoot><tr><td>Sum</td><td>$180<…...

VScode的PHP远程调试模式Xdebug

目录 第一步、安装VScode中相应插件 remote-ssh的原理 ssh插件&#xff1a; PHP相关插件&#xff1a; 第二步、安装对应PHP版本的xdebug 查看PHP具体配置信息的phpinfo页面 1、首先&#xff0c;打开php编辑器&#xff0c;新建一个php文件&#xff0c;例如&#xff1a;inde…...

HTML5-2-链接

HTML使用标签 <a>来设置超文本链接。 超链接可以是一个字&#xff0c;一个词&#xff0c;或者一组词&#xff0c;也可以是一幅图像&#xff0c;您可以点击这些内容来跳转到新的文档或者当前文档中的某个部分。 默认情况下&#xff0c;链接将以以下形式出现在浏览器中&am…...

Java--常用jar命令

jar常用指令 jar命令参数&#xff1a; jar命令格式&#xff1a;jar {c t x u f }[ v m e 0 M i ][-C 目录]文件名... 其中{ctxu}这四个参数必须选选其一。[v f m e 0 M i ]是可选参数&#xff0c;文件名也是必须的。 -c 创建一个jar包 -t 显示jar中的内容列表 -x 解压jar包 …...

微服务中间件--多级缓存

多级缓存 多级缓存a.JVM进程缓存1) Caffeine2) 案例 b.Lua语法1) 变量和循环2) 条件控制、函数 c.多级缓存1) 安装OpenResty2) 请求参数处理3) 查询Tomcat4) Redis缓存预热5) 查询Redis缓存6) Nginx本地缓存 d.缓存同步1) 数据同步策略2) 安装Canal2.a) 开启MySQL主从2.b) 安装…...

clickhouse系列3:clickhouse分析英国房产价格数据

1.准备数据集 该数据集包含有关英格兰和威尔士自1995年起到2023年的房地产价格的数据,超过2800万条记录,未压缩形式的数据集大小超过4GB,在ClickHouse中需要约306MB。 2.clickhouse中建表 CREATE TABLE uk_price_paid (price UInt32,...

2023京东口腔护理赛道行业数据分析(京东销售数据分析)

近年来&#xff0c;口腔护理逐渐成为年轻人重视的健康领域&#xff0c;从口腔护理整体市场来看&#xff0c;牙膏和牙刷等基础口腔护理产品仍占据主导地位。不过&#xff0c;随着口腔护理市场逐步朝向精致化、专业化、多元化等方向发展&#xff0c;不少新兴口腔护理产品受到消费…...

安服面试 --- 01

1、常用渗透工具 burp、nmap、sqlmap、蚁剑、御剑、冰蝎、cobalt strike等 2、渗透测试中&#xff0c;拿到目标公司站点&#xff0c;接下来应该怎么做&#xff1f; &#xff08;1&#xff09;信息收集&#xff1a;收集目标公司的相关信息。包括域名、ip地址、子域名、开放端…...

ExpressLRS开源之RC链路性能测试

ExpressLRS开源之RC链路性能测试 1. 源由2. 分析3. 测试方案4. 测试设计4.1 校准测试4.2 实验室测试4.3 拉距测试4.4 遮挡测试 5. 总结6. 参考资料 1. 源由 基于ExpressLRS开源基本调试验证方法&#xff0c;对RC链路性能进行简单的性能测试。 修改设计总能够满足合理的需求&a…...

el-form表单el-form-item prop一次验证两个值

1.表单添加两个框&#xff0c;prop写上 <el-form :model"ruleForm" :rules"rules" ref"ruleForm" label-width"100px" > <el-form-item type"type" label"时间" prop"dateSectOne"><di…...

HTTP 代理原理及 Python 简单实现

HTTP 代理是一种网络代理服务器(Proxy Server),它能够作为客户端与 HTTP 服务器之间的中介,它的工作原理是: 当客户端向 HTTP 代理发送 HTTP 请求时,HTTP 代理会收到请求。 HTTP 代理会将请求转发给目标 HTTP 服务器。 目标 HTTP 服务器处理请求并生成响应。 HTTP 代理将…...

ESP32-S2 Reverse TFT Feather开发板深度解析:从核心硬件到物联网项目实战

1. 项目概述&#xff1a;为什么选择ESP32-S2 Reverse TFT Feather&#xff1f;如果你正在寻找一款能让你快速搭建物联网设备原型&#xff0c;尤其是那些需要一块漂亮屏幕来交互或显示信息的项目&#xff0c;那么ESP32-S2 Reverse TFT Feather绝对是一个值得你花时间研究的开发板…...

基于RP2040的客制化宏键盘:从硬件设计到KMK固件开发全攻略

1. 项目概述与核心价值最近在折腾一个挺有意思的开源项目&#xff0c;叫clawdpad&#xff0c;作者是kudretyilmazz。乍一看这个名字&#xff0c;可能有点摸不着头脑&#xff0c;但如果你对机械键盘、客制化输入设备或者桌面自动化感兴趣&#xff0c;那这个项目绝对值得你花时间…...

基于PWM舵机与NeoPixel的万圣节互动蝙蝠制作全解析

1. 项目概述&#xff1a;一个会动的万圣节蝙蝠又快到万圣节了&#xff0c;想给家里的装饰来点不一样的“活物”吗&#xff1f;每年都摆静态的南瓜灯和蜘蛛网&#xff0c;总觉得少了点气氛。今年我琢磨着&#xff0c;不如自己动手做一个能扑腾翅膀、眼睛还会发光的机械蝙蝠&…...

容器化技术实战:从Docker到Kubernetes的体系化学习路径

1. 项目概述&#xff1a;一个容器化时代的“瑞士军刀”训练营 如果你正在或即将踏入容器化技术领域&#xff0c;无论是刚接触Docker的新手&#xff0c;还是想系统梳理Kubernetes的开发者&#xff0c;又或者是需要为团队进行技术培训的架构师&#xff0c;那么“jpetazzo/contai…...

创业团队如何利用Taotoken以更低成本快速验证AI产品创意

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 创业团队如何利用Taotoken以更低成本快速验证AI产品创意 对于资源有限的创业团队而言&#xff0c;在产品原型阶段验证AI创意的可行…...

OpenClaw量化回测性能调优指南:从数据加载到并行计算的实战优化

1. 项目概述&#xff1a;从开源工具到性能调优的艺术最近在跟几个做量化交易的朋友聊天&#xff0c;他们都在为一个问题头疼&#xff1a;策略回测和实盘执行的速度。动辄几十个G的历史数据&#xff0c;复杂的因子计算&#xff0c;加上高频的模拟交易&#xff0c;一套流程跑下来…...

基于CircuitPython与MCP9808的智能恒温控制器DIY指南

1. 项目概述作为一个常年鼓捣嵌入式系统和家庭自动化项目的爱好者&#xff0c;我一直在寻找那些能将技术融入日常生活的有趣点子。几年前开始在家酿造康普茶&#xff0c;立刻就遇到了一个经典难题&#xff1a;发酵温度控制。康普茶这种活菌饮料&#xff0c;其风味和健康度极度依…...

2026年冰袋吸水粉厂家大揭秘:选择指南与行业趋势题

随着冷链物流行业的快速发展&#xff0c;冰袋吸水粉作为冷链运输中不可或缺的保冷材料&#xff0c;其市场需求持续增长。然而&#xff0c;市场上冰袋吸水粉的质量参差不齐&#xff0c;如何选择一家值得信赖的厂家成为许多采购商关注的重点。本文将从行业背景、技术特点及市场趋…...

锂电池安全使用指南:从原理到实践,避免常见风险

1. 项目概述&#xff1a;从“能用”到“用好”的锂电安全课如果你玩过任何需要脱离电源线工作的电子项目&#xff0c;无论是给一个Arduino小车供电&#xff0c;还是驱动一架四轴飞行器&#xff0c;最终都绕不开一个核心问题&#xff1a;电源。从最基础的碱性电池&#xff0c;到…...

Arduino电机与舵机控制:从晶体管驱动到PWM调速实战

1. 项目概述与核心价值在机器人、智能小车或者任何一个需要“动起来”的嵌入式项目中&#xff0c;电机控制都是你绕不开的一道坎。你可能已经能让LED闪烁、让屏幕显示文字&#xff0c;但当你第一次尝试让一个小马达转起来&#xff0c;却发现Arduino板子上的引脚直接冒烟时&…...