#!/usr/bin/env bash # Copyright Ken Fallon - Released into the public domain. http://creativecommons.org/publicdomain/ #============================================================ PATH=$PATH:$HOME/sourcecode/hpr/hpr_hub/bin/ source $HOME/tmp/pip3.9/bin/activate # https://hub.tcno.co/ai/whisper/install/ TEMP_DIR="/var/tmp/" CHANNELS="2" FIXAUDIO="1" ARTIST="EMPTY" TITLE="EMPTY" YEAR="EMPTY" SLOT="EMPTY" basedir="/var/IA" upload_dir="${basedir}/uploads" theme="${basedir}/theme.wav" outro="${basedir}/2022-03-07-outro.wav" outro_c2="${basedir}/2022-03-07-outro_c2.wav" ttsserver="http://localhost:5500" processing_dir="$HOME/tmp/hpr/processing" git_image_dir="$HOME/sourcecode/hpr/HPR_Public_Code/www/images/hosts" acceptable_duration_difference="2" # Seconds thedate=$(/usr/bin/date -u +%Y-%m-%d_%H-%M-%SZ_%A) echo "Processing the next HPR Show in the queue" if [ $( curl -s -o /dev/null -w "%{http_code}" -X 'GET' "${ttsserver}/api/voices" -H 'accept: */*' ) != "200" ] then echo "Please start the tts-server \"podman run -it -p 5500:5500 synesthesiam/opentts:en\"" exit fi function abs_diff { echo $(($1 >= $2 ? $1 - $2 : $2 - $1)) } function create_tts_summary { HPR_summary="$( cat "hpr${ep_num}_summary.txt" )" echo "INFO: Converting text \"${HPR_summary}\" to speech." curl -X 'GET' -G --data-urlencode "voice=coqui-tts:en_ljspeech" --data-urlencode "text=${HPR_summary}" --data-urlencode "vocoder=high" --data-urlencode "denoiserStrength=0.03" --data-urlencode "cache=false" ${ttsserver}/api/tts -H 'accept: */*' --output ~hpr${ep_num}_summary.wav } ################### # Locate media directory # # show_type="" if [[ -f "${1}" && -n "${2}" ]] then echo "DEBUG: Show type is local" 1>&2 show_type="local" mediafile="${1}" media_dir="$( dirname "${mediafile}" )" ep_num="${2}" echo "The duration is \"$( \date -ud "1970-01-01 $( ffprobe -i "${mediafile}" 2>&1| awk -F ': |, ' '/Duration:/ { print $2 }' )" +%s )\"." else echo "DEBUG: Show type is remote" 1>&2 show_type="remote" response=$( curl --silent --netrc-file ${HOME}/.netrc "https://hub.hackerpublicradio.org/cms/status.php" | \ grep 'SHOW_POSTED' | \ head -1 | \ sed 's/,/ /g' ) echo "DEBUG: Getting server response" 1>&2 if [ -z "${response}" ] then echo "INFO: There appear to be no more shows with the status \"SHOW_POSTED\"." echo "Getting a list of all the reservations." curl --silent --netrc-file ${HOME}/.netrc "https://hub.hackerpublicradio.org/cms/status.php" exit 3 fi timestamp_epoc="$( echo ${response} | awk '{print $1}' )" ep_num="$( echo ${response} | awk '{print $2}' )" ep_date="$( echo ${response} | awk '{print $3}' )" key="$( echo ${response} | awk '{print $4}' )" status="$( echo ${response} | awk '{print $5}' )" email="$( echo ${response} | awk '{print $6}' )" #source_dir="hpr:/home/hpr/upload/${timestamp_epoc}_${ep_num}_${ep_date}_${key}" dest_dir="${timestamp_epoc}_${ep_num}_${ep_date}_${key}" media_dir="${processing_dir}/${timestamp_epoc}_${ep_num}_${ep_date}_${key}" fi upload_dir_ep_num="${upload_dir}/hpr${ep_num}" mkdir -p "${upload_dir_ep_num}" 2>/dev/null if [ ! -d "${upload_dir_ep_num}" ] then echo "DEBUG: Missing directory \"upload_dir_ep_num\" \"${upload_dir}\", /hpr and \"${ep_num}\"" 1>&2 exit fi echo "DEBUG: Checking variables" 1>&2 if [ -z "${show_type}" ] then echo "sorry, variable \"show_type\" is not set." exit fi if [ -z "${media_dir}" ] then echo "sorry, variable \"media_dir\" is not set." exit fi if [ ! -d "${media_dir}" ] then echo "sorry, directory \"media_dir: ${media_dir}\" does not exist" exit 1 fi echo detox -v "${media_dir}/" detox -vr "${media_dir}/" echo "DEBUG: Using media directory as \"${media_dir}\"" if [[ "$( find "${media_dir}" \( -iname "hpr${ep_num}_sandwitch.wav" -o -iname "hpr${ep_num}.mp3" -o -iname "hpr${ep_num}.ogg" -o -iname "hpr${ep_num}.spx" -o -iname "hpr${ep_num}_summary.txt" -o -iname "hpr${ep_num}_summary.wav" -o -iname "hpr${ep_num}_sandwitch.wav" -o -iname "*_mez.wav" -o -iname "*_sox_norm.wav" -o -iname "*_mezzanine.wav" -o -iname "*_tmp.pcm" -o -iname "hpr${ep_num}_intro*.wav" -o -iname "~hpr${ep_num}_summary.wav" -o -iname "~~hpr${ep_num}_summary.wav" -o -iname "*_tmp.log" -o -iname "silence.wav" -o -iname "hpr${ep_num}_norm.wav" \) | wc -l )" -ne 0 ]] then echo "Files for this episode already exist." find "${media_dir}" \( -iname "hpr${ep_num}_sandwitch.wav" -o -iname "hpr${ep_num}.mp3" -o -iname "hpr${ep_num}.ogg" -o -iname "hpr${ep_num}.spx" -o -iname "hpr${ep_num}_summary.txt" -o -iname "hpr${ep_num}_summary.wav" -o -iname "hpr${ep_num}_sandwitch.wav" -o -iname "*_mez.wav" -o -iname "*_sox_norm.wav" -o -iname "*_mezzanine.wav" -o -iname "*_tmp.pcm" -o -iname "hpr${ep_num}_intro*.wav" -o -iname "~hpr${ep_num}_summary.wav" -o -iname "~~hpr${ep_num}_summary.wav" -o -iname "*_tmp.log" -o -iname "silence.wav" -o -iname "hpr${ep_num}_norm.wav" \) read -p "Shall I remove them ? (N|y) ? " -n 1 -r echo # (optional) move to a new line if [[ ! $REPLY =~ ^[yY]$ ]] then echo "skipping...." exit else echo "Removing old files ...." find "${media_dir}" \( -iname "hpr${ep_num}_sandwitch.wav" -o -iname "hpr${ep_num}.mp3" -o -iname "hpr${ep_num}.ogg" -o -iname "hpr${ep_num}.spx" -o -iname "hpr${ep_num}_summary.txt" -o -iname "hpr${ep_num}_summary.wav" -o -iname "hpr${ep_num}_sandwitch.wav" -o -iname "*_mez.wav" -o -iname "*_sox_norm.wav" -o -iname "*_mezzanine.wav" -o -iname "*_tmp.pcm" -o -iname "hpr${ep_num}_intro*.wav" -o -iname "~hpr${ep_num}_summary.wav" -o -iname "~~hpr${ep_num}_summary.wav" -o -iname "*_tmp.log" -o -iname "silence.wav" -o -iname "hpr${ep_num}_norm.wav" \) -delete -print fi fi ##################################################### # Process media media=$( find "${media_dir}" -type f -exec file {} \; | grep -Ei 'audio|mpeg|video|MP4' | awk -F ': ' '{print $1}' ) if [ -z "${media}" ] then echo "ERROR: Can't find any media in \"${media_dir}/\"" find "${media_dir}/" -type f exit 1 fi mediafile="" echo "Found more than one media file. Please select which one to use ?" if [ "$( echo "${media}" | wc -l )" -ne 1 ] then select this_media in $( echo "${media}" ) do echo "INFO: You selected \"${this_media}\"." ls -al "${this_media}" mediafile="${this_media}" break done else echo "INFO: Selecting media as \"${media}\"." mediafile="${media}" fi # extract file name and extension fname="$( basename "${mediafile%.*}" )" ext="${mediafile/*./}" cd "${media_dir}/" pwd echo "INFO: Processing hpr${ep_num} from ${email}" echo "INFO: Working directory is \"${media_dir}/\"" echo "" if [ -z "${mediafile}" ] then echo "sorry, variable \"mediafile\" is not set." exit fi if [ -z "${fname}" ] then echo "sorry, variable \"fname\" is not set." exit fi if [ -z "${ext}" ] then echo "sorry, variable \"ext\" is not set." exit fi if [ ! -f "${mediafile}" ] then echo "sorry, media file \"${mediafile}\" does not exist" exit fi echo "--------------------------------------------------------------------------------" | tee -a ${fname}_tmp.log echo "File information for \"${mediafile}\"" | tee -a ${fname}_tmp.log ffprobe ${mediafile} 2>&1 | grep Audio: mediainfo ${mediafile} audio2image.bash ${mediafile} xdg-open ${mediafile%.*}.png >/dev/null 2>&1 & unset REPLY until [[ $REPLY =~ ^[yYnN]$ ]] do read -p "Source Waveform look ok ? (N|y) ? " -n 1 -r echo "" done if [[ ! $REPLY =~ ^[yY]$ ]] then echo "skipping.... $REPLY" exit fi re='^[0-9]+$' if ! [[ $ep_num =~ $re ]] then echo "error: episode \"${ep_num}\" is not a number" exit 1 fi if [ ! -f "${outro}" ] then echo "sorry, file \"${outro}\" does not exist" exit 1 fi if [ ! -f "${outro_c2}" ] then echo "sorry, file \"${outro_c2}\" does not exist" exit 1 fi if [ ! -f "${theme}" ] then echo "sorry, file \"${theme}\" does not exist" exit 1 fi if [ ! -r "${mediafile}" ] then echo "sorry, media file \"${mediafile}\" is not readable" exit fi if [ $(ffprobe "${mediafile}" 2>&1 | grep "Audio:" | wc -l ) -eq 0 ] then echo "sorry, media file \"${mediafile}\" has no audio track" exit fi xdg-open "https://hackerpublicradio.org/eps/hpr${ep_num}/index.html" >/dev/null 2>&1 & mpv -vo=null "${mediafile}" unset REPLY until [[ $REPLY =~ ^[yYnN]$ ]] do read -p "Is the audio ok (n|Y) ? " -n 1 -r echo "" done if [[ ! $REPLY =~ ^[yY]$ ]] then echo "skipping.... $REPLY" exit fi echo "--------------------------------------------------------------------------------" echo "Geting metadata for hpr${ep_num}" while read -r line do field=$(echo $line | awk -F ':' '{print $1}') case $field in "HPR_summary") HPR_summary=$(echo $line | grep "HPR_summary: " | cut -c 14- ) continue ;; "HPR_album") HPR_album=$(echo $line | grep "HPR_album: " | cut -c 12- ) continue ;; "HPR_artist") HPR_artist=$(echo $line | grep "HPR_artist: " | cut -c 13- ) continue ;; "HPR_comment") HPR_comment=$(echo $line | grep "HPR_comment: " | cut -c 14- ) continue ;; "HPR_genre") HPR_genre=$(echo $line | grep "HPR_genre: " | cut -c 12- ) continue ;; "HPR_title") HPR_title=$(echo $line | grep "HPR_title: " | cut -c 12- ) continue ;; "HPR_track") HPR_track=$(echo $line | grep "HPR_track: " | cut -c 12- ) continue ;; "HPR_year") HPR_year=$(echo $line | grep "HPR_year: " | cut -c 11- ) continue ;; "HPR_duration") HPR_duration=$(echo $line | grep "HPR_duration: " | cut -c 15- ) continue ;; "HPR_explicit") HPR_explicit=$(echo $line | grep "HPR_explicit: " | cut -c 15- ) continue ;; "HPR_license") HPR_license=$(echo $line | grep "HPR_license: " | cut -c 14- ) continue ;; esac done < <( curl --silent --netrc-file ${HOME}/.netrc "https://hub.hackerpublicradio.org/cms/say.php?id=${ep_num}" ) if [[ -z "$HPR_album" || -z "$HPR_artist" || -z "$HPR_comment" || -z "$HPR_genre" || -z "$HPR_title" || -z "$HPR_track" || -z "$HPR_year" || -z "$HPR_summary" || -z "$HPR_duration" || -z "$HPR_explicit" || -z "$HPR_license" ]] then echo "Could not find information on ${ep_num}. Has the show been posted ?" exit; fi echo "--------------------------------------------------------------------------------" echo "album : $HPR_album" echo "artist : $HPR_artist" echo "comment : $HPR_comment" echo "genre : $HPR_genre" echo "title : $HPR_title" echo "track : $HPR_track" echo "year : $HPR_year" echo "summary : $HPR_summary" echo "duration : $HPR_duration" echo "explicit : $HPR_explicit" echo "license : $HPR_license" echo "media_dir : ${media_dir}" echo "mediafile : ${mediafile}" echo "fname : ${fname}" echo "ext : ${ext}" if [[ $HPR_duration == "0" ]] then echo "The duration is set to 0. Please update the show with the correct time." exit; fi #============================================================ # Preproc`s the source file echo "--------------------------------------------------------------------------------" | tee -a ${fname}_tmp.log echo "Prepare mezzanine file" | tee -a ${fname}_tmp.log ffmpeg -y -i ${mediafile} -ar 44100 -ac $CHANNELS ${fname}_mezzanine.wav >> ${fname}_tmp.log 2>&1 echo "--------------------------------------------------------------------------------" | tee -a ${fname}_tmp.log echo "Add HPR Branding" | tee -a ${fname}_tmp.log echo "Creating the summary" | tee -a ${fname}_tmp.log #echo "$HPR_summary" - | text2wave -F 44100 - -o hpr${ep_num}_summary.wav #festival --tts #echo "$HPR_summary" - | espeak -w ~hpr${ep_num}_summary.wav echo "$HPR_summary" > "hpr${ep_num}_summary.txt" create_tts_summary_ok="not-ok" while [ "${create_tts_summary_ok}" != "OK" ] do create_tts_summary xdg-open "hpr${ep_num}_summary.txt" 2>&1 & mpv --speed=1.8 ~hpr${ep_num}_summary.wav read -p "Is the text to speech correct (y|N) ? " -n 1 -r echo # (optional) move to a new line if [[ $REPLY =~ ^[Yy]$ ]] then create_tts_summary_ok="OK" else echo "WARN: Please correct the text and try again." inotifywait --event modify "hpr${ep_num}_summary.txt" fi done echo "INFO: TTS complete." ffmpeg -y -i ~hpr${ep_num}_summary.wav -ar 44100 ~~hpr${ep_num}_summary.wav >> ${fname}_tmp.log 2>&1 sox -V2 -n -r 44100 -c 1 silence.wav trim 0.0 6.0 >> ${fname}_tmp.log 2>&1 sox -V2 silence.wav ~~hpr${ep_num}_summary.wav hpr${ep_num}_summary.wav >> ${fname}_tmp.log 2>&1 echo "Adding the theme" | tee -a ${fname}_tmp.log sox -V2 -m "hpr${ep_num}_summary.wav" "${theme}" "hpr${ep_num}_intro.wav" >> ${fname}_tmp.log 2>&1 if [ ${CHANNELS} -eq "2" ] then echo "Converting mono to Stero" | tee -a ${fname}_tmp.log ffmpeg -y -i "hpr${ep_num}_intro.wav" -ac 2 "hpr${ep_num}_intro_c2.wav" echo "Creating the sandwitch: \"hpr${ep_num}_intro_c2.wav\" \"${fname}_mezzanine.wav\" \"${outro}\" \"hpr${ep_num}_sandwitch.wav\" " | tee -a ${fname}_tmp.log sox -V2 "hpr${ep_num}_intro_c2.wav" "${fname}_mezzanine.wav" "${outro_c2}" "hpr${ep_num}_sandwitch.wav" >> ${fname}_tmp.log 2>&1 else echo "Creating the sandwitch: \"hpr${ep_num}_intro.wav\" \"${fname}_mezzanine.wav\" \"${outro}\" \"hpr${ep_num}_sandwitch.wav\" " | tee -a ${fname}_tmp.log sox -V2 "hpr${ep_num}_intro.wav" "${fname}_mezzanine.wav" "${outro}" "hpr${ep_num}_sandwitch.wav" >> ${fname}_tmp.log 2>&1 fi echo "Normalizing the wav files" | tee -a ${fname}_tmp.log #sox --temp "${TEMP_DIR}" --norm hpr${ep_num}_sandwitch.wav hpr${ep_num}_norm.wav #ffmpeg -y -i hpr${ep_num}_sandwitch.wav -filter:a "dynaudnorm=p=0.9:s=5" hpr${ep_num}_norm.wav >> ${fname}_tmp.log 2>&1 ffmpeg -y -i hpr${ep_num}.wav -af loudnorm=I=-16:LRA=11:TP=-1.5 hpr${ep_num}_norm.wav >> ${fname}_tmp.log 2>&1 if [ ! -d "${upload_dir_ep_num}" ] then echo "DEBUG: Missing directory \"upload_dir_ep_num\" \"${upload_dir}\", /hpr and \"${ep_num}\"" 1>&2 exit fi if [ ! -e "hpr${ep_num}_norm.wav" ] then echo "DEBUG: Missing file \"hpr${ep_num}_norm.wav\"" 1>&2 exit fi cp -v hpr${ep_num}_norm.wav ${upload_dir_ep_num}/hpr${ep_num}.wav >> ${fname}_tmp.log 2>&1 if [ ! -e "${upload_dir_ep_num}/hpr${ep_num}.wav" ] then echo "DEBUG: Missing file \"${upload_dir_ep_num}/hpr${ep_num}.wav\"" 1>&2 exit fi echo "--------------------------------------------------------------------------------" | tee -a ${fname}_tmp.log echo "File information" | tee -a ${fname}_tmp.log ffprobe ${upload_dir_ep_num}/hpr${ep_num}.wav 2>&1 | grep Audio: mediainfo ${upload_dir_ep_num}/hpr${ep_num}.wav audio2image.bash ${upload_dir_ep_num}/hpr${ep_num}.wav xdg-open ${upload_dir_ep_num}/hpr${ep_num}.png >/dev/null 2>&1 & read -p "Processed Waveform look ok ? (N|y) ? " -n 1 -r echo # (optional) move to a new line if [[ ! $REPLY =~ ^[yY]$ ]] then echo "skipping...." exit fi #rm -v ${upload_dir_ep_num}/hpr${ep_num}.png echo "--------------------------------------------------------------------------------" echo "Geting transcript of hpr${ep_num}" echo whisper --model tiny --language en --output_dir "${media_dir}" "${upload_dir_ep_num}/hpr${ep_num}.wav" | tee -a ${fname}_tmp.log whisper --model tiny --language en --output_dir "${media_dir}" "${upload_dir_ep_num}/hpr${ep_num}.wav" | tee -a ${fname}_tmp.log ls -al "${media_dir}/hpr${ep_num}".* xdg-open "${media_dir}/hpr${ep_num}".txt 2>&1 & echo mpv --no-audio-display --audio-channels=stereo --speed="3.5" "${media_dir}/hpr${ep_num}".txt unset REPLY until [[ $REPLY =~ ^[yYnN]$ ]] do read -p "Processed transcript look ok ? (N|y) ? " -n 1 -r echo "" done if [[ ! $REPLY =~ ^[yY]$ ]] then echo "skipping.... $REPLY" exit fi mkdir "${upload_dir_ep_num}/hpr${ep_num}" >/dev/null 2>&1 cp -v "${media_dir}/hpr${ep_num}".vtt "${upload_dir_ep_num}/hpr${ep_num}.vtt" | tee -a ${fname}_tmp.log cp -v "${media_dir}/hpr${ep_num}".srt "${upload_dir_ep_num}/hpr${ep_num}.srt" | tee -a ${fname}_tmp.log cp -v "${media_dir}/hpr${ep_num}".txt "${upload_dir_ep_num}/hpr${ep_num}.txt" | tee -a ${fname}_tmp.log cp -v "${media_dir}/hpr${ep_num}".tsv "${upload_dir_ep_num}/hpr${ep_num}.tsv" | tee -a ${fname}_tmp.log cp -v "${media_dir}/hpr${ep_num}".json "${upload_dir_ep_num}/hpr${ep_num}.json" | tee -a ${fname}_tmp.log echo "--------------------------------------------------------------------------------" | tee -a ${fname}_tmp.log echo "Convert to opus" | tee -a ${fname}_tmp.log ffmpeg -y -i ${upload_dir_ep_num}/hpr${ep_num}.wav ${upload_dir_ep_num}/hpr${ep_num}.opus 2>> ${fname}_tmp.log 1>&2 echo "--------------------------------------------------------------------------------" | tee -a ${fname}_tmp.log echo "Convert to flac" | tee -a ${fname}_tmp.log ffmpeg -y -i ${upload_dir_ep_num}/hpr${ep_num}.wav ${upload_dir_ep_num}/hpr${ep_num}.flac 2>> ${fname}_tmp.log 1>&2 echo "--------------------------------------------------------------------------------" | tee -a ${fname}_tmp.log echo "Convert to mp3" | tee -a ${fname}_tmp.log ffmpeg -y -i ${upload_dir_ep_num}/hpr${ep_num}.wav ${upload_dir_ep_num}/hpr${ep_num}.mp3 2>> ${fname}_tmp.log 1>&2 echo "--------------------------------------------------------------------------------" | tee -a ${fname}_tmp.log echo "Convert to ogg" | tee -a ${fname}_tmp.log #ffmpeg -y -i ${upload_dir_ep_num}/hpr${ep_num}.wav ${upload_dir_ep_num}/hpr${ep_num}.ogg 2>> ${fname}_tmp.log 1>&2 ffmpeg -y -i ${upload_dir_ep_num}/hpr${ep_num}.wav -acodec libopus -f ogg ${upload_dir_ep_num}/hpr${ep_num}.ogg 2>> ${fname}_tmp.log 1>&2 echo "--------------------------------------------------------------------------------" | tee -a ${fname}_tmp.log echo "Convert to spx" | tee -a ${fname}_tmp.log ffmpeg -y -i ${upload_dir_ep_num}/hpr${ep_num}.wav ${upload_dir_ep_num}/hpr${ep_num}.spx 2>> ${fname}_tmp.log 1>&2 ### End conversion intro_duration="$( mediainfo --Output=XML --Full "hpr${ep_num}_intro.wav" | xmlstarlet sel -T -t -m '/_:MediaInfo/_:media/_:track[@type="Audio"]' -v '_:Duration' -n | awk -F '.' '{print $1}' )" outro_duration="$( mediainfo --Output=XML --Full "${outro}" | xmlstarlet sel -T -t -m '/_:MediaInfo/_:media/_:track[@type="Audio"]' -v '_:Duration' -n | awk -F '.' '{print $1}' )" source_duration="$( mediainfo --Output=XML --Full "${mediafile}" | xmlstarlet sel -T -t -m '/_:MediaInfo/_:media/_:track[@type="Audio"]' -v '_:Duration' -n | awk -F '.' '{print $1}' )" expected_duration=$(( ${intro_duration} + ${HPR_duration} + ${outro_duration} )) echo "Intro(${intro_duration}) + Show(${HPR_duration}) + Outro(${outro_duration}) = ${expected_duration}" media_error="0" for check_file in \ ${upload_dir_ep_num}/hpr${ep_num}.wav \ ${upload_dir_ep_num}/hpr${ep_num}.opus \ ${upload_dir_ep_num}/hpr${ep_num}.flac \ ${upload_dir_ep_num}/hpr${ep_num}.mp3 \ ${upload_dir_ep_num}/hpr${ep_num}.spx \ ${upload_dir_ep_num}/hpr${ep_num}.ogg do # ${upload_dir_ep_num}/hpr${ep_num}.spx echo "INFO: Processing the file \"${check_file}\"" if [[ ! -s "${check_file}" ]] then echo "ERROR: Something went wrong encoding of the file \"${check_file}\"" exit else mediainfo --Output=XML --Full "${check_file}" | xmlstarlet sel -T -t -m '/_:MediaInfo/_:media/_:track[@type="Audio"]' -v '_:Duration' -n | awk -F '.' '{print $1}' this_duration=$( mediainfo --Output=XML --Full "${check_file}" | xmlstarlet sel -T -t -m '/_:MediaInfo/_:media/_:track[@type="Audio"]' -v '_:Duration' -n | awk -F '.' '{print $1}' ) if [[ $(abs_diff "${this_duration}" "${expected_duration}" ) -le "${acceptable_duration_difference}" ]] then echo "INFO: The file \"${check_file}\" duration of ${this_duration} () is close enough to ${expected_duration}" else echo "ERROR: The file \"${check_file}\" actual duration of ${this_duration} is not close enough to posted duration of ${expected_duration}." echo " Fix or update the posted duration to ${source_duration}." media_error="1" fi #${expected_duration} fi done echo "Source: ${source_duration}" if [[ "${media_error}" -eq "1" ]] then echo "ERROR: Media is not encoded correctly" exit else echo "INFO: Media duration is correct" fi if [[ ! -s ${upload_dir_ep_num}/hpr${ep_num}.wav ]] || [[ ! -s ${upload_dir_ep_num}/hpr${ep_num}.opus ]] || [[ ! -s ${upload_dir_ep_num}/hpr${ep_num}.flac ]] || [[ ! -s ${upload_dir_ep_num}/hpr${ep_num}.mp3 ]] || [[ ! -s ${upload_dir_ep_num}/hpr${ep_num}.ogg ]] || [[ ! -s ${upload_dir_ep_num}/hpr${ep_num}.spx ]] then echo "ERROR: Something went wrong encoding the files" exit 1 fi echo "--------------------------------------------------------------------------------" | tee -a ${fname}_tmp.log echo "Fixing Tags" | tee -a ${fname}_tmp.log fix_tags -album="$HPR_album" -artist="$HPR_artist" -comment="${HPR_comment} The license is ${HPR_license}" -genre="$HPR_genre" -title="$HPR_title" -track="$HPR_track" -year="$HPR_year" ${upload_dir_ep_num}/hpr${ep_num}* 2>> ${fname}_tmp.log 1>&2 fix_tags ${upload_dir_ep_num}/hpr${ep_num}* #echo "Changing the file dates to the time of upload" touch -r ${mediafile} hpr${ep_num}* touch -r ${mediafile} ${upload_dir_ep_num}/hpr${ep_num}* ls -al hpr${ep_num}* ${upload_dir_ep_num}/hpr${ep_num}* | tee -a ${fname}_tmp.log # # echo "--------------------------------------------------------------------------------" | tee -a ${fname}_tmp.log # # echo "Getting info for the asset table" | tee -a ${fname}_tmp.log # # # # echo "INSERT INTO assets (episode_id,filename,extension,size,sha1sum,mime_type,file_type) VALUES" # # # # for asset_file in \ # # ${upload_dir_ep_num}/hpr${ep_num}.wav \ # # ${upload_dir_ep_num}/hpr${ep_num}.opus \ # # ${upload_dir_ep_num}/hpr${ep_num}.flac \ # # ${upload_dir_ep_num}/hpr${ep_num}.mp3 \ # # ${upload_dir_ep_num}/hpr${ep_num}.spx \ # # ${upload_dir_ep_num}/hpr${ep_num}.ogg # # do # # size="$( ls -al "${asset_file}" | awk '{print $5}' )" # # sha1sum="$( sha1sum "${asset_file}" | awk '{print $1}' )" # # mime_type=$( file --dereference --brief --mime "${asset_file}" ) # # file_type=$( file --dereference --brief "${asset_file}" ) # # echo "(${ep_num},'${filename}','${extension}','${size}','${sha1sum}','${mime_type}','${file_type}')," # # done echo "--------------------------------------------------------------------------------" | tee -a ${fname}_tmp.log echo "Transferring files to Servers" | tee -a ${fname}_tmp.log #rsync -ave ssh --partial --progress --ignore-existing ${upload_dir_ep_num}/hpr${ep_num}.mp3 ${upload_dir_ep_num}/hpr${ep_num}.ogg ${upload_dir_ep_num}/hpr${ep_num}.spx hpr:www/eps/ #firefox "https://hackerpublicradio.org/local/hpr${ep_num}.mp3" >/dev/null 2>&1 & #firefox "https://hackerpublicradio.org/local/hpr${ep_num}.ogg" >/dev/null 2>&1 & firefox "file://${upload_dir_ep_num}/hpr${ep_num}.mp3" >/dev/null 2>&1 & firefox "file://${upload_dir_ep_num}/hpr${ep_num}.ogg" >/dev/null 2>&1 & #firefox "https://hackerpublicradio.org/eps.php?id=${ep_num}" >/dev/null 2>&1 & #mpv "http://hackerpublicradio.org/local/hpr${ep_num}.spx" "http://hackerpublicradio.org/local/hpr${ep_num}.ogg" "http://hackerpublicradio.org/local/hpr${ep_num}.mp3" "file://${upload_dir_ep_num}/hpr${ep_num}.spx" "file://${upload_dir_ep_num}/hpr${ep_num}.opus" "file://${upload_dir_ep_num}/hpr${ep_num}.ogg" "file://${upload_dir_ep_num}/hpr${ep_num}.mp3" "file://${upload_dir_ep_num}/hpr${ep_num}.flac" mpv "file://${upload_dir_ep_num}/hpr${ep_num}.spx" "file://${upload_dir_ep_num}/hpr${ep_num}.opus" "file://${upload_dir_ep_num}/hpr${ep_num}.ogg" "file://${upload_dir_ep_num}/hpr${ep_num}.mp3" "file://${upload_dir_ep_num}/hpr${ep_num}.flac" read -p "Remove files for \"${fname}\" (y|N) ? " -n 1 -r echo # (optional) move to a new line if [[ $REPLY =~ ^[Yy]$ ]] then mediafilename=$(basename "${mediafile}") mediaextension="${mediafilename##*.}" # " # ssh hpr -t "mkdir /home/hpr/www/eps/hpr${ep_num}" >/dev/null 2>&1 # rsync -ave ssh --partial --progress --ignore-existing "${mediafile}" hpr:www/eps/hpr${ep_num}/hpr${ep_num}_source.${mediaextension} | tee -a ${fname}_tmp.log # # rsync -ave ssh --partial --progress --ignore-existing "${media_dir}/hpr${ep_num}.wav".vtt hpr:www/eps/hpr${ep_num}/hpr${ep_num}.vtt | tee -a ${fname}_tmp.log # rsync -ave ssh --partial --progress --ignore-existing "${media_dir}/hpr${ep_num}.wav".srt hpr:www/eps/hpr${ep_num}/hpr${ep_num}.srt | tee -a ${fname}_tmp.log # rsync -ave ssh --partial --progress --ignore-existing "${media_dir}/hpr${ep_num}.wav".txt hpr:www/eps/hpr${ep_num}/hpr${ep_num}.txt | tee -a ${fname}_tmp.log # f # ssh hpr -t "ls -al /home/hpr/www/eps/hpr${ep_num}*" cp -v "${mediafile}" "${upload_dir_ep_num}/hpr${ep_num}_source.${mediaextension}" #echo "Remove temp files" # rm -v ~hpr${ep_num}_summary.wav ~~hpr${ep_num}_summary.wav silence.wav # rm -v ${fname}_mezzanine.wav ${fname}_tmp*.pcm ${fname}_tmp.log ${fname}_mez.wav #mv -v ${fname}* hpr${ep_num}* *_${ep_num}_* /var/IA/done/ # wget --timeout=0 -q "http://hackerpublicradio.org/hpr_ogg_rss.php?gomax=1" -O - | xmlstarlet val --err - # wget --timeout=0 -q "http://hackerpublicradio.org/hpr_mp3_rss.php?gomax=1" -O - | xmlstarlet val --err - # wget --timeout=0 -q "http://hackerpublicradio.org/hpr_spx_rss.php?gomax=1" -O - | xmlstarlet val --err - # wget --timeout=0 -q "http://hackerpublicradio.org/rss-future.php" -O - | xmlstarlet val --err - echo "INFO: rsync -ave ssh --partial --progress ${upload_dir}/hpr${ep_num}* borg:/data/IA/uploads/" rsync -ave ssh --partial --progress ${upload_dir}/hpr${ep_num}* borg:/data/IA/uploads/ echo "INFO: rsync -ave ssh --partial --progress ${upload_dir}/hpr${ep_num}* rsync.net:processing/" rsync -ave ssh --partial --progress ${upload_dir}/hpr${ep_num}* rsync.net:processing/ echo "$( ssh borg -t "ls -al /data/IA/uploads/hpr${ep_num}*" ; ssh rsync.net -t "ls -al rsync.net:processing/hpr${ep_num}*" ; ls -al ${upload_dir}/hpr${ep_num}* )" | grep "hpr${ep_num}" | awk '{print $5, $NF}' | sort # ken@kalani: # rsync -av --partial --progress /var/IA/uploads/ vger:processing/ # $HOME/sourcecode/hpr/hpr_hub.wip/bin/hpr-assets.bash # root@vger:~# # rsync -av --progress --partial $HOME/processing/ /mnt/data/hpr/eps/ # find /mnt/data/hpr/eps/ -mindepth 1 -maxdepth 1 -type f | grep -vE 'assets.csv|assets.json' | while read i;do mv -fv ${i} $(dirname ${i})/$(basename ${i%.*} | cut -c -7 )/;done # find /mnt/data/hpr/eps/ -type f \( -iname "*source*" -o -iname "*flac*" -o -iname "*wav*" \) -delete -print # chcon -R --type=httpd_sys_rw_content_t /mnt/data/hpr/ # chown apache:apache /mnt/data/hpr/ # ken@kalani: # sshfs vger:/ /mnt/sshfs/vger/ # sshfs rsync.net: /mnt/sshfs/rsync.net/ # rsync -av --partial --progress /mnt/sshfs/vger/mnt/data/hpr/eps/ /mnt/sshfs/rsync.net/hpr/eps/ # https://hpr.nyc3.cdn.digitaloceanspaces.com/eps/hpr1404/hpr1404.mp3 # https://alpha.nl.eu.mirror.hackerpublicradio.org/eps/hpr4271/hpr4271.mp3 # https://archive.org/download/hpr4268/hpr4268.ogg # set eps.valid=1 if [ ${show_type} == "remote" ] then echo "INFO: Setting the status" # SHOW_SUBMITTED → METADATA_PROCESSED → SHOW_POSTED → MEDIA_TRANSCODED → UPLOADED_TO_IA → UPLOADED_TO_RSYNC_NET curl --netrc-file ${HOME}/.netrc "https://hub.hackerpublicradio.org/cms/status.php?ep_num=${ep_num}&status=MEDIA_TRANSCODED" curl --silent --netrc-file ${HOME}/.netrc "https://hub.hackerpublicradio.org/cms/status.php" fi else echo "skipping...." echo "cp -v \"${mediafile}\" \"${upload_dir_ep_num}/hpr${ep_num}_source.${mediaextension}\"" # echo "rm -v ${fname}_mezzanine.wav ${fname}_tmp*.pcm ${fname}_tmp.log ${fname}_mez.wav" #echo "mv -v ${fname}* hpr${ep_num}* *_${ep_num}_* /var/IA/done/" echo "wget --timeout=0 -q \"http://hackerpublicradio.org/hpr_ogg_rss.php?gomax=1\" -O - | xmlstarlet val --err -" echo "wget --timeout=0 -q \"http://hackerpublicradio.org/hpr_mp3_rss.php?gomax=1\" -O - | xmlstarlet val --err -" echo "wget --timeout=0 -q \"http://hackerpublicradio.org/hpr_spx_rss.php?gomax=1\" -O - | xmlstarlet val --err -" echo "rsync -ave ssh --partial --progress ${upload_dir}/hpr${ep_num}* borg:/data/IA/uploads/" fi