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 文件的时长相关推荐

  1. sox 获取wav文件的时长

    1> 获取某个.wav的时长信息 sox "F:\第10集 奔跑的"蜗牛"(1).wav" -n stat 2> 批量计算文件下所有.wav文件的时 ...

  2. Android 播放raw文件夹下音频文件,本地MP3文件播放,播放云端MP3文件,获取MP3文件播放时长

    1.复制音频文件到raw文件夹下 2.实例化音频文件 private final MediaPlayer.OnCompletionListener beepListener = new MediaPl ...

  3. C# 获取视频文件播放时长

    以前是用xp (32位)系统,获取视频文件长度是通过调用Shell32.dll来读取文件信息得到的,最近换win7(32位)系统,编译以前的项目代码发现无法读取了,代码没有改动,拿到在xp下运行也不行 ...

  4. Java获取播放文件的时长

    package org.jeecg.modules.diy.util;import it.sauronsoftware.jave.Encoder; import it.sauronsoftware.j ...

  5. 使用Python计算fasta文件的序列长度

    使用Python计算fasta文件的序列长度 在这里插入代码片使用Python计算fasta文件的序列长度 #!/usr/bin/python #-- coding:utf-8 -- import s ...

  6. 想知道自己的某个内存的小视频总时长?那这篇CSDN很适合你,快来看看Python如何实现求MP4时长吧(包含os模块和moviepy模块的全套基础操作)

    今天我们就来看看哪个老司机的视频时长最长,嘿嘿嘿,废话不多说,任何内容都瞒不住咱的程序,包含os模块和moviepy模块的全套基础操作哦!我们直接开始! 老司机求视频时长 一.我们需要的模块与包的使用 ...

  7. python获取网页播放视频时长_python 获取目录视频时长,大小

    #!/usr/bin/python # -*- coding:utf-8 -*- import os import sys import re import xlwt import csv from ...

  8. Python获取.wav音频的时长

    要求是这样的: 给你一个.wav的音频,要求获取这个音频的时长.这里需要用到两个模块,contextlib和 wave. 方法1: import contextlib import wave file ...

  9. java获取音频_java获取音频文件播放时长

    方法一: 在项目开发过程中,需要获取音视频文件时长.查询资料后发现 JAVE能够完美得到想要的结果,JAVE项目简介如下: The JAVE (Java Audio Video Encoder) li ...

  10. vue 上传音视频文件获取时长

    经常我们在上传了音视频文件后需要得到时长,来进行免费试看分钟的设置. 可以使用URL.createObjectURL() 的方法来实现 // 获取上传文件时长 handleTime(file) {re ...

最新文章

  1. ReSharper修改命名风格
  2. html背景音乐demo,music.html
  3. [导入]TreeView的级联选择(上)
  4. HttpContext.Cache属性
  5. CSS布局之脱离文档流详解——浮动、绝对定位脱离文档流的区别
  6. mysql去重DISTINCT
  7. Take Your Seat Gym - 102222D
  8. 国家开放大学2021春1032成本管理题目
  9. 实时计算无线数据分析
  10. LVS + Nginx +Tomcat 高可用架构
  11. 安装IPython攻略
  12. 078、Docker 最常用的监控方案(2019-04-25 周四)
  13. mysql出现服务器异常后,重启服务器后无法开启数据库处理方法
  14. 计算机视觉 - 字典学习
  15. iOS 常用正则表达式一览表
  16. python实现 模糊C均值聚类算法(Fuzzy-C-Means)-基于iris数据集
  17. 好用的医药管理软件都有哪些特点
  18. 苹果手机显示有4g上不了网络连接服务器,苹果移动数据为什么叫蜂窝网络_蜂窝移动数据和4g有什么区别...
  19. Python:存取npy格式数据
  20. 什么是mysql联合主键_什么是联合主键

热门文章

  1. mkdir: Call From lzh/192.168.66.150 to localhost:9000 failed on connection exception:
  2. shaderlab 中 use pass、grab pass的用法
  3. sklearn基于轮廓系数来选择n_clusters
  4. 实现企业战略目标从做好项目管理开始
  5. 优化About Us页面,提高网站询盘转化
  6. 小米笔记本13.3(Intel+mx150独显双显卡)+deepin15.5+cuda9.0安装教程
  7. 华为手机热点无法连接_华为P7手机WLAN热点连接失败解决方法介绍
  8. UVA Team Queue
  9. 给大家推荐一款好用的背单词APP(目前只支持苹果手机)
  10. CSDN【精品专栏】第28期