FFmpeg命令行工具的使用方式

FFmpeg命令行工具的使用方式
本文将重点介绍ffmpeg、ffprobe与ffplay这三个命令行工具,而ffserver则是作为简单的流媒体服务器存在的,与客户端开发关系不大,因此本书将不做介绍。前文曾经提到ffmpeg是进行媒体文件转码的命令行工具,ffprobe是用于查看媒体文件头信息的工具,ffplay则是用于播放媒体文件的工具。
下面按照从简单开始的原则,先介绍ffprobe——查看媒体文件格式的工具。
1.ffprobe
首先用ffprobe查看一个音频的文件:
ffprobe ~/Desktop/32037.mp3
键入上述命令之后,先看如下这行信息:
Duration:00:05:14.83,start:0.000000,bitrate:64kb/s
234mm这行信息表明,该音频文件的时长是5分14秒零830毫秒,开始播放时间是0,整个媒体文件的比特率是64Kbit/s,然后再看另外一行:茶浴炉
Stream#0:0 Audio:mp3,24000Hz,stereo,s16p,64kb/s
这行信息表明,第一个流是音频流,编码格式是MP3格式,采样率是24kHz,声道是立体声,采样表示格式是SInt16(short)的planner(平铺格式),这路流的比特率是64Kbit/s。
然后再使用ffprobe查看一个视频的文件:
ffprobe ~/Desktop/32037.mp4
键入上述命令之后,可以看到第一部分的信息是Metadata信息:
Metadata:
major_brand: isom
minor_version: 512
compatible_brands: isomiso2avc1mp41
encoder: Lavf55.12.100
这行信息表明了该文件的Metadata信息,比如encoder是Lavf55.12.100,其中Lavf代表的是FFmpeg输出的文件,后面的编号代表了FFmpeg的版本代号,接下来的一行信息如下:
真空垫Duration:00:04:34.56 start:0.023220,bitrate:577kb/s
上面一行的内容表示Duration是4分34秒560毫秒,开始播放的时间是从23ms开始播放的,整个文件的比特率是577Kbit/s,紧接着再来看下一行:
Stream#0:0(un):Video:h264(avc1/0x31637661),yuv420p,480*480,508kb/s,24fps
离线语音识别方案这行信息表示第一个stream是视频流,编码方式是H264的格式(封装格式是AVC1),每一帧的数据表示是YUV420P的格式,分辨率是480×480,这路流的比特率是508Kbit/s,帧率是每秒钟24帧(fps是24),紧接着再来看下一行:
Stream#0:1(und):Audio:aac(LC)(mp4a/0x6134706D),44100Hz,stereo,fltp,63kb/s
这行信息表示第二个stream是音频流,编码方式是AAC(封装格式是MP4A),并且采用的Profile是LC规格,采样率是44100Hz,声道数是立体声,数据表示格式是浮点型,这路音频流的比特率是63Kbit/s。极压高温润滑脂
以上就是使用ffprobe来提取音频文件和视频文件头信息的方式,以及提取出来信息的含义。当然,ffprobe还有比较高级的用法,下面就来介绍几个:
ffprobe -show_format 32037.mp4
上述命令可以输出格式信息format_name、时间长度duration、文件大小size、比特率bit_rate、流的数目nb_streams等。
ffprobe -print_format json -show_streams 32037.mp4
上述命令可以以JSON格式的形式输出具体每一个流最详细的信息,视频中会有视频的宽
高信息、是否有b帧、视频帧的总数目、视频的编码格式、显示比例、比特率等信息,音频中会有音频的编码格式、表示格式、声道数、时间长度、比特率、帧的总数目等信息。
显示帧信息的命令如下:
ffprobe -show_frames sample.mp4
查看包信息的命令如下:
ffprobe -show_packets sample.mp4
观影小技巧
日常生活中经常会接触到多媒体文件,比如,在电脑上利用ffprobe工具打开一些国粤双语的文件,一般会看到如下3行Stream。
视频Stream:h264 yuv420P
音频Stream:aac 48000Hz stereo fltp(default)title:粤语
音频Stream:aac 48000Hz stereo fltp title:国语
这就是说明,该媒体文件中有三路流:一路是视频流,另外两路是音频流,默认播放的是粤语的声音流,在大多数的播放器里面都可以进行音频流的切换,可以切换到国语的声音流进行观看。
以上介绍的基本上就是日常工作中经常会使用到的ffprobe命令了,其实大家只需要掌握最重要的查看指令就可以了,下面继续来看下一个命令行工具ffplay。
2.ffplay
前文已经提到过,ffplay是以FFmpeg框架为基础,外加渲染音视频的库libSDL来构建的媒体文件播放器。它所依赖的libSDL是1.2版本的,所以在安装ffplay之前也要安装对应版本的libSDL作为其依赖的组件。之后使用ffplay就非常简单了,比如我们要播放一个音频文件:
ffplay 32037.mp3
这时候会弹出一个窗口,一边播放MP3文件,一边将播放声音的语谱图画到该窗口上。针对该窗口的操作如下,点击窗口的任意一个位置,ffplay会按照点击的位置计算出时间的进度,然后跳(seek)到这个时间点上继续播放;按下键盘上的右键会默认快进10s,左键默认后退10s,上键默认快进1min,下键默认后退1min;按ESC键就是退出播放进程;如果按w键则将绘制音频的波形图等。播放一个视频的命令如下所示:
ffplay 32037.mp4
这时候会直接在新弹出的窗口上播放该视频,如果想要同时播放多个文件,那么只需要在多个命令行下同时执行ffplay就可以了,在对比多个视频质量的时候这是一个操作技巧,此外,如果按s键则可以进入frame-step模式,即按s键一次就会播放下一帧图像,这在观察某些视频内部的帧内容时也是常用的技巧。
业界内开源的ijkPlayer其实就是基于ffplay进行改造的播放器,当然其做了硬件解码以及很多兼容性的工作。ijkPlayer是一款非常优秀的播放器,作为开发者的我们需要很多优秀的开源项目。所以在这里笔者呼吁各家互联网公司开源出自己的部分代码,以提高所在领域的整体水平。
更多的ffplay命令介绍如下:
ffplay 32037.mp4 -loop 10
上述命令代表播放视频结束之后会从头再次播放,共循环播放10次。还记得前文中提到过的两路流吗?ffplay也做了这方面的适配,也就是说在ffplay中其实也可以指定使用哪一路音频流或者视频流,命令如下:
ffplay 大话西游.mkv -ast 1
上述命令表示播放视频中的第一路音频流,如果参数ast后面跟的是2,那么就播放第二路音频流,如果没有第二路音频流的话,就会静音,同样也可以设置参数vst,比如:
ffplay 大话西游.mkv -vst 1
上述命令表示播放视频中的第一路视频流,如果参数vst后面跟的是2,那么就播放第二路视频流,但是如果没有第二路视频流,就会是黑屏即什么都不显示。
接下来介绍开发工作中常用的几个命令,这些命令在工作中debug的时候非常有用。首先
用ffplay播放裸数据,无论是音频的pcm文件还是视频帧原始格式表示的数据(YUV420P或者rgba)。下面先来看看音频pcm文件的播放命令:
在线测厚
ffplay song.pcm -f s16le -channels 2 -ar 44100
仅键入上述这行命令其实就可以正常播放song.pcm了,当然,前提是格式(-f)、声道数(-channels)、采样率(-ar)必须设置正确,如果其中任何一项参数设置不正确,都不会得到正常的播放结果。第1章在讲音频的基础概念时已经提到过,WAV格式的文件称为无压缩的格式,其实就是在PCM的头部添加44个字节,用于标识这个PCM的采样表示格式、声道数、采样率等信息,对于WAV格式音频文件,ffplay肯定可以直接播放,但是若让ffplay播放PCM裸数据的话,只要为其提供上述三个主要的信息,那么它就可以正确地播放了。

本文发布于:2024-09-22 19:41:36,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/1/315466.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:播放   格式   信息   视频   音频   命令
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议