Last active
May 3, 2019 21:52
-
-
Save charliebritton/034c80e2e0bb671f6cf070d79b4dd809 to your computer and use it in GitHub Desktop.
Ad Processor V2 - Trims songs down to the perfect length for a 2 min advert and also updates the metadata. Requires ffmpeg & mp3info
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/zsh | |
# (c) Copyright 2018 Charlie Britton (chza.me). All rights reserved. | |
# PLEASE NOTE: You will need ffmpeg and mp3info for this script to work properly! | |
# On MacOS, install Homebrew and then run `brew install mp3info` and `brew install ffmpeg` | |
# This script has only been tested on MacOS, there is no guarantee that it will work on any other OS (especially Windows). | |
# Set the directory to work from, this should have the child folder ./original/ with all of your music. | |
WORKINGDIRECTORY="/Users/someone/process-songs" | |
# Don't process songs shorter than x seconds. Default set to a few more seconds than advert length. | |
SHORT=125 | |
# Don't process songs longer than x seconds (default of 5 minutes). | |
# This is because it could be processing a compilation of songs. | |
LONG=300 | |
# The actual length of the adverts you'll want. | |
# Default is 2 seconds over default SC advert length for fading with automation software. | |
LENGTH=122 | |
# Standard streaming bitrate. Also SC won't run ad stitching on some bitrates. Best left at 128k. | |
BITRATE=128000 | |
# Default title and artist the SC ad server recognises. Probably best left as is. | |
TITLE="Advert:" | |
ARTIST="Advert:" | |
# PLEASE DO NOT EDIT BELOW THIS LINE! ------------------------------------------ | |
CA=$(tput setaf 5) | |
CB=$(tput setaf 3) | |
CC=$(tput setaf 242) | |
# cd to Music Folder | |
cd $WORKINGDIRECTORY | |
# Welcome Message | |
clear | |
printf $CA"\n %%$CB Welcome to Ad Processor V2\n$CA %% $CB(c) Copyright 2018 Charlie Britton (chza.me)\n\n$CA %%$CB Please set the directory of the folder to process by editing this script, and then place your original media in a subfolder /original/.\n$CA %%$CB If have done that, please$CA press enter to continue$CB, or$CA CTRL+C to stop and set the process folder$CB.\n" | |
read keypress | |
# Setup Working Directories | |
printf $CA" i$CB Creating Folders... " | |
mkdir long > /dev/null 2>&1 | |
mkdir short > /dev/null 2>&1 | |
printf $CA"Done!\n" | |
# Don't want to be processing anything longet than 5 mins... | |
printf $CA" i$CB Moving long albums/compilations (>=$LONG seconds)... " | |
find original/ -name "*mp3" | | |
while IFS= read -r f; do | |
songlength=$(mp3info -p "%S" "$f"); | |
if [[ "$songlength" -ge $LONG ]]; then | |
mv $f long/; | |
fi; | |
done | |
printf $CA"Done!\n" | |
# Don't want to pad a song with silence either! | |
printf $CA" i$CB Moving short songs (<=$SHORT seconds)..." | |
find original/ -name "*mp3" | | |
while IFS= read -r f; do | |
songlength=$(mp3info -p "%S" "$f"); | |
if [[ "$songlength" -le $SHORT ]]; then | |
mv $f short/; | |
fi; | |
done | |
printf $CA"Done!\n\n" | |
printf $CA" %%$CB I am just about to begin processing the songs to: \n $CA|\n $CA|-$CB Length (s): $CA$LENGTH\n $CA|-$CB Bitrate (bits/s): $CA$BITRATE\n $CA|-$CB Title: $CA$TITLE\n $CA\`-$CB Artist: $CA$ARTIST\n\n$CA %% PLEASE NOTE:$CB This will take a while to process, so please leave your computer running whilst this operation completes.$CA\n %%$CB Please$CA press enter to continue$CB, or$CA CTRL+C to stop$CB.\n" | |
read keypress | |
printf $CA" i$CB Clearing out old adverts... " | |
rm -rf adverts | |
mkdir adverts | |
printf $CA"Done!\n" | |
sleep 0.5 | |
TOTAL=$(find original/*.mp3 | wc -l | tr -d '[:space:]') | |
COUNTER=0 | |
printf $CA" i$CB Starting processing of $TOTAL songs$CA NOW!\n\n" | |
cd original | |
for i in *.mp3; do | |
((COUNTER++)) | |
printf $CB" ($COUNTER/$TOTAL)$CC Processing $i... "; | |
ffmpeg -loglevel panic -i "$i" -acodec libmp3lame -ab $BITRATE -af 'afade=t=out:st=117:d=5' -metadata title=$TITLE -metadata artist=$ARTIST -write_id3v1 1 -t $LENGTH "../adverts/ADVERT_$i"; | |
printf $CA"Done!\n" | |
done | |
printf $CA"\n i$CB Finished processing songs!\n\n$CA %%$CB Thanks for using Ad Processor V2.\n\n" | |
exit 0 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
If you need to pick some random files from a list of music in a directory,
cd
into it and then use the following command to save 100 random file paths to a text file:Then, I use regexr to wrap the filenames in quotes and replace the newlines with spaces. I then copy and paste that into a
cp
commandcp <paste here> ~/Desktop/music/original
after making the directories.Once done, point the script to the
~/Desktop/music
and voila!