ffmpeg静态编译,定制功能,尽量缩小可执行程序体积
来源:互联网 发布:生化危机解析知乎 编辑:程序博客网 时间:2024/06/07 21:48
目标是编译出一个ffmpeg可执行程序,体积尽量小,功能包括:
(1)采集原始视频yuv格式
(2)压缩成mp4格式
(3)可以解压mp4格式成yuv
(4)可以直接录制mp4
1.源码下载
http://ffmpeg.org/releases/ffmpeg-3.4.tar.bz2
2.解压源码(在ubuntu或者开发板上linux环境下)
tar -jxf ffmpeg-3.4.tar.bz2; cd ffmpeg-3.4;
3.创建安装目录
mkdir install;
3.配置选项
./configure --disable-ffplay --disable-ffprobe --disable-ffserver --disable-doc --disable-debug \
--prefix=./install --disable-shared --enable-static \
--enable-thumb --enable-neon --extra-cflags="-mthumb -mfpu=neon -mfloat-abi=hard" \
--disable-indevs --disable-outdevs --disable-bsfs --disable-protocols --disable-filters \
--disable-encoders --disable-decoders --disable-muxers --disable-demuxers --disable-parsers \
--enable-protocol=file \
--enable-encoder=rawvideo --enable-encoder=mpeg4 \
--enable-decoder=rawvideo --enable-decoder=mpeg4 --enable-decoder=movtext \
--enable-muxer=aiff --enable-muxer=h263 --enable-muxer=mp4 --enable-muxer=rawvideo \
--enable-demuxer=aac --enable-demuxer=aiff --enable-demuxer=h263 --enable-demuxer=mov --enable-demuxer=rawvideo \
--enable-parser=aac --enable-parser=h263 --enable-parser=mpegaudio --enable-parser=mpeg4video \
--enable-indev=v4l2 --enable-outdev=v4l2 --enable-filter=scale
配置选项解释
./configure 是一个配置脚本,配置选项特别多,可以运行./configure -h来查看有多少可配置项。
--disable-ffplay --disable-ffprobe --disable-ffserver \这三个是可执行程序,ffplay是播放器,ffserver是视频服务器
--disable-doc --disable-debug \关闭文档和debug选项
--prefix=./install --disable-shared --enable-static \指定安装目录,关闭共享库,使能静态库(缩小代码体积)
--enable-thumb --enable-neon --extra-cflags="-mthumb -mfpu=neon -mfloat-abi=hard" \使能thumb(缩小代码体积)使能neon浮点运算,指定编译器使用neon浮点运算
--disable-indevs --disable-outdevs --disable-bsfs --disable-protocols --disable-filters \
--disable-encoders --disable-decoders --disable-muxers --disable-demuxers --disable-parsers \
这十个对应的设备,我们先全部关闭然后再放开我们需要的,主要还是为了缩小代码体积。如果没有后面的配置,ffmpeg编译出是最小的体积,只是没有任何功能。
--enable-protocol=file \使能文件协议,这个必须放开
--enable-encoder=rawvideo --enable-encoder=mpeg4 \使能编码器rawvideo对应yuv,mpeg4对应mp4
--enable-decoder=rawvideo --enable-decoder=mpeg4 --enable-decoder=movtext \使能解码器,这里需要开启movtext才能解压mp4
--enable-muxer=aiff --enable-muxer=h263 --enable-muxer=mp4 --enable-muxer=rawvideo \使能合成器
--enable-demuxer=aac --enable-demuxer=aiff --enable-demuxer=h263 --enable-demuxer=mov --enable-demuxer=rawvideo \使能分离器
--enable-parser=aac --enable-parser=h263 --enable-parser=mpegaudio --enable-parser=mpeg4video \使能解析器
--enable-indev=v4l2 --enable-outdev=v4l2 使能输入设备,输出设备(如果不使能就只能编解码不能采集视频)
--enable-filter=scale 使能过滤器,这个是用来转换yuv的格式,yuv有多种格式要互相转换。
4.编译
make -j n
使能多线程编译,加快编译速度
5.安装
make install
在install/bin下就是ffmpeg可执行程序。
6.测试
(1)采集yuv视频
./ffmpeg -y -s 640x480 -framerate 30 -r 30 -t 10 -i /dev/video1 -f rawvideo -pix_fmt yuv420p /tmp/vga_yuv420p.raw
-y 如果目标文件已经存在,覆盖掉
-s 640x480输入视频的像素
-framerate 30 视频输入源按30fps,这个不能是任意值一般是15/30/60
-r 30 每秒采集多少帧到文件,一般是与framerate相等。
-t 10 录制10秒钟
-i /dev/video1 这个要根据实际情况,摄像头是哪个设备就设定成哪个
-f rawvideo 指定格式是rawvide
-pix_fmt yuv420p 指定像素格式是yuv420p
/tmp/vga_yuv420p.raw 目标文件
命令运行结束可以找到输出文件,用yuv播放器查看。一定要指定yuv的格式。
本地没有yuv播放器,可以上传到PC播放。
tftp -p -l /tmp/vga_yuv420p.mp4 192.168.56.3
目前发现一般的摄像头默认采集到的yuv都是yuyv422的。
(2)转换格式成mp4
./ffmpeg -f rawvideo -pix_fmt yuv420p -s 640x480 -i /tmp/vga_yuv420p.raw /tmp/vga_yuv420p.mp4
-f rawvideo -pix_fmt yuv420p 指定输入格式是yuv420p
-s 640x480 输入视频的像素是640X480
-i /tmp/vga_yuv420p.raw 输入文件
/tmp/vga_yuv420p.mp4输出文件
如果本地没有播放器,可以上传到PC播放。
tftp -p -l /tmp/vga_yuv420p.mp4 192.168.56.3
(3)解mp4文件成yuv
./ffmpeg -i /tmp/vga_yuv420p.mp4 -f rawvideo -pix_fmt yuv420p /tmp/vga_yuv420p_from_mp4.raw
(4)直接录制MP4
./ffmpeg -y -s 640x480 -framerate 30 -r 30 -t 10 -i /dev/video1 /tmp/vga_yuv420p2.mp4
如果在pc上模拟和测试需要修改配置项,因为pc上没有thumb和neon
./configure --disable-ffplay --disable-ffprobe --disable-ffserver --disable-doc --disable-debug \
--prefix=./install --disable-shared --enable-static \
--disable-indevs --disable-outdevs --disable-bsfs --disable-protocols --disable-filters \
--disable-encoders --disable-decoders --disable-muxers --disable-demuxers --disable-parsers \
--enable-protocol=file \
--enable-encoder=rawvideo --enable-encoder=mpeg4 \
--enable-decoder=rawvideo --enable-decoder=mpeg4 --enable-decoder=movtext \
--enable-muxer=aiff --enable-muxer=h263 --enable-muxer=mp4 --enable-muxer=rawvideo \
--enable-demuxer=aac --enable-demuxer=aiff --enable-demuxer=h263 --enable-demuxer=mov --enable-demuxer=rawvideo \
--enable-parser=aac --enable-parser=h263 --enable-parser=mpegaudio --enable-parser=mpeg4video \
--enable-indev=v4l2 --enable-outdev=v4l2 --enable-filter=scale
阅读全文
0 0
- ffmpeg静态编译,定制功能,尽量缩小可执行程序体积
- jbuilder编译可执行程序
- Android NDK 缩小编译库的体积大小
- ffmpeg 编译好的库文件和可执行程序----for android
- 编译Android下可执行命令的FFmpeg
- 编译Android下可执行命令的FFmpeg
- 编译Android下可执行命令的FFmpeg
- 编译 FFMPEG静态库
- 编译 ffmpeg 静态库
- 编译资源进入可执行程序
- ndk编译c可执行程序
- NDK编译C可执行程序
- CMake编译链接可执行程序
- 图片体积缩小
- 缩小ipa包体积
- 用于编译可执行程序,静态库,动态库的通用的Makefile
- opencv交叉编译arm环境库,静态,动态库和可执行程序
- CMake - boost - 可执行程序 - 静态库
- 一个案例,三个角色,简单说下B端产品的权限设计
- 2017-10-23 导入项目异常
- LWC 55:713. Subarray Product Less Than K
- linux多线程同步方法
- (转)Android N安装apk报错:android.os.FileUriExposedException
- ffmpeg静态编译,定制功能,尽量缩小可执行程序体积
- Alibaba sophix熱修復
- RXAndroid
- ROS-----pluginlib使用总结
- 新路程------sh脚本之无脑判断wifi热点是否有手机连接
- CLNS与CMNS
- 不带doc/view结构的窗口分割实现
- 【C++专题】static_cast, dynamic_cast, const_cast探讨
- node读取卡夫卡