Samsung Galaxy S7 and S8 phones have a new way to capture pictures called Motion Photo. When shot in this mode, with each picture, it also records a short video before the picture was captured.
You can view this short video when you view your pictures using the Gallery app of the phone, but when you backup these pictures to your computer, you lose access to them. Below, I will explain a solution which you can use to extract these videos. You basically need a terminal from which you can run
Logic is quite simple. The video and the photo are stitched on the same file. If you open the picture using a hex editor, towards the end of the file, you will see a portion of binary data that starts with text
MotionPhoto_Data which contains the video.
So, step 1 is to locate the position of this text. You can find this as follows.
grep -abo "MotionPhoto_Data" ./path/to/picture.jpg | cut -d: -f1
The flags specified in the
grep mean the following:
-aprocess the binary of the file as text
-bprints the byte offset
-oprints out matching text
It’s trying to extract the byte offset of the file where
MotionPhoto_Data can be found. Then,
cut is used to remove other extra bits from the matched text so we can have only the number of offset.
Next step is to extract all the data from the file after the position found in step 1. Let’s assume it was
8000. Then, the position we want to extract from is after the text
MotionPhoto_Data which is 16 characters long, so from
8017. Then, in our terminal, we can do the following to extract the video
tail -c +8017 ./path/to/picture.jpg > ./path/to/picture.mp4
And, that’s it. Now, you can open your video.
I have wrapped all this logic into a small script, which can be downloaded and used instantly.
Install the script, with the following command
# curl -o /usr/local/bin/extractVideo_SamsungMotionPhoto.sh https://raw.githubusercontent.com/starx/SamsungMotionPhotoVideoExtractor/master/extractVideo_SamsungMotionPhoto.sh # chmod +x /usr/local/bin/extractVideo_SamsungMotionPhoto.sh
And extract all the videos in a path, using the following command.