提取视频文件里的音频和无声视频
一、提取视频文件里的音频:
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 代理将…...
web vue 项目 Docker化部署
Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段: 构建阶段(Build Stage):…...
3.3.1_1 检错编码(奇偶校验码)
从这节课开始,我们会探讨数据链路层的差错控制功能,差错控制功能的主要目标是要发现并且解决一个帧内部的位错误,我们需要使用特殊的编码技术去发现帧内部的位错误,当我们发现位错误之后,通常来说有两种解决方案。第一…...
【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分
一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计,提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合:各模块职责清晰,便于独立开发…...
什么是Ansible Jinja2
理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具,可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板,允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板,并通…...
力扣-35.搜索插入位置
题目描述 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...
VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP
编辑-虚拟网络编辑器-更改设置 选择桥接模式,然后找到相应的网卡(可以查看自己本机的网络连接) windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置,选择刚才配置的桥接模式 静态ip设置: 我用的ubuntu24桌…...
使用LangGraph和LangSmith构建多智能体人工智能系统
现在,通过组合几个较小的子智能体来创建一个强大的人工智能智能体正成为一种趋势。但这也带来了一些挑战,比如减少幻觉、管理对话流程、在测试期间留意智能体的工作方式、允许人工介入以及评估其性能。你需要进行大量的反复试验。 在这篇博客〔原作者&a…...
mac 安装homebrew (nvm 及git)
mac 安装nvm 及git 万恶之源 mac 安装这些东西离不开Xcode。及homebrew 一、先说安装git步骤 通用: 方法一:使用 Homebrew 安装 Git(推荐) 步骤如下:打开终端(Terminal.app) 1.安装 Homebrew…...
离线语音识别方案分析
随着人工智能技术的不断发展,语音识别技术也得到了广泛的应用,从智能家居到车载系统,语音识别正在改变我们与设备的交互方式。尤其是离线语音识别,由于其在没有网络连接的情况下仍然能提供稳定、准确的语音处理能力,广…...
Shell 解释器 bash 和 dash 区别
bash 和 dash 都是 Unix/Linux 系统中的 Shell 解释器,但它们在功能、语法和性能上有显著区别。以下是它们的详细对比: 1. 基本区别 特性bash (Bourne-Again SHell)dash (Debian Almquist SHell)来源G…...
