在我们写博客或做PPT的时候,经常希望把自己的动画效果演示给别人看。
但是用手机照相机拍摄下来无论从清晰度还是技术角度都感觉太low了,
所以下面我介绍一下我们这些程序员应该怎么做。先看一下效果图
1.录制手机视频
这个很简单,需要如下:
- 一台4.4以上的手机
-
输入 adb shell screenrecord /sdcard/test.mp4
- 操作手机,使用ctrl + C按键结束录制
- 在手机的sdcard/文件夹下,找到test.mp4并且取出
brew install ffmpeg 安装成功之后,就可以使用了
3.mp4 转换为 gif
- ffmpeg -i /Users/xiepengchong/Desktop/test.mp4 /Users/xiepengchong/Desktop/test.gif
- ffmpeg -i /Users/xiepengchong/Desktop/test.mp4 -s 320x480 /Users/xiepengchong/Desktop/output.gif
高阶:摘取其他文章
最近,项目里需要做一个把视频片段转成GIF动画的功能,便于用户分享到微博。惊奇地发现,原来强大的FFmpeg是支持的!
可以简单地执行下面的命令行:
ffmpeg -ss 25 -t 10 -i D:\Media\bear.wmv -f gif D:\a.gif
意思是:将D:\Media目录下的源文件bear.wmv,从第25秒的位置开始,截取10秒长度的视频转成GIF文件,保存为D:\a.gif。
想要知道FFmpeg到底支持哪些格式吗?执行ffmpeg –formats即可。发现gif赫然在列,放心了!
问题来了,你的源文件可能是1080P的高清视频,帧率可能还比较高。为了便于网络分享,GIF文件最好小一点。于是,我们需要使用-s参数来进行图像的缩放,使用-r参数来限制目标文件的帧率。命令行如下:
ffmpeg -ss 25 -t 10 -i D:\Media\bear.wmv -s 320x240 -f gif -r 1 D:\b.gif
把b.gif拖进浏览器预览,结果发现:虽然帧率降到了1 fps(从源视频里每隔一秒抽取一帧图像输出到目标文件),整个动画播放还是持续了10秒钟,看着很揪心!能不能在源视频跳帧的情况下同时提高GIF的播放速率呢(比如说在2秒内播完)?查了一遍FFmpeg的说明文档,似乎没有哪个参数可以快速达到这样的目的。也罢,那就分两步走吧:
首先,执行ffmpeg -ss 25 -t 10 -i D:\Media\bear.wmv -r 1 -s 320x240 -f image2 D:\foo-%03d.jpeg,从源视频中每秒钟抽取一帧图像,保存为一系列JPEG文件。然后,再执行ffmpeg -f image2 -framerate 5 -i D:\foo-%03d.jpeg D:\c.gif,将这一系列JPEG图像合成为帧率5 fps的GIF文件。Bingo!
上面提到,把GIF文件拖进浏览器可以进行预览。当然,使用ffplay.exe工具也是可以的——命令行:ffplay D:\a.gif。