ffmpeg编译完之后,会产生ffmpeg、ffplay、ffprobe、ffserver四个可执行文件。这是ffmpeg的命令行工具,分别用于转码、播放媒体、查看媒体信息和媒体服务器的功能。
这几个工具可以直接在ffmpeg目录下使用./ffmpeg这样的形式执行,如果在编译ffmpeg之后执行sudo make install,这些工具会安装到树莓派3的系统中,这样就可以在任意目录下直接输入ffmpeg、ffplay等执行相应的工具。比如我们直接在用户目录(注意绿色箭头所指~表示home目录)执行一下ffmpeg --help
ffmpeg命令工具的用法:
仔细阅读ffmpeg --help显示的帮助信息,上图红框里是查看一些信息类的命令参数,比较重要的是-devices参数,用于查询当前系统的ffmpeg支持的设备,树莓派3上执行之后的结果如下图:
我们可以看到,有alsa和v4l2两个设备,alsa用于音频的录制,而v4l2则用于视频采集。
下面对ffmpeg命令的
转码功能做一个简单的介绍。转码就是将一种媒体转换为另一种媒体,可以是改变容器格式、码流数量、改变编码格式、或仅仅改变编码参数。转码需要指定输入文件、输出文件和一些相关参数,本质上从摄像头采集视频保存成常见的视频文件,也属于转码,下面我们通过摄像头录像成mp4文件来分析一下其参数用法;
ffmpeg参数以分组的方式传人,上图中黑色箭头和绿色箭头之间表示输入格式部分的参数,绿色箭头和红色箭头之间则是输出格式的参数,这里相当于摄像头(输入)->mp4文件(输出)的转换,我们分别指定好输入和输出的参数,然后以输入输出文件名为该组参数的结尾就行了。这里输入是摄像头,Linux下摄像头驱动文件是/dev/videon,n是数字,支持多个摄像头,数字从0递增。所以我们指定-i /dev/video0为输入文件,并放在该组参数的最后。然后我们再设置摄像头抓数据的一些参数,-f v4l2表示取数据的格式为v4l2,是Linux下的标志摄像头驱动形式。-r 15 表示帧率为15,-video_size vga表示采集分辨率为VGA(640x480),最后-pix_fmt yuv420p表示采集yuv420p格式的元数据。
然后是输出格式的参数,最后的picam.mp4表示输出的文件名,-f mp4表示输出为mp4格式,而然后是-b:v 500k则指定输出文件中的视频码率为500kbps,-vcodec (-v:c) h264表示输出文件的视频编码采用h264,ffmpeg会自动指定一个可用的编码器,这里我们可以看后面的输出信息,ffmpeg指定了x264作为编码器。另外由于这里我只单采集视频,所以显示指定关闭音频,使用-an参数。
最后么的-y参数表示输出文件如果存在,就自动覆盖,而不询问,否则每次询问是否覆盖。
图中最后的红色方框显示当前转码的信息,当前事第多少帧,帧率有多少,时间,码率,已经speed表示当前速度和期望速度的比值,如果编码过慢,这个值会小于1.
另外简单说一下ffprobe,主要用于查看媒体文件信息,用法为ffprobe -i 文件名。示例:
ffplay用法也很简单,ffplay -i 文件名,就可以直接播放视频了。当然需要在gui窗口下才能执行,ssh连接里就不用尝试了,因为没有图形界面,没法播放视频啦。不过树莓派播放视频好像资源好用挺厉害的,分辨率1000多的视频,cpu占用90%+,软解挺忧伤的。
好了,另外还有ffserver,这个用的很少,就不多说了。
下集预告:利用树莓派硬编码直播视频~~