#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