Note I've switched back to Android for the time being. I do have access to an iPhone for testing, but likely won't be focusing on developing this much further.
Convert Apple Live Photos into Google Motion Photos commonly found on Android phones.
As of right now, this script only has one dependency, py3exiv2
. Unfortunately
this requires building a C++ library to install, so you need to install a C++ toolchain.
Using Ubuntu as an example:
sudo apt-get install build-essential python-all-dev libexiv2-dev libboost-python-dev python3 python3-pip python3-venv
python3 -m pip install -r requirements.txt
- Install Termux from the F-Droid App store
- Install the following packages within Termux in order to satisfy the dependencies for
pyexiv2
:
'pkg install python3'
'pkg install git'
'pkg install build-essential'
'pkg install exiv2'
'pkg install boost-headers'
git clone https://github.com/mihir-io/MotionPhotoMuxer.git
python3 -m pip install -r MotionPhotoMuxer/requirements.txt
This should leave you with a working copy of MotionPhotoMuxer directly on your Pixel/other Android phone.
You may want to make sure Termux has the "Storage" permission granted from within the system settings, if
you plan on writing the output files to the /sdcard/
partition.
usage: MotionPhotoMuxer.py [-h] [--verbose] [--dir DIR] [--recurse] [--photo PHOTO] [--video VIDEO] [--output OUTPUT]
Merges a photo and video into a Microvideo-formatted Google Motion Photo
optional arguments:
-h, --help show this help message and exit
--verbose Show logging messages.
--dir DIR Process a directory for photos/videos. Takes precedence over --photo/--video
--recurse Recursively process a directory. Only applies if --dir is also provided
--photo PHOTO Path to the JPEG photo to add.
--video VIDEO Path to the MOV video to add.
--output OUTPUT Path to where files should be written out to.
A JPEG photo and MOV or MP4 video must be provided. The code only does simple
error checking to see if the file extensions are .jpg|.jpeg
and .mov|.mp4
respectively, so if the actual photo/video encoding is something funky, things
may not work right.
Note The output motion photo tends to work more reliably in my experience if the input video is H.264 rather than HEVC.
This has been tested successfully on a couple photos taken on an iPhone 12 and uploaded to Google Photos through a Pixel XL, but there hasn't been any extensive testing done yet, so use at your own risk!
This wouldn't have been possible without the excellent writeup on the process of working with Motion Photos here.