轻松一刻:电影条形码转换脚本 - 行者无疆 始于足下 - 行走,思考,在路上
轻松一刻:电影条形码转换脚本
xiaohanyu
posted @ Sun, 03 Feb 2013 20:09:47 +0800
in Shell
with tags
shell FFMpeg graphicsmagick
, 7133 readers
大概是从去年年初开始认真的写作。怎奈认真的写作有如雕刻,每次写作少则四五个小时,多则十几个小时,极耗体力,因此再不敢轻易提笔。两周前的一篇文章,更是在机缘巧合之下将鄙人推向了舆论的风口浪尖,至今想起来依然心有余悸。写的人累,想必读的人应该也不会太轻松。值此新春佳节,特奉上一篇“技术小品文”,奢望读者百忙之中施舍一笑^~。
想象一下,如果把一整部电影压缩成一张图片,那会是怎样壮观的场景?有点迫不急待?看看这里,梯子在这里。
是不是想动手尝试下了?可是有这样的软件吗?我没找到。于是唯一的办法就是自己动手,丰衣足食了。代码在这里,依赖Linux/ffmpeg/bc/graphicsmagick。运行过程中需要保证5G以上的可用磁盘空间。转换耗时约30分钟,视电影时长而定。
#!/usr/bin/env bash ################################################################################ # Usage: A script to convert a movie to a movebarcode # Author: Xiao Hanyu# Depends: # ffmpeg: get basic info of a movie and convert it to a series of images # graphicsmagick: # convert, mogrify, blur images # bc: shell calculator ################################################################################ function get_duration { ## [0-9]{2}:[0-9]{2}:[0-9]{2}(|\.[0-9]{1,2}) matches: ## hh:mm:ss.ms ## hh:mm:ss duration=$(ffmpeg -i $1 2>&1 | grep 'Duration' | grep -E -o "[0-9]{2}:[0-9]{2}:[0-9]{2}(|\.[0-9]{1,2})") duration_h=$(echo $duration | awk -F: '{print $1}') duration_m=$(echo $duration | awk -F: '{print $2}') duration_s=$(echo $duration | awk -F: '{print $3}') movie_seconds=$(echo "$duration_h * 3600 + $duration_m * 60 + $duration_s" | bc) } function get_fps { fps=$(ffmpeg -i $1 2>&1 | grep -E -o "[0-9]{2}\.[0-9]{2}\ fps" | grep -E -o "[0-9]{2}\.[0-9]{2}") } movie=$1 get_fps $movie get_duration $movie ## use multi-cores of cpu to improve the speed of ffmpeg, see ffmpeg man page cpu_cores=$(cat /proc/cpuinfo | grep processor | wc -l) time ffmpeg -i $1 -r 1 -threads $cpu_cores image%d.png time gm mogrify -resize 0.5%x100% *png time gm convert $(for i in `seq 1 $movie_seconds`; do ls -l image$i.png; done | awk '{print $9}') +append result1.png time gm convert result1.png -blur 50 result2.png # resize result2.png with a proper size # I set new width to 2000, while keep the height intact new_width=2000 new_geometry=$(gm identify result2.png | awk '{print $3}' | awk -F+ '{print $1}' | sed 's/[0-9]*x/2000x/g' | sed 's/$/!/g') gm convert -resize $new_geometry result2.png result3.png rm image*png if [ -e $(which xdg-open) ]; then xdg-open result3.png fi
代码逻辑很少,先是通过ffmpeg进行截图,然后用graphicsmagick进行图片的接合、缩放和模糊处理,最后清扫战场,删除一些临时文件,就这么简单。最后,奉上《迁徙的鸟》和《阿甘正传》的条形码,博君一笑。
Tue, 05 Feb 2013 12:43:23 +0800
……这
Mon, 11 Feb 2013 10:06:17 +0800
这?
Sat, 16 Feb 2013 14:07:08 +0800
orz
挺像影视基因
Sun, 17 Feb 2013 11:26:35 +0800
阿甘正传底部那个footer,想必是字幕吧?笑了。
Mon, 18 Feb 2013 09:35:13 +0800
仁兄慧眼……
Mon, 25 Feb 2013 21:58:11 +0800
笑了,呵呵
Tue, 26 Feb 2013 10:26:41 +0800
嘿嘿
Wed, 27 Feb 2013 16:00:29 +0800
依旧笑的很开心
Sun, 03 Mar 2013 06:25:20 +0800
我是查latex cjk查到这的,结果看了其他几个帖子,发现越来越有意思,再看到后面,发现是PKU的,你是CS08?07?现在在哪呢?
我是YP06的,正在UK读博士,最后一年,做图形学,动画和影视特效
Sun, 03 Mar 2013 10:13:52 +0800
呃,恕我孤陋寡闻,yp是?
我是ZJU07的,现在在一家小公司做OpenStack。
你的phd读的很快呀。
Sun, 03 Mar 2013 17:39:20 +0800
那就是我误解了,恩,抱歉。你是当时在百度实习的时候在PKU待了半年?
YP是元培学院的意思,恩。英国这边的学制比较短,三到四年即可。有IM之类的?正好我想问下cloud computing这块,多谢了
Sun, 03 Mar 2013 18:28:57 +0800
hi, 已经发邮件回复,请查收。
Wed, 27 Mar 2013 11:50:53 +0800
ZJU07,浙江大学07级……
你们对暗号么……
Wed, 27 Mar 2013 13:23:39 +0800
博主 你咋不更新了?
Wed, 22 May 2013 14:44:21 +0800
好的文章可以振聋发聩!好的评论可以一针见血,楼主好文,必须收藏。我是一鸣SEO,记得回访!
Thu, 23 May 2013 09:17:18 +0800
这网站老是访问不了的
Mon, 23 Dec 2013 12:18:57 +0800
cool