ffmpeg android 移植,Ffmpeg Android 移植

通过编译ffmpeg原文件,使得ffmpeg可以在android上以命令行的形式进行运行。

最终会生成几个平台下的ffmpeg可执行文件。

Github地址

配置步骤(mac环境)

1.根据github先配置环境

export ANDROID_SDK=${NDK_ROOT}

linux 下

sudo apt-get --quiet --yes install build-essential git autoconf libtool pkg-config gperf gettext yasm python-lxml

mac 下(先安装homebrew)

homebrew:https://brew.sh/index_zh-cn.html

brew install wget

brew install yasm

brew install automake

brew install gettext

brew install libtool

sudo pip2.7 install lxml (python xml解析支持)

2.之后修改 settings.sh —> $(nproc) —> 2

3.执行 ./init_update_libs.sh (下载相应的库,有些可能会下失败,需手动下载,如libpng-1.6.21)

4.重新下载freetype2 2.4.6版本替换文件夹下的freetype2

5.执行 ./android_build.sh ,会有 readlink 的问题(linux和mac不一致,但似乎不影响)

编译总结

因为该版本是linux下的版本,当时有很多环境不知道怎么装,重复编译了很多次才编译成功,走了很多的弯路,充分说明前期环境的重要性,而且每次编译花不少时间,浪费很多时间。

自己编译可以参考(没试验)

ffmpeg 瘦身

按照如上进行编译虽然可以编出android下的ffmpeg可执行文件,但是ffmpeg太大,导致apk包很大,所以要进行ffmpeg瘦身,瘦身主要是操作文件在 ffmpeg/.configure 文件,修改ffmpeg编译配置:

./configure -h 可以查看所有编译选项

ffmpeg可执行文件的大小主要来自编解码,可以通过减小编解码支持的数量达到减少执行文件的大小,

主要有 encoder,decoder,muxer,demuxer,parser这几个相对较大,先将这几个选项 disable 掉,然后enable需要的东西即可,通过 ./configure -h 命令可以查看

ffmpeg 相关参考文档:

滤镜中文解释文档:http://www.cnblogs.com/xdsnet/p/5196596.html

ffmpeg基础:https://wenku.baidu.com/view/296eefcaf90f76c661371af1.html

特效合成:https://segmentfault.com/q/1010000002783684

ffmpeg相关属性解释:http://ffmpeg.org/ffmpeg-utils.html#Expression-Evaluation

ffmpeg 简要命令如下:

制作 fade in/out 特效视频

ffmpeg -r 1/5 -i in%03d.jpg -c:v libx264 -r 30 -y -pix_fmt yuv420p slide.mp4

ffmpeg -i slide.mp4 -y -vf fade=in:0:30 slide_fade_in.mp4

ffmpeg -i slide_fade_in.mp4 -y -vf fade=out:120:30 slide_fade_in_out.mp4

=========================================================================================================================================

ffmpeg -loop 1 -t 5 -i in001.jpg -loop 1 -t 5 -i in002.jpg -loop 1 -t 5 -i in003.jpg -loop 1 -t 5 -i in004.jpg -loop 1 -t 5 -i in005.jpg -filter_complex "[0:v]fade=t=out:st=4:d=1[v0]; [1:v]fade=t=in:st=0:d=1,fade=t=out:st=4:d=1[v1]; [2:v]fade=t=in:st=0:d=1,fade=t=out:st=4:d=1[v2]; [3:v]fade=t=in:st=0:d=1,fade=t=out:st=4:d=1[v3]; [4:v]fade=t=in:st=0:d=1,fade=t=out:st=4:d=1[v4]; [v0][v1][v2][v3][v4]concat=n=5:v=1:a=0,format=yuv420p[v]" -map "[v]" out.mp4

## 倒影

ffmpeg -i in001.jpg -vf "split [main][tmp]; [tmp] crop=iw:ih/2:0:0, vflip [flip]; [main][flip] overlay=0:H/2" out001.jpg

ffmpeg -i out.mp4 -vf "split [main][tmp]; [tmp] crop=iw:ih/2:0:0, vflip [flip]; [main][flip] overlay=0:H/2" split_slide.mp4

ffmpeg -i in002.mp4 -i in003.mp4 -filter_complex "blend=all_expr='A*(if(gte(T,10),1,T/10))+B*(1-(if(gte(T,10),1,T/10)))'" aa.mp4

ffmpeg -i in002.mp4 -i in003.mp4 -filter_complex "blend=all_expr='if(eq(mod(X,2),mod(Y,2)),A,B)'" aa.mp4

ffmpeg -i in002.mp4 -i in003.mp4 -filter_complex "blend=all_expr='if(gt(X,Y*(W/H)),A,B)'" aa.mp4

ffmpeg -i in002.mp4 -vf "scale=w=iw:h=-1:eval=frame" aa.mp4

## 图片到视屏

ffmpeg -loop 1 -t 10 -i in003.jpg -vcodec mpeg4 in003.mp4

## 旋转

ffmpeg -i in002.mp4 -vf "rotate='2*PI*t/10'" aa.mp4

## 缩放

ffmpeg -loop 1 -i in001.jpg -vf "zoompan=z='if(lte(zoom,0.5),1.5,max(0.5,zoom-0.15))':d=125" -c:v libx264 -t 5 aa.mp4

ffmpeg -r 25 -i in001.jpg -filter_complex "scale=-1:10*ih,zoompan=z='min(zoom+0.0015,1.5)':d=125:x='iw/2-(iw/zoom/2)':y='ih/2-(ih/zoom/2)',scale=-1:720" -y -shortest -c:v libx264 -pix_fmt yuv420p aa.mp4

ffmpeg -i in001.jpg -filter_complex "scale=-1:10*ih,zoompan=z='min(zoom+0.005,3)':d=125:x='iw/2-(iw/zoom/2)':y='ih/2-(ih/zoom/2)'[z];[z][0]scale2ref[out][ref];[ref]nullsink" -map "[out]" -y aa.mp4

ffmpeg -i in002.mp4 -i frame.ts -filter_complex "nullsrc=size=200x100 [background];[0:v] setpts=PTS-STARTPTS, scale=100x100 [left];[1:v] setpts=PTS-STARTPTS, scale=100x100 [right];[background][left] overlay=shortest=1 [background+left];[background+left][right] overlay=shortest=1:x=100" aa.mp4

ffmpeg -y -loop 1 -i in001.jpg -loop 1 -i in002.jpg -loop 1 -i in003.jpg -filter_complex "[0:v]zoompan=z='min(zoom+0.0015,1.5)':d=125,trim=duration=5,fade=t=in:st=0:d=0.5,fade=t=out:st=4.5:d=0.5,scale=796x450,setpts=PTS-STARTPTS[v0];[1:v]zoompan=z='min(zoom+0.0015,1.5)':d=125,trim=duration=5,fade=t=in:st=0:d=0.5,fade=t=out:st=4.5:d=0.5,scale=796x450,setpts=PTS-STARTPTS[v1];[2:v]zoompan=z='min(zoom+0.0015,1.5)':d=125,trim=duration=5,fade=t=in:st=0:d=0.5,fade=t=out:st=4.5:d=0.5,scale=796x450,setpts=PTS-STARTPTS[v2]; [v0][v1][v2] concat=n=3:v=1:a=0, format=yuv420p[v]" -map '[v]' -c:v libx264 -pix_fmt yuvj420p -q:v 1 test.mp4

ffmpeg -i in002.jpg -filter_complex "nullsrc=s=1000*800 [bg]; scale=100*100 [vvv];[bg][vvv] overlay=x='if(gte(t,2), -w+(t-2)*20, NAN)':y=0" -t 10 abc.mp4

http://stackoverflow.com/questions/29845019/ffmpeg-convert-a-series-of-images-to-video-with-crossfade-or-any-other-transit

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值