Collection of some points regarding generation of timelapse pictures/videos using Linux. Example, taken with Galaxy S7.
Taking the single pictures: dedicated camera
- First thought: using existing camera, my Sony RX100, first generation. Unfortunately it is not supporting remote control for taking pictures.
- gphoto2 is the software one wants to use.
- I have no supported camera. Which one to get?
- Inspect gphoto's supported devices . If your camera is listed but has nothing under “Additional Capabilities”, it's probably just supporting file download, not taking images.
- Example from “gphoto2 –summary”
- For “GoPro HERO5 Black”: Device Capabilities: File Download, File Deletion, File Upload, No Image Capture, No Open Capture, No vendor specific capture
- For “Nikon COOLPIX A100” (usb id 04b0:0367): Device Capabilities: File Download, File Deletion, File Upload, Generic Image Capture, No Open Capture, No vendor specific capture, Nikon Wifi support
Taking the single pictures: Android phone
- Using the Android phone looks like a nice alternative. My Samsung Galaxy S7 has a good camera.
- Connect via usb, shoot pictures with this:
adb shell "am start -a android.media.action.IMAGE_CAPTURE" \ && sleep 1 \ && adb shell "input keyevent 27"
- My final loop:
while :; do echo -n "### "; date; adb shell "am start -a android.media.action.IMAGE_CAPTURE; sleep 1; input keyevent 27"; echo "### done"; sleep 58; # turned out the full loop was slightly <60sec done
- I have the phone connected to wlan, share the pictures folder with the connected Linux system via syncthing. With this, I could even move the pictures out of the folder, if storage is a problem.
- the screen stays always on, the phone heats up. Running 'adb shell top', I saw the camera app and screen handling as top users.
- the gallery app was indexing all of the pictures, and I have no way of enforcing reindex after I removed the pictures from the phone.
processing the single images
Reading timestamp from the exif-field and adding it to the picture, and resize to fullhd:
mkdir tmp && cd tmp for i in ../2018*.jpg; do convert $i -fill white -undercolor '#00000080' \ -gravity Southeast -pointsize 48 -annotate +0+5 \ $(exif $i |grep 'Date and Time '|sed -e 's,.*|,,' \ -e 's, ,_,' -e 's,:*$,,') \ -resize 1920x $(echo $i|sed -e 's,\.,,'); done
generating the video
mencoder mf://2018*.jpg -mf fps=25 -nosound -noskip -ovc copy -o mencoder2.avi
Problem with that: when watching, the format did jump around, bigger/smaller. 'mplayer -fs mencoder2.avi' worked ok.
Leave out the '-s 1920×1080' if you already resized with ImageMagick before.
ffmpeg -pattern_type glob -i "2018100*.jpg" -c:v libx265 \ -s 1920x1080 -movflags +faststart ffmpeg_1920x_x265.mkv