#!/bin/bash # ogg2wav # # Convert .ogg files in downloads/ to .wav files. # It checks sha1 before converting, re-downloads if bad. # Dependency: vorbis-tools sox # # Usage: # ogg2wav # Example: # ogg2wav OGGDECOPT="" cd download/ || exit # Compile a list of ogg files (NOTE: THIS WILL BREAK AS ARCHIVE GROWS XXX) echo "Total audio files: `ls -1 */satnogs_*.ogg | wc -l`" for i in 13*/satnogs_*.ogg do OBSID=`dirname $i` # Go into directories with audiofiles echo $OBSID cd $OBSID # See if there is an archive.org XML file, if not, download it. XMLURL="https://archive.org/download/satnogs-observation-$OBSID/satnogs-observation-$OBSID""_files.xml" XMLFILE=`basename "$XMLURL"` [ ! -f "$XMLFILE" ] && \ curl \ --location \ --silent \ --http2 --ipv4 \ --remote-time \ --output $XMLFILE \ $XMLURL \ && sleep `echo $((0 + RANDOM % 1))` # Get name of audio file. AUDIOURL=`cat $OBSID.json | jq --compact-output '.[0] | {archive_url}' | grep ogg | cut -f 2- -d : | sed -e 's/}//g' -e 's/http:/https:/g' -e 's/"//g'` AUDIOFILE=`basename "$AUDIOURL"` # Get sha1 for audio file. XXX sgrep dependency XXX AUDIOXMLSHA1=`sgrep -g xml \ '""' \ "$XMLFILE" | \ grep "" | \ sed -e 's/.*//' -e 's/<\/sha1>//'` AUDIOFILESHA1=`sha1sum $AUDIOFILE | cut -f 1 -d " "` WAVFILE="`basename $AUDIOFILE .ogg`.wav" AUDIOFILESEC=`soxi -D $AUDIOFILE` WAVFILESEC=`soxi -D $WAVFILE` echo -e -n "XML: $AUDIOXMLSHA1\nFile: $AUDIOFILESHA1 " # Is OGG SHA1 checksum good? if [ "$AUDIOXMLSHA1" = "$AUDIOFILESHA1" ] ; then # Is WAV file same length as OGG? (or better way to see if WAV is OK? if [ "$AUDIOFILESEC" = "$WAVFILESEC" ] ; then echo "good wav" else echo "Encode" echo "oggdec $OGGDECOPT $AUDIOFILE" ls -hl $AUDIOFILE *wav nice oggdec $OGGDECOPT $AUDIOFILE fi else echo "Bad, re-downloading $AUDIOURL" rm "$AUDIOFILE" curl \ --location \ --silent \ --http2 --ipv4 \ --remote-time \ --output $AUDIOFILE \ $AUDIOURL \ && sleep `echo $((0 + RANDOM % 1))` AUDIOFILESHA1=`sha1sum $AUDIOFILE | cut -f 1 -d " "` echo -e -n "XML: $AUDIOXMLSHA1\nFile: $AUDIOFILESHA1 " if [ "$AUDIOXMLSHA1" = "$AUDIOFILESHA1" ] ; then echo "Re-download is good, encode" echo 'oggdec "$OGGDECOPT" "$AUDIOFILE"' nice oggdec $OGGDECOPT $AUDIOFILE else echo "Still bad after re-downloading, remove" rm "$AUDIOFILE" fi fi cd .. done