查看: 4387|回复: 0

[教程] 利用树莓派和官方摄像头实现延时摄影

[复制链接]
  • TA的每日心情

    2020-3-6 09:52
  • 签到天数: 13 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    发表于 2018-9-20 14:39:49 | 显示全部楼层 |阅读模式
    分享到:

    最近看了一个朋友用树莓派做的延时视频,感觉挺不错的,突然也想做一个. 手头正好有树莓派和摄像头,所以也尝试着做了一下,非常简单.


    首先说明一下什么是延时摄影:

    要创建延时视频,只需将Raspberry Pi配置为定期拍摄照片(例如每分钟),然后使用应用程序将图片拼接成视频。原理就这么简单.


    有两种方法可以做到这一点。如果是官方摄像头,实现起来就更加简单了.


    使用Raspistill的内置延时模式

    raspistill应用程序具有内置的延时模式,使用--timelapse(或-tl)命令行开关。

    切换之后的值是拍摄之间的时间(以毫秒为单位)。

    1. 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 表进行编辑:

    1. crontab -e
    复制代码

    这将询问您要使用哪个编辑器,或者在默认编辑器中打开。在编辑器中打开文件后,添加以下行以安排每分钟拍照.

    camera.sh 可以自己写个拍摄的脚本,其中2>&1是将错误输出输入到标准输出上.

    1. * * * * * /home/pi/camera.sh 2>&1
    复制代码

    保存并退出,您应该看到以下消息:

    1. crontab: installing new crontab
    复制代码

    确保您的脚本不保存使用相同文件名拍摄的每张照片。否则将每次覆盖原有的图片。


    将图像拼接在一起

    现在,您需要将照片拼接成一个视频。


    你可以在Pi上使用,mencoder非常赞, 但处理速度很慢。也可以将图像文件传输到台式计算机或笔记本电脑并在那里处理视频,那样会快一些,因为如果你拍摄了24小时的图片,每小时的每分钟拍摄5张图片的话,数据量也是大的惊人的.处理起来也是时间更长.但是如果在树莓派上通过脚本自行处理了,最后得到的视频就可以直接播放了. 如果你会推流处理,那还可以直接推到直播平台. 也是很好的.


    切换到包含所有图像的文件夹,并将文件名重定向到一个文本文件。例如:

    1. ls *.jpg > pics.list
    复制代码

    在RASPBERRY PI上

    虽然速度很慢(由于使用软件进行编码而不是使用Raspberry Pi硬件加速),但您可以使用各种可用工具将JPEG图像拼接在一起。其中有个软件叫avconv,需要安装, 安装好以后就可以拼接转码了。

    1. sudo apt-get install libav-tools
    复制代码

    现在,可以使用这些工具将JPEG文件转换为H264格式的视频文件。

    1. 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

    1. sudo apt-get install mencoder
    复制代码

    现在运行以下命令:

    1. 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

    效果是不是杠杠滴?


    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-4-18 13:47 , Processed in 0.119994 second(s), 15 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.