Skip to content

Instantly share code, notes, and snippets.

@troutcolor
Last active December 15, 2019 06:31
  • Star 2 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
Star You must be signed in to star a gist
Save troutcolor/a6a82ceeb0dafc5f2c32edb09dfe11ac to your computer and use it in GitHub Desktop.
#script to download pile of flickr images and make a movie like the pummelvision service # example https://vimeo.com/196182638 #needs ffmpeg sox & jhead #needs sips so a mac I think
#!/bin/bash
#2018 additions
#needs jhead which I installed with homebrew
#jhead auto rotates images according to the exif Orientation which ffmpeg does not respect
#if the photos do not need rotated then you could remove the jhead line below
#sox to loop audio. I installed with homebrew
#my video was longer than the audio, I just create a loop of 3 with sox and use that. Could up the number iif you have more photos than me
# set -ex bail if something fails and print lines as they are executed
set -ex
#script to download pile of flickr images and make a movie like the pummelvision service
# example https://vimeo.com/196182638
#needs ffmpeg
#needs sips so a mac I think
#Fill in the param any except the APIKEY can be empty
# this will take some time!
APIKEY='YOUR-API-KEY-HERE'
USERID='71428177%40N00'
SINCEDATE='2018-01-01'
#unix timestamp or mysql datetime
TAGS=''
NUMPHOTOS='500'
#max photos 500
#Need to know how many pages there are if you want more that the first 500 images
PAGES='2'
PHOTOSORT='date-posted-desc'
#date-posted-desc
#date-posted-asc
#date-posted-desc
#date-taken-asc
#date-taken-desc
#interestingness-desc
#interestingness-asc
#relevance
FRAMESPERSECOND=2
#### END OF SETTINGS ####
#Make a temp directory to work in
TEMPDIR=$(mktemp -d -t 'mytmpdir')
HERE=$( pwd )
trap "{ cd $HERE ; rm -rf $TEMPDIR; exit 255; }" SIGINT
cd $TEMPDIR
ALLFILELIST=""
for counter in `seq 1 $PAGES`;
do
searchurl="https://api.flickr.com/services/rest/?method=flickr.photos.search&api_key=${APIKEY}&user_id=${USERID}&media=photos&min_taken_date=${SINCEDATE}&text=${TAGS}&extras=url_o&sort=${PHOTOSORT}&per_page=${NUMPHOTOS}&page=${counter}&format=rest"
FILELIST=$(curl "$searchurl" | sed -ne 's/.*\(http[^"]*\).*/\1/p')
ALLFILELIST="$ALLFILELIST $FILELIST"
done
echo $ALLFILELIST
a=`echo $ALLFILELIST | wc -w`
let a=a+1
new=$(printf "%04d.jpg" "$a")
curl -o $new https://farm9.staticflickr.com/8718/16191965623_9dacf5c640_o_d.jpg > $new
for i in $ALLFILELIST ; do
let a=a-1
new=$(printf "%04d.jpg" "$a")
curl -o $new $i
done;
sips --resampleHeight 768 *.jpg
sips --padToHeightWidth 768 1024 *.jpg
jhead -autorot *.jpg
ffmpeg -framerate 5 -i %04d.jpg -c:v libx264 flickr.mp4
ffmpeg -framerate ${FRAMESPERSECOND} -i %04d.jpg -c:v libx264 flickr.mp4
PS3='Please enter your choice: '
options=("Rolling at 5" "Lagoa v2" "Off to Osaka" "Hyper Fun" "Scattershot")
select opt in "${options[@]}"
do
case $opt in
"Rolling at 5")
echo "downloading."
curl -L http://incompetech.com/music/royalty-free/mp3-royaltyfree/Rollin%20at%205.mp3 > background.mp3
break
;;
"Lagoa v2")
echo "downloading Lagoa v2"
curl http://incompetech.com/music/royalty-free/mp3-royaltyfree/Lagoa%20v2.mp3 > background.mp3
break
;;
"Off to Osaka")
echo "downloading Off to Osaka"
curl -L http://incompetech.com/music/royalty-free/mp3-royaltyfree/Off%20to%20Osaka.mp3 > background.mp3
break
;;
"Hyper Fun")
echo "downloading Hyper Fun"
curl http://incompetech.com/music/royalty-free/mp3-royaltyfree/Hyperfun.mp3 > background.mp3
break
;;
"Scattershot")
echo "downloading Scattershot"
curl http://incompetech.com/music/royalty-free/mp3-royaltyfree/Scattershot.mp3 > background.mp3
break
;;
*) echo invalid option;;
esac
done
sox -e ima-adpcm background.mp3 looped_audio.mp3 repeat 3
ffmpeg -i flickr.mp4 -i looped_audio.mp3 -map 0 -map 1 -codec copy -codec:a aac -strict experimental -b:a 192k -shortest flickr-audio.mp4
mv "$TEMPDIR/flickr-audio.mp4" $HERE
cd $HERE
#rm -rf $TEMPDIR
open $TEMPDIR
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment