Python 计算 AMR 文件的时长
Python 计算 AMR 文件的时长
def getAMRDuration(fileName):duration = -1packedSize = [12, 13, 15, 17, 19, 20, 26, 31, 5, 0, 0, 0, 0, 0, 0, 0]try:with open(fileName, "rb") as f:length = len(f.read())pos = 6 # 设置初始位置frameCount = 0 # 初始帧数packedPos = -1# 初始数据值datas = Nonewhile pos <= length:f.seek(pos)datas = f.read(1)if len(datas) == 0:# print "pos:%s" % posif length > 0:duration = (length-6)/650breakpackedPos = (ord(datas) >> 3) & 0x0Fpos += packedSize[packedPos] + 1frameCount += 1duration += frameCount * 20 # 帧数*20except Exception as error:print "error.msg:" + error.messagereturn duration
参考 JAVA 的计算代码 编写的
JAVA 计算 AMR 文件的时长
参考网络文章:
如有原作者出处, 烦请评论区告知,不胜感激
package com.majing.learning.fileuploadclient.filetime;import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;public class AmrFileTimeLengthSample {public static long getAmrDuration(File file) throws IOException {long duration = -1;int[] packedSize = { 12, 13, 15, 17, 19, 20, 26, 31, 5, 0, 0, 0, 0, 0, 0, 0 };RandomAccessFile randomAccessFile = null;try {randomAccessFile = new RandomAccessFile(file, "rw");long length = file.length();//文件的长度int pos = 6;//设置初始位置int frameCount = 0;//初始帧数int packedPos = -1;byte[] datas = new byte[1];//初始数据值while (pos <= length) {randomAccessFile.seek(pos);if (randomAccessFile.read(datas, 0, 1) != 1) {duration = length > 0 ? ((length - 6) / 650) : 0;break;}packedPos = (datas[0] >> 3) & 0x0F;pos += packedSize[packedPos] + 1;frameCount++;}duration += frameCount * 20;//帧数*20} finally {if (randomAccessFile != null) {randomAccessFile.close();}}return duration;}public static void main(String[] args) throws IOException {System.out.println(getAmrDuration(new File("D:/tmp/fileuploaddir/咱们结婚吧.amr")));}
}
AMR文件的Byte 数组数据 获取时长
/*** 得到amr的时长** @param fileByte* @return* @throws IOException*/public static int getAmrDuration(byte [] fileByte) throws IOException {long duration = -1;int[] packedSize = { 12, 13, 15, 17, 19, 20, 26, 31, 5, 0, 0, 0, 0, 0,0, 0 };final File file = File.createTempFile("temp"+CodingUtil.getRandomString(16), ".amr");//创建临时文件System.out.println("临时文件所在的本地路径:" + file.getCanonicalPath());FileOutputStream fos = new FileOutputStream(file);fos.write(fileByte);//关闭临时文件fos.flush();fos.close();RandomAccessFile randomAccessFile = null;try {randomAccessFile = new RandomAccessFile(file, "rw");long length = file.length();// 文件的长度int pos = 6;// 设置初始位置int frameCount = 0;// 初始帧数int packedPos = -1;byte[] datas = new byte[1];// 初始数据值while (pos <= length) {randomAccessFile.seek(pos);if (randomAccessFile.read(datas, 0, 1) != 1) {duration = length > 0 ? ((length - 6) / 650) : 0;break;}packedPos = (datas[0] >> 3) & 0x0F;pos += packedSize[packedPos] + 1;frameCount++;}duration += frameCount * 20;// 帧数*20} finally {if (randomAccessFile != null) {randomAccessFile.close();}}
// System.out.println("duration : "+duration/1000.0);
// System.out.println("四舍五入后的 :"+Math.round(duration/1000.0));// 向上取整用Math.ceil(1.21) >>> 2.0// 向下取整用Math.floor(1.61) >>> 1.0//删除临时文件file.delete();// 毫秒 进一制return (int)(Math.ceil(duration/1000.0));}
Python 计算 AMR 文件的时长相关推荐
- sox 获取wav文件的时长
1> 获取某个.wav的时长信息 sox "F:\第10集 奔跑的"蜗牛"(1).wav" -n stat 2> 批量计算文件下所有.wav文件的时 ...
- Android 播放raw文件夹下音频文件,本地MP3文件播放,播放云端MP3文件,获取MP3文件播放时长
1.复制音频文件到raw文件夹下 2.实例化音频文件 private final MediaPlayer.OnCompletionListener beepListener = new MediaPl ...
- C# 获取视频文件播放时长
以前是用xp (32位)系统,获取视频文件长度是通过调用Shell32.dll来读取文件信息得到的,最近换win7(32位)系统,编译以前的项目代码发现无法读取了,代码没有改动,拿到在xp下运行也不行 ...
- Java获取播放文件的时长
package org.jeecg.modules.diy.util;import it.sauronsoftware.jave.Encoder; import it.sauronsoftware.j ...
- 使用Python计算fasta文件的序列长度
使用Python计算fasta文件的序列长度 在这里插入代码片使用Python计算fasta文件的序列长度 #!/usr/bin/python #-- coding:utf-8 -- import s ...
- 想知道自己的某个内存的小视频总时长?那这篇CSDN很适合你,快来看看Python如何实现求MP4时长吧(包含os模块和moviepy模块的全套基础操作)
今天我们就来看看哪个老司机的视频时长最长,嘿嘿嘿,废话不多说,任何内容都瞒不住咱的程序,包含os模块和moviepy模块的全套基础操作哦!我们直接开始! 老司机求视频时长 一.我们需要的模块与包的使用 ...
- python获取网页播放视频时长_python 获取目录视频时长,大小
#!/usr/bin/python # -*- coding:utf-8 -*- import os import sys import re import xlwt import csv from ...
- Python获取.wav音频的时长
要求是这样的: 给你一个.wav的音频,要求获取这个音频的时长.这里需要用到两个模块,contextlib和 wave. 方法1: import contextlib import wave file ...
- java获取音频_java获取音频文件播放时长
方法一: 在项目开发过程中,需要获取音视频文件时长.查询资料后发现 JAVE能够完美得到想要的结果,JAVE项目简介如下: The JAVE (Java Audio Video Encoder) li ...
- vue 上传音视频文件获取时长
经常我们在上传了音视频文件后需要得到时长,来进行免费试看分钟的设置. 可以使用URL.createObjectURL() 的方法来实现 // 获取上传文件时长 handleTime(file) {re ...
最新文章
- ReSharper修改命名风格
- html背景音乐demo,music.html
- [导入]TreeView的级联选择(上)
- HttpContext.Cache属性
- CSS布局之脱离文档流详解——浮动、绝对定位脱离文档流的区别
- mysql去重DISTINCT
- Take Your Seat Gym - 102222D
- 国家开放大学2021春1032成本管理题目
- 实时计算无线数据分析
- LVS + Nginx +Tomcat 高可用架构
- 安装IPython攻略
- 078、Docker 最常用的监控方案(2019-04-25 周四)
- mysql出现服务器异常后,重启服务器后无法开启数据库处理方法
- 计算机视觉 - 字典学习
- iOS 常用正则表达式一览表
- python实现 模糊C均值聚类算法(Fuzzy-C-Means)-基于iris数据集
- 好用的医药管理软件都有哪些特点
- 苹果手机显示有4g上不了网络连接服务器,苹果移动数据为什么叫蜂窝网络_蜂窝移动数据和4g有什么区别...
- Python:存取npy格式数据
- 什么是mysql联合主键_什么是联合主键
热门文章
- mkdir: Call From lzh/192.168.66.150 to localhost:9000 failed on connection exception:
- shaderlab 中 use pass、grab pass的用法
- sklearn基于轮廓系数来选择n_clusters
- 实现企业战略目标从做好项目管理开始
- 优化About Us页面,提高网站询盘转化
- 小米笔记本13.3(Intel+mx150独显双显卡)+deepin15.5+cuda9.0安装教程
- 华为手机热点无法连接_华为P7手机WLAN热点连接失败解决方法介绍
- UVA Team Queue
- 给大家推荐一款好用的背单词APP(目前只支持苹果手机)
- CSDN【精品专栏】第28期