提取视频文件里的音频和无声视频
一、提取视频文件里的音频:
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("视频生成失败");}}
相关文章:

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

SpringBoot原理
一、Bean原理 1、配置文件的优先级 SpringBoot项目当中支持的三类配置文件: - application.properties - application.yml - application.yaml 配置文件优先级排名(从高到低): 1. properties配置文件 2. yml配置文件 3. yaml…...

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

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

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

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

微信小程序的图书馆预约系统设计与实现
摘 要 近年来随着社会竞争压力的不断加剧,人们需要不断充实自己的学识来提升自己的竞争力,对于在校的大学生而言需要利用在校期间实现考研考编的内容,职场的上班族需要通过考取职业技能资格证书来实现升职加薪,各行各业的人们都在…...

《2023年网信人才培训-网络安全从业人员能力素养提升培训》第一期成功举办
随着网络强国和数字中国建设的步伐加快,建设规模宏大、结构合理、素质优良的人才队伍成为一项重要工作。知了汇智作为数字产教融合基地,通过与高校、企业等多方合作,建立了完整的网络安全人才培养生态链。凭借自身技术优势和丰富的产业资源&a…...

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

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插件: PHP相关插件: 第二步、安装对应PHP版本的xdebug 查看PHP具体配置信息的phpinfo页面 1、首先,打开php编辑器,新建一个php文件,例如:inde…...

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

Java--常用jar命令
jar常用指令 jar命令参数: jar命令格式:jar {c t x u f }[ v m e 0 M i ][-C 目录]文件名... 其中{ctxu}这四个参数必须选选其一。[v f m e 0 M i ]是可选参数,文件名也是必须的。 -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京东口腔护理赛道行业数据分析(京东销售数据分析)
近年来,口腔护理逐渐成为年轻人重视的健康领域,从口腔护理整体市场来看,牙膏和牙刷等基础口腔护理产品仍占据主导地位。不过,随着口腔护理市场逐步朝向精致化、专业化、多元化等方向发展,不少新兴口腔护理产品受到消费…...

安服面试 --- 01
1、常用渗透工具 burp、nmap、sqlmap、蚁剑、御剑、冰蝎、cobalt strike等 2、渗透测试中,拿到目标公司站点,接下来应该怎么做? (1)信息收集:收集目标公司的相关信息。包括域名、ip地址、子域名、开放端…...

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

el-form表单el-form-item prop一次验证两个值
1.表单添加两个框,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 代理将…...

数据结构--队列与循环队列
队列 队列是什么,先联想一下队,排队先来的人排前面先出,后来的人排后面后出;队列的性质也一样,先进队列的数据先出,后进队列的后出;就像图一的样子: 图1 如图1,1号元素是…...

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

版本控制 Git工具的使用
版本控制的概念: 版本控制(Revision control)是一种在开发的过程中用于管理我们对文件、目录或工程等内容的修改历史,方便查看更改历史记录,备份以便恢复以前的版本的软件工程技术。简单来说就是用于管理多人协同开发…...

GNS3 在 Linux 上的安装指南
文章目录 GNS3 在 Linux 上的安装指南1. 基于 Ubuntu 的发行版安装 GNS32. 基于 Debian 的安装3. 基于 ArchLinux 的安装4. 从 Pypi 安装 GNS35. 启动 GNS3 服务端GNS3 在 Linux 上的安装指南 大家好,今天我们来聊聊如何在 Linux 上安装 GNS3。GNS3 是一个非常受欢迎的网络模…...

Mybatis中 list.size() = 1 但显示 All elements are null
一、Bug展示 二、原因分析 2.1.情形一:Mybatis的XML中返回类型映射错误 <select id"selectByDesc" parameterType"com.task.bean.OrderInfo"resultType"com.task.bean.OrderInfo">select MER_ID,SETTLE_DATE,ICE_NAME,ORDER_S…...

Soul的社交元宇宙之路,还有多远?
在元宇宙概念爆火的当下,以互联网为依托的虚拟社交逐步为用户承载起其空缺的精神交流与寄托,而在这其中,以“跟随灵魂找到你”为Slogan,主打年轻人社交元宇宙平台的APP--Soul则在这条赛道上凭借着独特的风格,逐步突出重…...

如何解决Memcached缓存击穿和雪崩问题
原文 Memcached是一种快速、高性能的分布式内存对象缓存系统,广泛应用于Web应用的缓存中。然而,Memcached也存在一些常见的问题,如缓存击穿和缓存雪崩。本文将介绍什么是缓存击穿和缓存雪崩,并提供一些解决这些问题的方法&#x…...

uniapp 开发之仿抖音,上下滑动切换视频、点击小爱心效果
效果图: 功能描述: 上下滑动视频,双击暂停,然后第一个视频再往上滑显示”已经滑到顶了“ 开始代码: 首先视频接口使用的公开的视频测试接口 开放API-2.0 官网展示 Swagger UI 接口文档 一…...

【C++设计模式】依赖倒转原则
2023年8月30日,周三上午 目录 概述含义举个简单的例子传统做法使用依赖倒转原则代码说明再举一个具体的例子以生活为例 概述 依赖倒转原则(Dependency Inversion Principle,DIP)是面向对象设计中的一个基本原则。 含义 高层模块不应该依赖低层模块,两者都应该依…...

浙江首例!金华银行基于完全国产自研数据库构建新一代核心系统
6 月 12 日,金华银行举行“星辉工程”核心项目群上线发布会,新一代核心系统部署在国产分布式数据库 OceanBase 上,实现系统的高可用、高性能、国产升级。据悉,这是浙江省首例基于完全国产自研数据库落地的银行核心系统。 金华银行…...