问题描述
我有一个可用作v4l2设备的网络摄像头。
捕获stop-motion或time-lapse视频的最便捷方法是什么?
N.B.
stop-motion和time-lapse相关但在概念上有所不同。
在Time-lapse中,您可以按固定的时间间隔拍摄场景照片,然后将其组合到视频中(看起来真的非常快)。
Stop-motion是您控制场景并为所做的每个更改拍摄图像以形成动画(例如Wallace和Grommit)的地方。
time-lapse的应用程序需要能够按设定的间隔拍照。
最佳方法
捕获不计其数的图像。
第一步是捕获图像。假设您想每10秒拍摄一张照片并将其保存到桌面上的目录中
mkdir ~/Desktop/cap
cd ~/Desktop/cap
我们使用streamer
进行捕获,因此让我们安装它:
sudo apt-get install streamer
现在我们要捕捉
streamer -o 0000.jpeg -s 300x200 -j 100 -t 2000 -r 1
-t
是我们要捕获的帧数。 -r
是每秒的帧数。因此,这应该每秒抓取一帧。如果将其压缩为30fps视频,则一分钟的捕获将变为2秒的视频。您将需要根据要输出的视频量来适当调整它。
该行将为您提供2000张图像,录制将花费半小时,并且以30fps的速度生成仅1分钟的视频。
放在一起
我将使用ffmpeg
。有多种不同的组合方式,包括mencoder
,但我更喜欢ffmpeg
的生活观。安装它(sudo apt-get install ffmpeg
)后,只需将其删除:
ffmpeg -r 30 -i %04d.jpeg -s hd480 -vcodec libx264 -vpre hq time-lapse.mp4
那里的质量设置与我的网络摄像头不一样,因此您可能想更多地使用这些选项以获得更好的编码,但这应会生成一个不错的30fps视频,并以x264压缩。
您可能想使用帧速率(-r
),但我不会低于15fps。
次佳方法
要从网络摄像头捕获每X秒钟的时间,请使用动作。
安装motion
sudo apt-get install motion
或sudo aptitude install motion
每X秒配置一次运动
sudo nano /etc/motion/motion.conf
将变量minimum_frame_time和snapshot_interval更改为与网络摄像头拍照相同的秒数。
10分钟= 600秒20分钟= 1200秒30分钟= 1800秒1小时= 3600秒2小时= 7200秒,依此类推…
用sudo motion
运行运动用CTRL
+ C
停止运动
注意-将motion.conf配置为将文件保存在默认目录/tmp以外的其他目录中。例如您的主文件夹。由于进入/tmp需要更多特权。您还可以在motion.conf中找到许多有用的选项,这些选项可能会满足您的其他许多需求。
第三种方法
gTimelapse(Download Link)
An application for capturing images to generate timelapse videos, built on gPhoto2 and wxWidgets libraries.
编译指令
从sourceforge网站下载源代码
在终端中输入以下内容:
cd Downloads
gunzip gtimelapse-0.1.tar.gz
tar -xvf gtimelapse-0.1.tar
cd gtimelapse
sudo apt-get install build-essential libgphoto2-2-dev libwxbase2.8-dev libwxgtk2.8-dev gphoto2
./configure
make
sudo make install
运行应用程序类型
gtimelapse &
n.b. 1个
gphoto2 --list-cameras | more
n.b. 2
有关更多有用的信息,请参见此blog
列出应用程序支持的所有兼容设备
n.b. 3
我已经读过gphoto2不支持网络摄像头-无论如何,只要有人想用一台像样的数码相机而不是网络摄像头来尝试此答案,我将使该答案始终可见。