[Review] DJI Osmo Action 5 Pro
First, A photo of the latest DJI Action Camera:
And some test video:
It’s gonna be a companion for the next adventures
Definitely a huge upgrade in quality to the RPi Camera I tested
DJi OA5Pro Video Quality
Very simple: From 1080p, to 4K videos.
Ratios 4:3 or 16:9, which is the one you one to use for Youtube, for example.
This is a 2.7K Video example, meaning 2688x1512 at 50FPS, during the day:
sudo apt install mediainfo
mediainfo outputvideo.MP4 #ViesiejaiNightWalk.mp4
Check video resolution, fps and more with this script
How to edit Videos
For simple cuts, I found easier to use ShotCut:
Shotcut with OA5 Pro📌
sudo snap install shotcut --classic
- Open Shotcut, add the .mp4 file (not the DJI’s LRF - Low Resolution File used for the video playback)
- On the top left side - add filter: audio mute / brightness / …
- When you are done with the changes: CTRL+E to export as .mp4
KDEnlive with OA5Pro 📌
#sudo snap install shotcut --classic
- Open Shotcut, add the .mp4 file (not the DJI’s LRF - Low Resolution File used for the video playback)
- On the top left side: add filter: audio mute
Conclusions of Osmo Action 5 Pro
Make sure to explore the resolutions and modes.
It can do photo and video. But for photo I still prefer the Pixel
There is the possibility to record at FHD 1080p@240fps, but not with wide mode, for example.
Video Modes
- TimeLapse 1h/3s Sunset Scene - 1080p@30 aka 1080P30/3s- It makes 1 real hour to be 40s in the video and 93mb - 2.3mb/s
- It can also be 2.7k and 4k
- Hyperlapse during the night was having some glitches
- TimeLapse 1h/3s Sunset Scene - 1080p@30 aka 1080P30/3s- It makes 1 real hour to be 40s in the video and 93mb - 2.3mb/s
You are required to install DJI Mimo app at least to get started.
- The App allow you to activate the warranty + transfer files (no need for cable!) + receive firmware updates
- The app is neither in Google not Apple store…❗
- I would keep the .apk handy, as per my experience with the DJI Tello Drone
- The battery is 1950mah and charges really fast 👌
- From 10% to 80% - ~30 min
- From 10% to 100% - ~40 min
- If you leave the battery connected, it will loose ~2% charge during a night
Battery Drain Tests 📌
0% to 60% at 23W
Time = Energy for 60% ÷ 23W
60% to 85% at 17W
Time = Energy for 25% ÷ 17W
85% to 100% at 9W
Time = Energy for 15% ÷ 9W
Total Time
Total Time = Time (0-60%) + Time (60-85%) + Time (85-100%)
~ 30 min
Memory wise
- The built in is ~45GB 👌
- I added a Kingston SD 128GB CL10 (up to 80mb/s reading and 10 mb/s of writing - which might be to slow)
- It is enough to record in there video at 1080p@30fps without micro-stops
- 1080p@30fps is around 4mb/s in size
- FHD - 1080@60fps/RS+/UW, its ~5mb/s and also works
- Even 2.7k@30fps/RS/UltraWide works! It’s ~5.6mb/s in average size
- 2.7k@30/RS+/UW, but I prefered the quality of the RS mode
- 4K@25/rs/uw
- And I got to work in the SD 4K@48/ / at ~7.5 mb/s
- 4k@100/RS+/UW - ~ 10min ~ 10% battery drained
- When transfering files to my laptop I saw up to 90MB/s speed (reading from SD, writing to SSD)
Transfering files:
- Via the Mimo App
- Via usb-c (turn ON the camera first and then connect the cable)
- You will see one drive for the internal card and another for your SD card if any
- Transfer speed is ~25mb/s from the internal SD card. To the ThinkPad I saw ~28
File size:
- Super night mode FHD (Full HD) 1920x1080@30fps has a 29.5mb/s video bitrate, making a 4.4gb for 20min duration.
- Super night mode with UHD (Ultra High Definition) 3840x2160@30fps - 4k@30fps makes a ~8gb file for 20 min duration and used 20% battery - the super night mode needs stabilization ON
- 2688x1522 resolution, aka 2.7K
As you can see in this video, where Im just walking:
My Workflow with the DJI OA5-Pro
I got inspired by this post: https://www.vanwerkhoven.org/blog/2021/photography-image-processing-workflow/
And this is what I created so far…
Scaling video resolution with - Upscayl + Shotcut 📌
Delete the LRF files:
du -h --max-depth=1 #check space
find . -name "*.LRF" -type f -delete #cleaning .LRF
And get VLC to see them:
sudo apt update
sudo apt install vlc
See info about .MP4’s in your folder:
Video CLI ordering files, editing - v1 with FFmpeg 📌
Get the pkg installed:
sudo apt install ffmpeg
#find . -type f -name "*.MP4" -exec ffprobe {} \;
#find . -type f -name "*.MP4" -exec ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 {} \;
#check .MP$ info recursively
find . -type f -iname "*.mp4" -exec bash -c '
for file; do
name=$(basename "$file")
duration=$(ffprobe -v error -select_streams v:0 -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 "$file")
size=$(stat --format="%s" "$file")
resolution=$(ffprobe -v error -select_streams v:0 -show_entries stream=width,height -of csv=s=x:p=0 "$file")
# FPS extraction
fps_raw=$(ffprobe -v error -select_streams v:0 -show_entries stream=r_frame_rate -of csv=p=0 "$file")
fps=$(echo "$fps_raw" | awk -F "/" '"'"'{ if ($2) print $1/$2; else print $1 }'"'"')
# Bitrate extraction in kbps
bitrate_bps=$(ffprobe -v error -show_entries format=bit_rate -of default=noprint_wrappers=1:nokey=1 "$file")
bitrate_kbps=$(echo "scale=2; $bitrate_bps / 1000" | bc -l)
# Average MB/s calculation
avg_mbps=$(echo "scale=2; $bitrate_bps / 1000000000" | bc -l)
echo "Name: $name - Duration: ${duration}s - Size: ${size} GB - Resolution: $resolution - FPS: $fps - Bitrate: ${bitrate_kbps}kbps - Avg MB/s: ${avg_mbps}MB/s"
done
' bash {} +
More info about your .MP4 Videos
for video in *.MP4; do
echo "File: $video"
mediainfo "$video" | grep -E 'Rotation|Width|Height|Format|Duration'
done
or with:
for video in *.MP4; do
echo "File: $video"
ffprobe "$video"
done
I ordered them like so: chmod +x organize_videos.sh ./organize_videos.sh
#!/bin/bash
#IT WILL MOVE THEM TO THE LOCATION WHERE YOU RUN THIS
# Check for ffprobe installation
if ! command -v ffprobe &> /dev/null; then
echo "ffprobe could not be found. Please install ffmpeg."
exit 1
fi
# Find and organize .mp4 files based on resolution
find . -type f -iname "*.mp4" | while read -r file; do
name=$(basename "$file")
resolution=$(ffprobe -v error -select_streams v:0 -show_entries stream=width,height -of csv=s=x:p=0 "$file")
# Construct the folder name based on resolution
folder_name="$resolution"
# Create the destination folder if it doesn't exist
mkdir -p "$folder_name"
# Move the file to the destination folder
mv "$file" "$folder_name/"
# Output information about the file
echo "Moved: $name to $folder_name"
done
or creating the subfolder in their find location….but not today.
Let’s jump to editing:
- Cut a video with KDenLive
- When ready, hit CTRL+Enter to render
And this was soooo slow, can I just join some videos together?
YES, CLI can, thanks to ffmpeg pkg
ls *.MP4 | sed "s/^/file '/; s/$/'/" > file_list.txt #add .mp4 of current folder to a list
#du -sh ./* #check their size
#generate a video with them
ffmpeg -f concat -safe 0 -i file_list.txt -c copy output_video.mp4
#ffmpeg -f concat -safe 0 -i file_list.txt -c:v copy -an output_video.mp4 #silenced video
#ffmpeg -i output_video.mp4 -filter:v "setpts=PTS/4" -an fast_output_video.mp4 #
Check what was created: in this case, the output_video.mp4
file
size=$(ffprobe -v error -select_streams v:0 -show_entries format=size -of default=noprint_wrappers=1:nokey=1 output_video.mp4) && \
duration=$(ffprobe -v error -select_streams v:0 -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 output_video.mp4) && \
fps=$(ffprobe -v error -select_streams v:0 -show_entries stream=r_frame_rate -of default=noprint_wrappers=1:nokey=1 output_video.mp4 | bc) && \
resolution=$(ffprobe -v error -select_streams v:0 -show_entries stream=width,height -of csv=p=0:s=x output_video.mp4) && \
echo "File: output_video.mp4" && \
echo "Size: $(awk "BEGIN {printf \"%.2f GB\", $size / (1024^3)}")" && \
echo "Duration: $(awk "BEGIN {printf \"%.2f minutes\", $duration / 60}")" && \
echo "Resolution: $resolution" && \
echo "FPS: $fps"
- It works fine as we have videos with same resolution on each folder already
- If FPS are different, it will preserve the lower one
Before going to YT, I like to have Brave Browser:
sudo snap install brave
You will also be one step closer of Web3
- Videos are ready! Let’s share videos!
Video Editing Software - Setup 📌
Lets get some apps for content creation, together with dev tools: Blender, OpenShot, KDenlive…
#!/bin/bash
# Function to prompt the user for yes/no input
prompt_user() {
local prompt="$1"
local answer
while true; do
read -p "$prompt (y/n): " answer
case "$answer" in
[Yy]* ) return 0;;
[Nn]* ) return 1;;
* ) echo "Please answer y or n.";;
esac
done
}
# Install curl if not installed
if ! command -v curl &> /dev/null; then
echo "Installing curl..."
sudo apt update && sudo apt install -y curl
fi
# Prompt to install content editing apps (Kdenlive, Shotcut)
if prompt_user "Do you want to install content editing apps (Kdenlive, Shotcut)?"; then
echo "Installing content editing apps..."
# Add Flathub repository
echo "Adding Flathub repository..."
flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
# Install Kdenlive
echo "Installing Kdenlive..."
flatpak install -y flathub org.kde.kdenlive
# Install Shotcut via Snap
echo "Installing Shotcut..."
sudo snap install shotcut --classic
# Install missing JACK audio libraries for Shotcut
echo "Installing JACK audio libraries for Shotcut..."
sudo apt install -y libjack-jackd2-0 jackd
else
echo "Skipping content editing apps installation."
fi
# Prompt to install development apps (VSCode, VSCodium, Python, Git, Node.js, Go, Hugo)
if prompt_user "Do you want to install development apps (VSCode, VSCodium, Python, Git, Node.js, Go, Hugo)?"; then
echo "Installing development apps..."
# Install VSCode and VSCodium
echo "Installing Visual Studio Code..."
sudo apt update
sudo apt install -y software-properties-common apt-transport-https wget
wget -q https://packages.microsoft.com/keys/microsoft.asc -O- | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://packages.microsoft.com/repos/vscode stable main"
sudo apt update
sudo apt install -y code
echo "Installing VSCodium..."
sudo snap install codium --classic
# Install Git
echo "Installing Git..."
sudo apt install -y git
# Install Python
echo "Installing Python..."
sudo apt install -y python3 python3-pip
# Install NVM, Node.js, and npm
echo "Installing Node.js and npm using NVM..."
if ! command -v nvm &> /dev/null; then
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.38.0/install.sh | bash
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"
fi
nvm install 20.12.2
nvm use 20.12.2
# Verify Node.js and npm
echo "Node.js version: $(node --version)"
echo "npm version: $(npm --version)"
# Install Go
echo "Installing Go..."
sudo snap install go --classic
echo "Go version: $(go version)"
# Install Hugo
echo "Installing Hugo..."
wget https://github.com/gohugoio/hugo/releases/download/v0.108.0/hugo_0.108.0_linux-amd64.deb
sudo dpkg -i hugo_0.108.0_linux-amd64.deb
echo "Hugo version: $(hugo version)"
else
echo "Skipping development apps installation."
fi
# Final version check and summary
echo "Installation complete. Summary of versions installed:"
# Content editing tools versions
if prompt_user "Would you like to verify the versions of content editing tools installed?"; then
echo "Kdenlive: $(flatpak run org.kde.kdenlive --version 2>/dev/null | head -n 1)"
echo "Shotcut: $(shotcut --version 2>/dev/null || echo 'Shotcut is installed but the version command is not supported.')"
fi
# Development tools versions
echo "VSCode version: $(code --version | head -n 1)"
echo "VSCodium version: $(codium --version | head -n 1)"
echo "Git version: $(git --version)"
echo "Python version: $(python3 --version)"
echo "Go version: $(go version)"
echo "Hugo version: $(hugo version)"
echo "Node.js version: $(node --version)"
echo "npm version: $(npm --version)"
git config --global user.name "JAlcocerT"
git config --global user.email "contact@jalcocertech.xyz"
FAQ
- How to view HEIC Images on Linux
- How to reduce image quality in Linux to upload as YT Videocaption:
ffmpeg -i PXL_20241030_115355466.jpg -q:v 3 compressed_PXL_20241030_115355466.jpg
#convert PXL_20241031_124037774.jpg -quality 85 compressed_PXL_20241031_124037774.jpg
Other topics related to Photo/Video
Watermark pictures with Python and Pillow 📌
Scaling video resolution with - Upscayl + Shotcut 📌
How to Combine .mp4 Videos with Python MoviePy 📌
You will need the MoviePy Package
from moviepy.editor import VideoFileClip, concatenate_videoclips
Thanks to NeuralNine YT Video
Very Interesting way to make video animations with python and even vector animations
Sometimes we just have a hyperlapse video or a video that looks good visually, but the audio is not the best.
For those we can just silence all the volume and just put some music on top
Audio for Videos - Free Options 📌
In Youtube Studio, you also have a library for audio that you can use freely on your videos.
I tried freepd as per this reddit post
You can find open-source, royalty-free, or Creative Commons-licensed music from several platforms that offer chill music for video projects
1. Free Music Archive (FMA)
- Website: https://freemusicarchive.org
- FMA offers a vast collection of free music under Creative Commons licenses, which means you can use music for your videos based on the licensing terms (some require attribution).
- Genres: Many genres, including chill, ambient, and downtempo music.
2. YouTube Audio Library
- Website: https://www.youtube.com/audiolibrary/music
- YouTube provides a large collection of free music and sound effects that you can use for personal and commercial projects, even outside of YouTube.
- Genres: Chill, ambient, and various others.
- Note: Some tracks require attribution, so always check the licensing information.
3. ccMixter
- Website: https://ccmixter.org
- A community music remixing site featuring tracks licensed under Creative Commons. Many artists share their music for use in videos, often for free, as long as you provide credit.
- Genres: Lots of ambient, electronic, chill, and experimental tracks.
- Licensing: Pay attention to the specific Creative Commons license for each track (e.g., some require attribution or are non-commercial).
4. Incompetech
- Website: https://incompetech.com
- Kevin MacLeod’s music collection, with a wide range of genres, is available under Creative Commons. You can find many chill and ambient tracks here.
- Genres: Chill, ambient, background music, etc.
- Licensing: Free to use with attribution. A paid option allows use without attribution.
5. Bensound
- Website: https://www.bensound.com
- Bensound offers a collection of royalty-free music, including a lot of chill, relaxing, and ambient tracks.
- Genres: Chill, ambient, cinematic, electronic.
- Licensing: Free to use with attribution for non-commercial use. Paid licenses available for commercial use.
6. Jamendo Music
- Website: [https://www.jamendo.com](https://www.jamendo.com/start](https://www.jamendo.com/start)
- Jamendo provides a large collection of royalty-free tracks for use in personal and commercial projects. They offer free music for non-commercial projects and paid licenses for commercial use.
- Genres: Chill, ambient, electronic, acoustic.
- Licensing: Free for personal use, and commercial licenses are available for purchase.
7. Audionautix
- Website: https://audionautix.com
- Audionautix offers free music tracks composed by Jason Shaw, licensed under Creative Commons. You can filter by mood and genre to find chill or relaxing tracks.
- Genres: Chill, acoustic, ambient, and more.
- Licensing: Free with attribution under Creative Commons 4.0.
8. SoundCloud (Creative Commons Music)
- Website: https://soundcloud.com
- Many independent artists on SoundCloud publish their music under Creative Commons licenses. You can search for music tagged with CC licenses by using the “Creative Commons” filter.
- Genres: Diverse, with a good selection of chill, electronic, ambient, and more.
- Licensing: Check the license of each track individually.
9. Musopen
- Website: https://musopen.org
- Musopen offers free classical music, which can add a relaxing, ambient, or chill vibe to videos. All music is public domain or Creative Commons licensed.
- Genres: Classical, instrumental.
- Licensing: Most tracks are public domain or licensed for free use.
10. Pixabay Music
- Website: https://pixabay.com/music/
- Pixabay has a growing collection of royalty-free music available for use in videos, completely free for commercial and non-commercial projects.
- Genres: Chill, electronic, ambient, acoustic.
- Licensing: Free to use without attribution (though attribution is appreciated).
Key Points:
- Always check the specific license of each track, especially if you’re using it for commercial purposes.
- If the track requires attribution, make sure to include proper credits as specified by the artist.
These resources should help you find the perfect chill music for your video project! Let me know if you need any specific help with any of them.
Video as a Code
To create video from code, you can use the React Framework - Remotion
A video is even better than a Dashboard, like FlexDashboards.
And much much better than just plaind ata
Outro
For adventures:
- https://github.com/Flomp/wanderer - The trail catalogue that makes your GPS data searchable
wanderer is a self-hosted trail database. You can upload your recorded tracks or create new ones and add various metadata to build an easily searchable catalogue.
Spliit - An alternative to Splitwise / Settleup where you dont have to register.
Alternative Software for Action cams - https://github.com/KonradIT/CamControl
Open source app to connect with popular action cameras, replacing your vendor’s closed source app system.