[Review] DJI Osmo Action 5 Pro

[Review] DJI Osmo Action 5 Pro

October 5, 2024

First, A photo of the latest DJI Action Camera:

DJI Osmo Action 5 Pro

And some test video:

ℹ️
The Pixel 8 Pro is behaving perfectly for videos, but I wanted to try sth different.

It’s gonna be a companion for the next adventures

Karting Adventure

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:

ℹ️
A regular TV can be 4K UHD, meaning 3840x2160. Be aware when recording that it can do x2160 or other, depending if you choose W/UW and so on
sudo apt install mediainfo
mediainfo outputvideo.MP4 #ViesiejaiNightWalk.mp4

Check video resolution, fps and more with this script

How to edit Videos

ℹ️
How to setup your PC for content creation: OBSStudio, Shotcut, KDenLive…

For simple cuts, I found easier to use ShotCut:

Shotcut with OA5 Pro📌
sudo snap install shotcut --classic
  1. Open Shotcut, add the .mp4 file (not the DJI’s LRF - Low Resolution File used for the video playback)
  2. On the top left side - add filter: audio mute / brightness / …
  3. When you are done with the changes: CTRL+E to export as .mp4
KDEnlive with OA5Pro 📌
#sudo snap install shotcut --classic
  1. Open Shotcut, add the .mp4 file (not the DJI’s LRF - Low Resolution File used for the video playback)
  2. 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
  • 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
ℹ️
As they required email registration, I put to test how seriously DJI takes privacy by using addy.io email aliases (ex-anonaddy)
  • 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 📌
  1. 0% to 60% at 23W

    • Time = Energy for 60% ÷ 23W
  2. 60% to 85% at 17W

    • Time = Energy for 25% ÷ 17W
  3. 85% to 100% at 9W

    • Time = Energy for 15% ÷ 9W
  4. 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
⚠️
Stabilization is great during the day, but not during the night.

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…

ℹ️
I decided to create this repo with the scripts
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:

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

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

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 📌
Thanks to this Freeware Focus fantastic video for the idea
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

ℹ️
This is the repo I use for my Video Editing WorkFlow, with Remotion Coming soon

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:

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.

Open source app to connect with popular action cameras, replacing your vendor’s closed source app system.