内容简介:mediainfo是一个能获取多媒体文件详细信息的软件,包括内容信息,视频信息,音频信息,文本信息等,有了它我们可以查看视频的宽高,比例,播放时长,音轨,比特率等等信息个人博客地址为:dangbowen.com,欢迎加入收藏夹 参考php-mediainfo教程安装mediainfo并实际操作栗子看能否正确调用mediainfo命令先让我们看下一个普通视频文件的信息都包含哪些
mediainfo是一个能获取多媒体文件详细信息的软件,包括内容信息,视频信息,音频信息,文本信息等,有了它我们可以查看视频的宽高,比例,播放时长,音轨,比特率等等信息
准备工作
个人博客地址为:dangbowen.com,欢迎加入收藏夹 参考php-mediainfo教程安装mediainfo并实际操作栗子看能否正确调用mediainfo命令
命令详解
先让我们看下一个普通视频文件的信息都包含哪些
$ mediainfo 'http://samples.mplayerhq.hu/FLV/Enigma_Principles_of_Lust-part.flv' General Complete name : http://samples.mplayerhq.hu/FLV/Enigma_Principles_of_Lust-part.flv Format : Flash Video File size : 500 KiB Duration : 11 s 711 ms Overall bit rate : 350 kb/s Tagged date : UTC 2011-02-27 11:00:33 Tagging application : inlet media FLVTool2 v1.0.6 - http://www.inlet-media.de/flvtool2 Video Format : AVC Format/Info : Advanced Video Codec Format profile : Main@L2.1 Format settings : CABAC / 3 Ref Frames Format settings, CABAC : Yes Format settings, ReFrames : 3 frames Codec ID : 7 Duration : 11 s 711 ms Width : 426 pixels Height : 240 pixels Display aspect ratio : 16:9 Frame rate mode : Constant Frame rate : 30.000 FPS Original frame rate : 29.970 (29970/1000) FPS Color space : YUV Chroma subsampling : 4:2:0 Bit depth : 8 bits Scan type : Progressive Audio Format : AAC Format/Info : Advanced Audio Codec Format profile : LC Codec ID : 10-2 Duration : 11 s 702 ms Channel(s) : 2 channels Channel positions : Front: L R Sampling rate : 22.05 kHz Frame rate : 21.533 FPS (1024 SPF) Compression mode : Lossy 复制代码
能看到格式,size大小,宽,高,duration等等常用信息,让我们一一用mediainfo命令来获取
获取文件格式
$ mediainfo --Inform="General;%Format%" 'http://samples.mplayerhq.hu/FLV/Enigma_Principles_of_Lust-part.flv' Flash Video 复制代码
返回的是general下的format信息,比如你要的是video下的format信息呢
$ mediainfo --Inform="Video;%Format%" 'http://samples.mplayerhq.hu/FLV/Enigma_Principles_of_Lust-part.flv' AVC 复制代码
这会拿到的是Video信息下的format,切记这里获取参数的大小写是严格区分的.这2个栗子可以发现如果想获取mediainfo各个参数的信息是先找到 分类名(类似General,Video,Audio)->参数(Format,Width这种),格式就是 用mediainfo的Inform
mediainfo --Inform="分类名;%参数名%" 'http://samples.mplayerhq.hu/FLV/Enigma_Principles_of_Lust-part.flv'
这个格式记住可以获取你想要的任何参数
让我们来练习一下: 套用格式获取duration信息
$ mediainfo --Inform="Video;%Duration%" 'http://samples.mplayerhq.hu/FLV/Enigma_Principles_of_Lust-part.flv' 11711 复制代码
我们可以看到取出来的播放时长单位是毫秒,而不是秒.
再来尝试一下获取文件大小:
$ mediainfo --Inform="General;%File size%" 'http://samples.mplayerhq.hu/FLV/Enigma_Principles_of_Lust-part.flv' 复制代码
??? 为什么返回值是空呢,格式没有错却无法获得文件的大小. 因为在显示的参数都是格式化后的,所以你会看到File size之间是有空格的,如果想获得文件大小应该替换成FileSize
$ mediainfo --Inform="General;%FileSize%" 'http://samples.mplayerhq.hu/FLV/Enigma_Principles_of_Lust-part.flv' 512000 复制代码
此时就顺利获取到了文件大小,那如何知道各个参数的真正参数名呢,用这个命令可以获取所有的详细参数的真实参数名
$ mediainfo --Info-Parameters General Count : Count of objects available in this stream Status : bit field (0=IsAccepted, 1=IsFilled, 2=IsUpdated, 3=IsFinished) StreamCount : Count of streams of that kind available StreamKind : Stream type name StreamKind/String : Stream type name ....此处省略剩余行信息 复制代码
参数显示的太多,不方便我们查找,我们可以输出到一个txt文件里
$ mediainfo --Info-Parameters > mediainfo_parameters.txt 复制代码
打开 mediainfo_parameters.txt
可以搜索 FileSize
那行显示 FileSize : File size in bytes
,同理我们根据这个可以获得你所需要的参数信息
看到这里你可能已经能熟练使用这个命令获取单个参数值,但是实际场景中可能获取的参数是多个的
例如:同时获取视频的宽,高,播放时长?
很简单每个参数都用 %%
包裹起来然后每个参数用 ,
分割即可,命令如下:
$ mediainfo --Inform="Video;%Width%,%Height%,%Duration%" 'http://samples.mplayerhq.hu/FLV/Enigma_Principles_of_Lust-part.flv' 426,240,11711 复制代码
此时我们可以一条语句获得视频的宽,高,播放时长信息,这里的 逗号 可以替换别的字符,你可以用空格,|等可以自行尝试一下,反正解析数据的时候对应好相应的字符就行.简单例子:
$ mediainfo --Inform="Video;%Width%|%Height%|%Duration%" 'http://samples.mplayerhq.hu/FLV/Enigma_Principles_of_Lust-part.flv' 426|240|11711 复制代码
看到这里,你已经会用一条命令获取一个分类下的多个参数信息了,那么如果是要求同时获取视频的宽,高,播放时长,音频的format多个参数信息可以么? 这个问题当初也困扰了我一阵,命令各种尝试之下终无解,最后发现mediainfo的inform命令是支持文件执行的.例子如下:
#编辑一个文本放 一行命令 vi 1.txt Video;%Width%|%Height%|%Duration% wq #命令调用该文本 $ mediainfo --Inform="file://1.txt" 'http://samples.mplayerhq.hu/FLV/Enigma_Principles_of_Lust-part.flv' 426|240|11711 #修改文本命令如下 vi 1.txt Video;%Width%,%Height%,%Duration%, Audio;%Format% wq #重新执行命令 $ mediainfo --Inform="file://1.txt" 'http://samples.mplayerhq.hu/FLV/Enigma_Principles_of_Lust-part.flv' 426,240,11711,AAC 复制代码
此时可以看到一条命令已经可以获得视频的宽高播放时长和音频的format信息
最后
有的人会想为什么一定要一条命令这么费劲巴拉的处理问题呢?多一条命令也不会多慢? 当你处理几条,几十条视频数据的时候你用多条命令获取这些参数可能影响不大,因为数据量太小.但是实际问题你可能一次要处理上十万条数据,甚至上百万,上千万个数据时,那么精简的一条命令可以缩短脚本的响应时间,提高任务的执行速度,尽量减小了系统开销,这是在生产环境实际处理数据后的一点经验.
本文作者: Bowen 本文链接: dangbowen.com/server/cdb3…
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- MySQL 建表语句转 PostgreSQL 建表语句全纪录
- Go语言开发-过程式编程-通信和并发语句-Select语句
- SQL语句优化之JOIN和LEFT JOIN 和 RIGHT JOIN语句的优化
- Python 条件语句
- Python 循环语句
- Python break 语句
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Learning JavaScript
Shelley Powers / Oreilly & Associates Inc / 2006-10-17 / $29.99
As web browsers have become more capable and standards compliant, JavaScript has grown in prominence. JavaScript lets designers add sparkle and life to web pages, while more complex JavaScript has led......一起来看看 《Learning JavaScript》 这本书的介绍吧!