FFMPEG的移植与使用
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
FFMPEG的移植与使用
前段时间在翻看电脑里面资料时,发现了以前做的在嵌入式硬件上面运行以ffmepg为基础,以嵌入式硬件解码的多媒体播放工作,发现都快忘记完了。今日得闲整理温习了一下ffmpeg在嵌入式上的运用,这里给大家分享一下,顺便做了一下记录以备以后使用时参考。
本文(记录)与目前网上很多关于ffmpeg的文章相比有两个特点:
一、重点不在于ffmpeg的解码部分(这个本来是ffmpeg最大的亮点),为什么?前面说了,这是我以前工作的一个整理。况且关于ffmpeg的解码相关文章非常多了,如果大家感兴趣的话,可以后面第五部分增加吧。
二、本文是不采用其他第三方的开源多媒体框架而在嵌入式硬件上做多媒体播放项目。第三方的多媒体框架软件隐藏了一些扩展数据的关键处理,很多初学者可能不清楚这些细节问题,所以当ffmepg在自己的解码移植上没有问题,真正在用嵌入式硬件进行解码时会遇到这种问题。
下载最新版本的ffmpeg-3.1.1,解压
配置:
配置后会输出以下信息,有几点较为有用,列举如下:
分别是:
库安装的位置
不知道
所用c编译器
所用C库
主机的c编译器
主机的c库
库安装后所支持的平台
是否支持大端
是否支持shared
是否支持static
是否支持network
是否支持threading
是否支持SDL
生成的工具(注意没有生成ffplay,尚未找到解决方案)
支持的解码格式,图片仅截取一小部分)
支持的编码格式(图片仅截取一小部分)
支持的协议,如tcp,udp,ftp,http等
支持的输入设备
支持的输出设备
遵循的协议
然后进行make编译,再make install
在Linux目录下,编译成功,生成我们的动态库:
这样我们生产了我们需要的动态库和头文件。
将bin目录下的工具拷贝到开发板/bin目录下,修改权限,运行./ffmpeg,根据报错逐一复制lib目录下的库到开发板的/lib目录下,注意大部分库是链接,要复制原文件,然后创建链接
这个过程很繁琐,坚持下去
下面介绍ffmpeg的应用
1.录制视频 保存成.asf文件,可以直接在pc机播放(针对V4L2,当然ffmpeg也支持其他设备,如vfwcap,)
命令:
ffmpeg -f video4linux2 -s 320*240 -r 10 -i /dev/video4 test.asf
-f fmt force format
-s size 指明大小,size=宽*高 set frame size (WxH or abbreviation)
-r rate set frame rate (Hz value, fraction or abbreviation)
-i 视频输入设备
最后接输出文件
由于摄像头分辨率较低,所以大小还是不要设置太大,不然视频很不清晰此,像素点都变成方块显示出来了,亲测
输出参数:包含大小,时间长度,帧数
其他有用选项
-fs limit_size set the limit file size in bytes,设置输出文件的大小
-ss time_off set the start time offset 设置启动录制视频事件
-sseof time_off set the start time offset relative to EOF 设置视频拍摄长度
2.截取视频的前30帧做成gif文件
-y overwrite output files 改写输入文件
-vframes number set the number of video frames to output 设置输出的帧数-f 指定输出格式
3.截取指定时间的缩略图
-t duration record or transcode "duration" seconds of audio/video
4.录制屏幕视频