需要的工具有
其中-set delay 10 是慢放用的
为了达到“连放”效果,lz还特意去找ffmpeg accurate seeking的说明,试了老半天 ..
edit: lz又重录了一段,遗憾的是”连放效果”不好…orz
之后你就有了…
edit:又改了下,因为imgur上传gif最大只能2MB,这里试着用gifsicle把他压小些,因为不知道如何指定说我就要最大2MB,请自动酌情降低质量要怎么写,如果实在太大,重录把… 反正问PyQT问题一般也就录几秒
edit2: 在家里的centos7上又半自动了下
然后在~/.bashrc里加了两个alias
所以之后只要运行 record 就可以录,运行 upload 就可以上传了
edit3: 又给改进了下,在这里,加了上传到 gfycat 和可以指定文件名
edit 4: 又改了下,现在去掉了imgur,因为逼格太低,换成了gfycat,lz知道有很多垃圾在里面,但是还没定型,lz也不知道最后想要什么效果
有几处疑问如下:
ps:这个script的折腾只是为了方便的录成gif然后上传,如果你只是要录桌面,那直接用ffcast就可以了,比如
pss: 公司似乎用不了libx264或是huffyuv,此时可以加上-b:v 16384k 让录的avi质量高些
psss: 录了个5m44s的demo,原avi 115.7MB,转gif后5.1MB
demo已上传至gfycat,点这里观看 … 似乎gfycat把他压成了1MB
pssss:
发现convert的时候很卡,开始试了加-limit area 512MiB 没什么效果,设下面两个环境变量似乎有效果
但是设置过后转换就慢到无法结束了,有人建议编译的时候–disable-openmp,不过经试验,设置MAGICK_AREA_LIMIT为一个较小的数可能有用比如0(强制cache到disk)
最新版我就不继续贴这里了,在github的gist上有。
参考:
GIF screencasting; the UNIX way
imgur upload tools
- 编译时候带 –enable-x11grab 的ffmpeg,如何知道带没带可以直接运行ffmpeg,然后
如果你从repo里装的ffmpeg的没有带这个argument,那你可以自己编译一个。 - 需要有imagemagick
- lolilolicon大神编的FFcast script, 有原版(需要bash>4.3),和chilicuil的修改版(不需要bash>4.3)因为我这里是CentOS 6.5,比较老,没有bash 4.3,所以我这里用chilicuil大神的
12345
git clone https:
//github
.com
/minos-org/ffcast
.git
cd
ffcast
make
# 你可以随便“装”个地方先,之后再拷去别的地方,或者你直接prefix=$HOME/.local也可以
make
install
DESTDIR=$HOME
/tools
- imgur网站有很多上传工具和script,比如这个Bart’s Bash Script Uploader
- xsel 或者 xclip
1
2
3
4
5
6
| #!/bin/bash TMP_AVI=$(mktemp /tmp/outXXXXXXXXXX .avi) TMP_GIF=$(mktemp /tmp/outXXXXXXXXXX .gif) ffcast -s ffmpeg -y -r 15 $TMP_AVI \ && convert - set delay 10 -layers Optimize $TMP_AVI $TMP_GIF \ && ~/. local /bin/imgurbash .sh $TMP_GIF |
为了达到“连放”效果,lz还特意去找ffmpeg accurate seeking的说明,试了老半天 ..
edit: lz又重录了一段,遗憾的是”连放效果”不好…orz
1
| ffmpeg -i out.avi -ss 00:00:03.20 -t 00:00:00.55 -vcodec copy out_1.avi -y ; convert -loop 0 -layers Optimize out_1.avi out.gif ; ~/. local /bin/imgurbash .sh out.gif |
edit:又改了下,因为imgur上传gif最大只能2MB,这里试着用gifsicle把他压小些,因为不知道如何指定说我就要最大2MB,请自动酌情降低质量要怎么写,如果实在太大,重录把… 反正问PyQT问题一般也就录几秒
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| #!/bin/bash TMP_AVI=$(mktemp /tmp/outXXXXXXXXXX .avi) TMP_GIF=$(mktemp /tmp/outXXXXXXXXXX .gif) ffcast -s ffmpeg -y -r 15 $TMP_AVI \ && convert - set delay 10 -layers Optimize $TMP_AVI $TMP_GIF maxsize=2048 actualsize=$( du -k "$TMP_GIF" | cut -f 1) if [ $actualsize - ge $maxsize ] then TMP_GIF2=$(mktemp /tmp/outXXXXXXXXXX .gif) gifsicle -O2 --colors 64 $TMP_GIF > $TMP_GIF2 fi ~/. local /bin/imgurbash .sh $TMP_GIF |
1
2
| alias record= '~/scripts/gif-batch.sh -r' alias upload= '~/scripts/gif-batch.sh -u' |
edit3: 又给改进了下,在这里,加了上传到 gfycat 和可以指定文件名
有几处疑问如下:
- 似乎在家里的centos7上用 -vcodec libx264,然后再convert转gif比较清楚,但是公司里convert非常之慢,似乎ffmpeg直接录成gif比较清楚
- 现在的json parse法比较弱智,也许用jq比较好,或者干脆把script写成python的,但是lz想先试试bash
1
2
3
4
5
| # 录指定窗口 用libx264 ffcast -w ffmpeg -y -r 20 -vcodec libx264 xxx.mov # 录指定区域,用拖拽框选设定 ffcast -s ffmpeg -y -r 20 -vcodec huffyuv x.avi |
psss: 录了个5m44s的demo,原avi 115.7MB,转gif后5.1MB
demo已上传至gfycat,点这里观看 … 似乎gfycat把他压成了1MB
pssss:
发现convert的时候很卡,开始试了加-limit area 512MiB 没什么效果,设下面两个环境变量似乎有效果
1
2
| export MAGICK_THREAD_LIMIT=2 export MAGICK_THROTTLE=50 |
1
| export MAGICK_AREA_LIMIT=100 |
参考:
GIF screencasting; the UNIX way
imgur upload tools