最近看了一个朋友用树莓派做的延时视频,感觉挺不错的,突然也想做一个. 手头正好有树莓派和摄像头,所以也尝试着做了一下,非常简单.
首先说明一下什么是延时摄影:
要创建延时视频,只需将Raspberry Pi配置为定期拍摄照片(例如每分钟),然后使用应用程序将图片拼接成视频。原理就这么简单.
有两种方法可以做到这一点。如果是官方摄像头,实现起来就更加简单了.
使用Raspistill的内置延时模式
raspistill应用程序具有内置的延时模式,使用--timelapse
(或-tl
)命令行开关。
切换之后的值是拍摄之间的时间(以毫秒为单位)。
raspistill -t 30000 -tl 2000 -o image%04d.jpg
请注意%04d
输出文件名中的数字:这表示文件名中要显示照片编号。因此,例如,上面的命令将每隔两秒(2000毫秒)产生一次照片的捕获,总时间为30秒(30000毫秒),名为image0001.jpg,image0002.jpg,依此类推,直到image0015.jpg。
该%04d
指示四位数字,有前导零添加,以弥补所需的位数。因此,例如,%08d
会产生一个八位数的数字。0
这个位,如果你不想要前导零,你可以不加。
如果输入的- t 为0,则应用程序将以其最小时间间隔进行拍摄照片。请注意,捕获之间存在大约30毫秒的最小强制暂停,以确保可以进行曝光计算。
使用cron(计划任务)
使用自定义拍照的好方法是使用cron
。
打开cron 表进行编辑:
crontab -e
这将询问您要使用哪个编辑器,或者在默认编辑器中打开。在编辑器中打开文件后,添加以下行以安排每分钟拍照.
camera.sh 可以自己写个拍摄的脚本,其中2>&1是将错误输出输入到标准输出上.
* * * * * /home/pi/camera.sh 2>&1
保存并退出,您应该看到以下消息:
crontab: installing new crontab
确保您的脚本不保存使用相同文件名拍摄的每张照片。否则将每次覆盖原有的图片。
将图像拼接在一起
现在,您需要将照片拼接成一个视频。
你可以在Pi上使用,mencoder
非常赞, 但处理速度很慢。也可以将图像文件传输到台式计算机或笔记本电脑并在那里处理视频,那样会快一些,因为如果你拍摄了24小时的图片,每小时的每分钟拍摄5张图片的话,数据量也是大的惊人的.处理起来也是时间更长.但是如果在树莓派上通过脚本自行处理了,最后得到的视频就可以直接播放了. 如果你会推流处理,那还可以直接推到直播平台. 也是很好的.
切换到包含所有图像的文件夹,并将文件名重定向到一个文本文件。例如:
ls *.jpg > pics.list
在RASPBERRY PI上
虽然速度很慢(由于使用软件进行编码而不是使用Raspberry Pi硬件加速),但您可以使用各种可用工具将JPEG图像拼接在一起。其中有个软件叫avconv
,需要安装, 安装好以后就可以拼接转码了。
sudo apt-get install libav-tools
现在,可以使用这些工具将JPEG文件转换为H264格式的视频文件。
avconv -r 24 -i image%04d.jpg -r 24 -vcodec libx264 -vf scale=800:480 timelapse.mp4
在Raspberry Pi 3上,它可以每秒编码多于一帧。其他Pi型号的性能会有所不同.
目前我这边使用的参数是:
- -r 24在输入和输出文件中假设每秒二十四帧。
- -i image%04.jpg输入文件规范(用于匹配捕获期间生成的文件)。
- -vcodec libx264使用软件x264编码器进行编码。
- -vf scale = 800:480 调整为输出720p。您还可以使用1920:1080或更低分辨率,具体取决于你自己的要求, 例如,我是要在52pi.taobao.com 买的800×480分辨率。请注意,Pi只能播放高达1080p的视频,但如果您打算以4K播放,则可以在此设置。
- timelapse.mp4输出文件的名称。
avconv
具有针对不同编码选项和其他设置的综合参数集。这些可以使用列出avconv --help
。
在另一台LINUX计算机上
您可以使用与Raspberry Pi相同的说明,或者替代包,例如mencoder
:
sudo apt-get install mencoder
现在运行以下命令:
mencoder -nosound -ovc lavc -lavcopts vcodec=mpeg4:aspect=16/9:vbitrate=8000000 -vf scale=1920:1080 -o timelapse.avi -mf type=jpeg:fps=24 mf://@pics.list
一旦完成,您应该有一个视频文件,timelapse.avi
然后你就可以用播放器播放查看了.
omxplayer -o hdmi timelapse.avi
效果是不是杠杠滴?