forked from HPR/hpr_hub
		
	Removing processing tools from hpr-hub repo to workflow
This commit is contained in:
		| @@ -1,79 +0,0 @@ | ||||
| #!/bin/bash - | ||||
|  | ||||
| # | ||||
| # Copied from a 'history' file on archive.org and turned into a script | ||||
| # | ||||
|  | ||||
| set -o nounset                              # Treat unset variables as an error | ||||
|  | ||||
| SCRIPT=${0##*/} | ||||
|  | ||||
| #===  FUNCTION  ================================================================ | ||||
| #          NAME:  cleanup_temp | ||||
| #   DESCRIPTION:  Cleanup temporary files in case of a keyboard interrupt | ||||
| #                 (SIGINT) or a termination signal (SIGTERM) and at script | ||||
| #                 exit | ||||
| #    PARAMETERS:  * - names of temporary files to delete | ||||
| #       RETURNS:  Nothing | ||||
| #=============================================================================== | ||||
| function cleanup_temp { | ||||
|     for tmp in "$@"; do | ||||
|         [ -e "$tmp" ] && rm --force "$tmp" | ||||
|     done | ||||
|     exit 0 | ||||
| } | ||||
|  | ||||
| #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||||
|  | ||||
| if [[ $# -eq 0 ]]; then | ||||
|     echo "Usage: $SCRIPT audio_file" | ||||
|     exit 1 | ||||
| fi | ||||
|  | ||||
| AUDIO="$1" | ||||
| IMAGE="${AUDIO%.*}.png" | ||||
|  | ||||
| if [[ ! -e $AUDIO ]]; then | ||||
|     echo "$SCRIPT: audio file $AUDIO not found" | ||||
|     exit 1 | ||||
| fi | ||||
|  | ||||
| # | ||||
| # Make  a temporary file (called /tmp/XXXX.png) and set traps to delete them | ||||
| # | ||||
| TMP1=$(mktemp -p /tmp XXXXXXXX.png) || { | ||||
|     echo "$SCRIPT: creation of temporary file failed!" | ||||
|     exit 1 | ||||
| } | ||||
| trap 'cleanup_temp $TMP1' SIGHUP SIGINT SIGPIPE SIGTERM EXIT | ||||
|  | ||||
| # | ||||
| # Make a temporary PNG file from the audio. The original uses a 'timeout' call | ||||
| # but I can't get it to work for me. | ||||
| # | ||||
| ffmpeg -v 0 -analyzeduration 900000000000 -probesize 200M -threads 2 -i "$AUDIO" \ | ||||
|     -filter_complex aformat=channel_layouts=mono,showwavespic=colors=white:s=3200x800 \ | ||||
|     -frames:v 1 -f apng - 2>/dev/null | \ | ||||
|     magick - -background black -alpha remove -alpha off "$TMP1" 2>/dev/null | cat > /dev/null 2>&1 | ||||
|  | ||||
| # | ||||
| # Not clear what's being done to the image here, but it produces a useful end | ||||
| # result, or seems to! | ||||
| # | ||||
| magick -background black "$TMP1" -gravity center -background black -transparent white - | \ | ||||
|     magick - -gravity South -background white -splice 0x5 -background black -splice 0x5 - | \ | ||||
|     magick - -trim - | \ | ||||
|     magick - -gravity South -chop 0x5 - | \ | ||||
|     magick - -gravity North -background white -splice 0x5 -background black -splice 0x5 - | \ | ||||
|     magick - -trim - | \ | ||||
|     magick - -gravity North -chop 0x5 - | \ | ||||
|     magick - -resize '800x200!' "$IMAGE" | ||||
|  | ||||
| # | ||||
| # The original renamed the temporary file to be the target image file, but | ||||
| # that's probably becausae part of this is done in a Docker container. Doesn't | ||||
| # seem appropriate here | ||||
| # | ||||
|  | ||||
| # vim: syntax=sh:ts=8:sw=4:ai:et:tw=78:fo=tcrqn21 | ||||
|  | ||||
| @@ -1,27 +0,0 @@ | ||||
| #!/bin/bash | ||||
|  | ||||
| # CC-0 Ken Fallon | ||||
|  | ||||
| assets_db="assets_202410181601.csv" | ||||
| total="$( wc -l assets_202410181601.csv | awk '{print $1}' )" | ||||
| count=1 | ||||
| awk '{print $2}' "${assets_db}" | grep -E 'ogg|spx|mp3' | while read this_asset_name | ||||
| do | ||||
|   this_asset="/mnt/data/HPR/${this_asset_name}" | ||||
|   #echo -ne "\r$(\date "+%Y-%m-%d %H:%M:%S") The scanner lid is CLOSED.                        \r" | ||||
|   if [ ! -s "${this_asset}" ] | ||||
|   then | ||||
|     echo "ERROR: \"${this_asset}\" missing." | ||||
|   else | ||||
|     this_size="$( ls -al "${this_asset}" | awk '{print $5}' )" | ||||
|     this_sha1sum="$( sha1sum "${this_asset}" | awk '{print $1}' )" | ||||
|     if [ "$( grep -cE "${this_asset_name}.*${this_size}.*${this_sha1sum}" "${assets_db}" )" -ne 1 ] | ||||
|     then | ||||
|       echo "ERROR: \"${this_asset}\" incorrect properties." | ||||
|     fi | ||||
|   fi | ||||
|   echo -ne "\rProcessing ${count} of ${total}" | ||||
|   count=$((count+1)) | ||||
| done | ||||
|  | ||||
| exit | ||||
| @@ -1,17 +0,0 @@ | ||||
| #!/bin/bash | ||||
| # Copyright Ken Fallon - Released into the public domain. http://creativecommons.org/publicdomain/  | ||||
| find ${HOME}/processing/ -type f | egrep -v '/sponsor-anhonesthost.com-hpr15.flac|/outro.flac|/intro.flac|/sponsor-archive.org.flac' | while read mediafile | ||||
| do  | ||||
|   duration=$( mediainfo --full --Output=XML "${mediafile}" | xmlstarlet sel -T -t -m "_:MediaInfo/_:media/_:track[@type='Audio']/_:Duration[1]" -v "." -n - | awk -F '.' '{print $1}' ) | ||||
|   if [ "${duration}" != "" ] | ||||
|   then | ||||
|     echo "${mediafile}: ${duration}" | ||||
|     continue | ||||
|   fi | ||||
|   duration=$( /bin/date -ud "1970-01-01 $( ffprobe -i "${mediafile}" 2>&1| awk -F ': |, ' '/Duration:/ { print $2 }' )" +%s ) | ||||
|   if [ "${duration}" != 0 ] | ||||
|   then | ||||
|     echo "${mediafile}: ${duration}" | ||||
|     continue | ||||
|   fi | ||||
| done | ||||
| @@ -1,51 +0,0 @@ | ||||
| #!/bin/bash | ||||
|  | ||||
| file_dir="/var/IA/uploads" | ||||
|  | ||||
| #$allowed_extensions = "flac", "opus", "ogg", "spx", "mp3", "jpg", "png", "json", "srt", "tsv", "txt", "vtt"; | ||||
|  | ||||
| if [ -d "${file_dir}" ] | ||||
| then | ||||
|   cd "${file_dir}" | ||||
|   echo '"episode_id","filename","extension","size", "sha1sum", "mime_type", "file_type"' | tee "${file_dir}/assets.csv" | ||||
|   find "${file_dir}" -type f \( -iname "hpr*.wav" -o -iname "hpr*.flac" -o -iname "hpr*.opus" -o -iname "hpr*.ogg" -o -iname "hpr*.spx" -o -iname "hpr*.mp3" -o -iname "hpr*.jpg" -o -iname "hpr*.png" -o -iname "hpr*.json" -o -iname "hpr*.srt" -o -iname "hpr*.tsv" -o -iname "hpr*.txt" -o -iname "hpr*.vtt" \) | while read this_file | ||||
|   do | ||||
|     this_file_basename=$( basename "${this_file}" ) | ||||
|     this_file_dirname=$( dirname "${this_file}" ) | ||||
|     this_file_prefix="${this_file_basename%.*}" | ||||
|     this_file_extension="${this_file_basename##*.}" | ||||
|     if [ "$( echo "${this_file_prefix}" | grep -Ec '^hpr[0-9]{4}' )" -ne "1" ] | ||||
|     then | ||||
|       continue | ||||
|     fi | ||||
|      | ||||
|     this_file_episode_id="$( echo "${this_file_prefix}" | sed 's/hpr//g' | awk -F '_' '{print $1}' )" | ||||
|     if [ "${this_file_episode_id}" -lt "1" ] | ||||
|     then | ||||
|       continue | ||||
|     fi | ||||
|      | ||||
|     if [ "${this_file_episode_id}" -gt "99999" ] | ||||
|     then | ||||
|       continue | ||||
|     fi | ||||
|  | ||||
|     this_file_size="$( ls -al "${this_file}" | awk '{print $5}' )" | ||||
|     this_file_sha1sum="$( sha1sum "${this_file}" | awk '{print $1}' )" | ||||
|     this_file_mime_type=$( file --dereference --brief --mime "${this_file}" ) | ||||
|     this_file_file_type=$( file --dereference --brief "${this_file}" ) | ||||
|      | ||||
|     echo "${this_file_episode_id},\"${this_file_basename}\",\"${this_file_extension}\",\"${this_file_size}\",\"${this_file_sha1sum}\",\"${this_file_mime_type}\",\"${this_file_file_type}\"" | tee --append "${file_dir}/assets.csv" | ||||
|      | ||||
|   done | ||||
| fi | ||||
|  | ||||
| if [ -s "${file_dir}/assets.csv" ] | ||||
| then | ||||
|   cat "${file_dir}/assets.csv" | csvtojson | jq '{"assets":[.[]]}' | tee "${file_dir}/assets.json" | ||||
| fi | ||||
|  | ||||
| if [ -s "${file_dir}/assets.json" ] | ||||
| then | ||||
|   curl --netrc-file $HOME/.netrc --verbose --request POST https://hub.hackerpublicradio.org/cms/assets.php --data-ascii @"${file_dir}/assets.json" --header "Content-Type: application/json" | ||||
| fi | ||||
| @@ -1,684 +0,0 @@ | ||||
| #!/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 | ||||
| @@ -1,260 +0,0 @@ | ||||
| #!/usr/bin/env bash | ||||
| # Copyright Ken Fallon - Released into the public domain. http://creativecommons.org/publicdomain/  | ||||
| #============================================================ | ||||
| source /home/ken/tmp/pip3.9/bin/activate | ||||
| PATH=$PATH:/home/ken/sourcecode/hpr/hpr_hub/bin/ | ||||
|  | ||||
| processing_dir="/home/ken/tmp/hpr/processing" | ||||
| git_image_dir="/home/ken/sourcecode/hpr/HPR_Public_Code/www/images/hosts" | ||||
| echo "Processing the next HPR Show in the queue" | ||||
|  | ||||
| ################### | ||||
| # Get the show | ||||
| # | ||||
| #  | ||||
| response=$( curl --silent --netrc-file ${HOME}/.netrc "https://hub.hackerpublicradio.org/cms/status.php" | \ | ||||
| grep 'METADATA_PROCESSED' | \ | ||||
| head -1 | \ | ||||
| sed 's/,/ /g' ) | ||||
|  | ||||
| if [ -z "${response}" ] | ||||
| then | ||||
|   echo "INFO: There appear to be no more shows with the status \"METADATA_PROCESSED\"." | ||||
|   echo "Getting a list of all the reservations." | ||||
|   curl --silent --netrc-file ${HOME}/.netrc "https://hub.hackerpublicradio.org/cms/status.php" | sort -n | ||||
|   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}' )" | ||||
| email_unpadded="$( echo $email | sed 's/.nospam@nospam./@/g' )" | ||||
|  | ||||
| upload_dir="/home/hpr/upload/${timestamp_epoc}_${ep_num}_${ep_date}_${key}" | ||||
| source_dir="hpr:${upload_dir}" | ||||
| dest_dir="${timestamp_epoc}_${ep_num}_${ep_date}_${key}" | ||||
|  | ||||
| ssh hpr -t "detox -v ${upload_dir}/" | ||||
|  | ||||
| echo "INFO: Downloading hpr${ep_num} from ${email_unpadded}" | ||||
| echo "" | ||||
| echo rsync -ave ssh --partial --progress ${source_dir}/ ${processing_dir}/${dest_dir}/ | ||||
| rsync -ave ssh --partial --progress ${source_dir}/ ${processing_dir}/${dest_dir}/ | ||||
| echo "" | ||||
| echo "INFO: Working directory is \"${processing_dir}/${dest_dir}/\"" | ||||
| echo "" | ||||
|  | ||||
| shownotes_json="${processing_dir}/${dest_dir}/shownotes.json" | ||||
|  | ||||
| if [ ! -s "${shownotes_json}" ] | ||||
| then | ||||
|   echo "ERROR: \"${shownotes_json}\" is missing" | ||||
|   exit 2 | ||||
| fi | ||||
|  | ||||
| if [ "$( file "${shownotes_json}" | grep -ic "text" )" -eq 0 ] | ||||
| then | ||||
|   echo "ERROR: \"${shownotes_json}\" is not a text file" | ||||
|   exit 3 | ||||
| fi | ||||
|  | ||||
|  | ||||
| jq '.' "${shownotes_json}" | sponge  "${shownotes_json}" | ||||
|  | ||||
| ################### | ||||
| # Get the media | ||||
| # | ||||
|  | ||||
| remote_media="$( jq --raw-output '.metadata.POST.url' "${processing_dir}/${dest_dir}/shownotes.json" )" | ||||
|  | ||||
| if [ -n "${remote_media}" ] | ||||
| then | ||||
|   echo "INFO: Fetching remote media from \"${remote_media}\"" | ||||
|   wget --timestamping  --directory-prefix="${processing_dir}/${dest_dir}/" "${remote_media}" | ||||
|   if [ $? -ne 0 ] | ||||
|   then | ||||
|     echo "ERROR: Could not get the remote media" | ||||
|     exit 5 | ||||
|   fi | ||||
| fi | ||||
|  | ||||
| shownotes_html="${processing_dir}/${dest_dir}/shownotes.html" | ||||
| if [ ! -s "${shownotes_html}" ] | ||||
| then | ||||
|   echo "ERROR: \"${shownotes_html}\" is missing" | ||||
|   exit 4 | ||||
| fi | ||||
|  | ||||
| shownotes_txt="${processing_dir}/${dest_dir}/shownotes.txt" | ||||
| if [ ! -s "${shownotes_txt}" ] | ||||
| then | ||||
|   echo "ERROR: \"${shownotes_txt}\" is missing" | ||||
|   exit 7 | ||||
| fi | ||||
| xdg-open "${shownotes_txt}" >/dev/null 2>&1 & | ||||
| xdg-open "${shownotes_json}" >/dev/null 2>&1 & | ||||
| xdg-open "${shownotes_html}" >/dev/null 2>&1 & | ||||
|  | ||||
| read -p "Does the metadata 'look ok ? (N|y) ? " -n 1 -r | ||||
| echo    # (optional) move to a new line | ||||
| if [[ ! $REPLY =~ ^[yY]$ ]] | ||||
| then | ||||
|   echo "skipping...." | ||||
|   exit 22 | ||||
| fi | ||||
|  | ||||
| media=$( find "${processing_dir}/${dest_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 \"${processing_dir}/${dest_dir}/\"" | ||||
|   find "${processing_dir}/${dest_dir}/" -type f | ||||
|   exit 1 | ||||
| fi | ||||
|  | ||||
| the_show_media="" | ||||
|  | ||||
| if [ "$( echo "${media}" | wc -l )" -ne 1 ] | ||||
| then | ||||
|   echo "Multiple files found. Which one do you want to use ?" | ||||
|   select this_media in $( echo "${media}" ) | ||||
|   do  | ||||
|     echo "INFO: You selected \"${this_media}\"." | ||||
|     ls -al "${this_media}" | ||||
|     the_show_media="${this_media}" | ||||
|     break | ||||
|   done | ||||
| else | ||||
|   echo "INFO: Selecting media as \"${media}\"." | ||||
|   the_show_media="${media}" | ||||
| fi | ||||
|  | ||||
| duration=$( \date -ud "1970-01-01 $( ffprobe -i "${the_show_media}" 2>&1| awk -F ': |, ' '/Duration:/ { print $2 }' )" +%s ) | ||||
|  | ||||
| ################### | ||||
| # Gather episode information | ||||
| # | ||||
|  | ||||
| if [ "$( curl --silent --write-out '%{http_code}'  http://hackerpublicradio.org/say.php?id=${ep_num} --output /dev/null )" == 200 ] | ||||
| then | ||||
|   echo "ERROR: The Episode hpr${ep_num} has already been posted" | ||||
|   exit 6 | ||||
| fi | ||||
|  | ||||
| if [ "$( jq --raw-output '.metadata.Episode_Number' ${shownotes_json} )" != "${ep_num}" ] | ||||
| then | ||||
|   echo "ERROR: The Episode_Number: \"${ep_num}\" was not found in \"${shownotes_json}\"" | ||||
|   exit 10 | ||||
| fi | ||||
|  | ||||
| if [ "$( jq --raw-output '.metadata.Episode_Date' ${shownotes_json} )" != "${ep_date}" ] | ||||
| then | ||||
|   echo "ERROR: The Episode_Date: \"${ep_date}\" was not found in \"${shownotes_json}\"" | ||||
|   exit 8 | ||||
| fi | ||||
|  | ||||
| if [ "$( jq --raw-output '.host.Host_Email' ${shownotes_json} )" != "${email_unpadded}" ] | ||||
| then | ||||
|   echo "ERROR: The Host_Email: \"${email_unpadded}\" was not found in \"${shownotes_json}\"" | ||||
|   exit 9 | ||||
| fi | ||||
|  | ||||
| ################### | ||||
| # Assemble the components | ||||
| # | ||||
| # https://newbedev.com/how-to-urlencode-data-for-curl-command/ | ||||
| hostid="$( jq --raw-output '.host.Host_ID' ${shownotes_json} | jq --slurp --raw-input @uri | sed -e 's/%0A"$//g' -e 's/^"//g'  )" | ||||
| host_name="$( jq --raw-output '.host.Host_Name' ${shownotes_json} | jq --slurp --raw-input @uri | sed -e 's/%0A"$//g' -e 's/^"//g' )" | ||||
| title=$( jq --raw-output '.episode.Title' ${shownotes_json} | jq --slurp --raw-input @uri | sed -e 's/%0A"$//g' -e 's/^"//g' ) | ||||
| summary="$( jq --raw-output '.episode.Summary' ${shownotes_json} | jq --slurp --raw-input @uri | sed -e 's/%0A"$//g' -e 's/^"//g'  )" | ||||
| series="$( jq --raw-output '.episode.Series' ${shownotes_json} | jq --slurp --raw-input @uri | sed -e 's/%0A"$//g' -e 's/^"//g'  )" | ||||
| series_name="$( jq --raw-output '.episode.Series_Name' ${shownotes_json} | jq --slurp --raw-input @uri | sed -e 's/%0A"$//g' -e 's/^"//g' )" | ||||
| explicit="$( jq --raw-output '.episode.Explicit' ${shownotes_json} | jq --slurp --raw-input @uri | sed -e 's/%0A"$//g' -e 's/^"//g'  )" | ||||
| episode_license="$( jq --raw-output '.episode.Show_License' ${shownotes_json}  | jq --slurp --raw-input @uri | sed -e 's/%0A"$//g' -e 's/^"//g' )" | ||||
| tags="$( jq --raw-output '.episode.Tags' ${shownotes_json} | jq --slurp --raw-input @uri | sed -e 's/%0A"$//g' -e 's/^"//g' )" | ||||
| host_license=$( jq --raw-output '.host.Host_License' ${shownotes_json} | jq --slurp --raw-input @uri | sed -e 's/%0A"$//g' -e 's/^"//g' ) | ||||
| host_profile=$( jq --raw-output '.host.Host_Profile' ${shownotes_json} | jq --slurp --raw-input @uri | sed -e 's/%0A"$//g' -e 's/^"//g' ) | ||||
|  | ||||
| # notes="$( grep -P ":\t" ${shownotes_txt} | awk -F "\t" '{print $2}' )" | ||||
| notes="$( cat "${shownotes_html}" | jq --slurp --raw-input @uri | sed -e 's/%0A"$//g' -e 's/^"//g'  )" | ||||
|  | ||||
| if [ $# -gt 0 ] | ||||
| then | ||||
|   declare -A hash | ||||
|   for argument | ||||
|   do | ||||
|     if [[ $argument =~ ^[^=]+=.*$ ]] | ||||
|     then | ||||
|       this_key="${argument%=*}"                                 # "${} Kate format hack | ||||
|       this_value="${argument#*=}"                               # "${} Kate format hack | ||||
|       this_value="$( echo "${this_value}" | jq --slurp --raw-input @uri | sed -e 's/%0A"$//g' -e 's/^"//g'  )" | ||||
|       eval "${this_key}=${this_value}" | ||||
|       echo "INFO: Replacing \"${this_key}\" with \"${this_value}\"." | ||||
|     fi | ||||
|   done | ||||
| fi | ||||
|  | ||||
| if [ "${hostid}" == '0' ] | ||||
| then | ||||
|   echo "ERROR: The hostid is 0. Create the host and use \"hostid=???\" to override" | ||||
|   exit 11 | ||||
| fi | ||||
|  | ||||
| # # # # has to be done here as we need to know the hostid | ||||
| # # # host_photo="$( jq --raw-output '.metadata.FILES.host_photo.name' ${shownotes_json} )" | ||||
| # # # if [ -n "${host_photo}" ] | ||||
| # # # then | ||||
| # # #   host_photo="${processing_dir}/${dest_dir}/photo" | ||||
| # # #   host_avatar="${git_image_dir}/${hostid}.png" | ||||
| # # #   echo "INFO: Found host photo \"${host_photo}\"" | ||||
| # # #   gm convert "${host_photo}" -resize x80 "${host_avatar}" | ||||
| # # #   xdg-open "${host_avatar}" | ||||
| # # #   read -p "Does the avatar 'look ok ? (N|y) ? " -n 1 -r | ||||
| # # #   echo    # (optional) move to a new line | ||||
| # # #   if [[ ! $REPLY =~ ^[yY]$ ]] | ||||
| # # #   then | ||||
| # # #     echo "ERROR: Problem with avatar...." | ||||
| # # #     exit 12 | ||||
| # # #   else | ||||
| # # #     echo "INFO: Copying avatar to the server." | ||||
| # # #     scp "${host_avatar}" hpr:www/images/hosts/ | ||||
| # # #   fi | ||||
| # # # fi | ||||
|  | ||||
|  | ||||
| ################### | ||||
| # Post show to HPR | ||||
| # | ||||
|  | ||||
| post_show="${processing_dir}/${dest_dir}/post_show.txt" | ||||
| post_show_response="${processing_dir}/${dest_dir}/post_show_response.txt" | ||||
|  | ||||
| echo "key=${key}&ep_num=${ep_num}&ep_date=${ep_date}&email=${email}&title=${title}&duration=${duration}&summary=${summary}&series=${series}&series_name=${series_name}&explicit=${explicit}&episode_license=${episode_license}&tags=${tags}&hostid=${hostid}&host_name=${host_name}&host_license=${host_license}&host_profile=${host_profile}¬es=${notes}" > ${post_show} | ||||
|  | ||||
| echo "Sending:" | ||||
| cat "${post_show}" | ||||
| echo "key=${key} | ||||
| ep_num=${ep_num} | ||||
| ep_date=${ep_date} | ||||
| email=${email} | ||||
| title=${title} | ||||
| duration=${duration} | ||||
| summary=${summary} | ||||
| series=${series} | ||||
| series_name=${series_name} | ||||
| explicit=${explicit} | ||||
| episode_license=${episode_license} | ||||
| tags=${tags} | ||||
| hostid=${hostid} | ||||
| host_name=${host_name} | ||||
| host_license=${host_license} | ||||
| host_profile=${host_profile} | ||||
| notes=${notes}" | ||||
|  | ||||
| wget --post-file="${post_show}" "https://hub.hackerpublicradio.org/cms/add_show.php" -O - #"${post_show_response}" | ||||
|  | ||||
| # /home/ken/sourcecode/personal/bin/hpr-publish.bash | ||||
| #  | ||||
| # xdg-open "https://hackerpublicradio.org/eps/hpr${ep_num}/index.html" >/dev/null 2>&1 & | ||||
| @@ -1,54 +0,0 @@ | ||||
| #!/usr/bin/env bash | ||||
| # Copyright Ken Fallon - Released into the public domain. http://creativecommons.org/publicdomain/  | ||||
| #============================================================ | ||||
|  | ||||
| upload_dir="/home/hpr/upload" | ||||
| reserve_dir="/home/hpr/reserve" | ||||
| hub_dir="/home/hpr/hub" | ||||
| reserve_file="${hub_dir}/reserve.txt" | ||||
|  | ||||
| while read reserve_show_dir | ||||
| do | ||||
|   echo "Processing \"${reserve_show_dir}\"" | ||||
|   shownotes="${reserve_show_dir}/shownotes.json" | ||||
|   if [ ! -s "${shownotes}" ] | ||||
|   then | ||||
|     echo "ERROR: \"${shownotes}\" not found" | ||||
|     exit 1 | ||||
|   fi | ||||
|   host_id="$( jq --raw-output '.host.Host_ID' "${shownotes}" )" | ||||
|   if [ "${host_id}" -eq "0" ] | ||||
|   then | ||||
|     echo "ERROR: New host detected \"${host_id}\" post the first show to the regular queue." | ||||
|     exit 1 | ||||
|   fi | ||||
|    | ||||
|   metadata_url="$( jq --raw-output '.metadata.url' "${shownotes}" )" | ||||
|   if [ -n "${metadata_url}" ] | ||||
|   then | ||||
|     save_name=$( basename "${metadata_url}" | sed -e 's/[^A-Za-z0-9.]/_/g' -e 's/__/_/g' ) | ||||
|     wget "${metadata_url}" -O "${reserve_show_dir}/${save_name}" | ||||
|     if [ ! -s "${reserve_show_dir}/${save_name}" ] | ||||
|     then | ||||
|       echo "ERROR: \"${metadata_url}\" needs to be downloaded as \"${reserve_show_dir}/${save_name}\"" | ||||
|       exit 1 | ||||
|     fi     | ||||
|   fi | ||||
|   Host_ID="$( jq --raw-output '.host.Host_ID' "${shownotes}" )" | ||||
|   Host_Name="$( jq --raw-output '.host.Host_Name' "${shownotes}" | sed -e 's/[^A-Za-z0-9]/_/g' -e 's/__/_/g' )" | ||||
|   Key="$( jq --raw-output '.metadata.Key' "${shownotes}" )" | ||||
|   Timestamp="$( jq --raw-output '.metadata.Timestamp' "${shownotes}" )" | ||||
|   Title="$( jq --raw-output '.episode.Title' "${shownotes}" | sed -e 's/[^A-Za-z0-9]/_/g' -e 's/__/_/g')" | ||||
|   Timestamp_Epoch="$( \date -u +%s -d "${Timestamp}" )" | ||||
|   mv -v "${reserve_show_dir}" "${reserve_dir}/${Timestamp_Epoch}_${Host_ID}_${Key}_${Host_Name}_${Title}" | ||||
| done  < <( find "${upload_dir}" -type d -iname "*_9999_*" ) | ||||
|  | ||||
| detox -r -v "${reserve_dir}" | ||||
|  | ||||
| ls -1 "${reserve_dir}" | awk -F '_' '{ $2=""; $3=""; print}' | while read line | ||||
| do | ||||
|   upload_epoch="$( echo "${line}" | awk '{print $1}' )" | ||||
|   upload_iso8601="$( \date -d "@${upload_epoch}" +%Y-%m-%d )" | ||||
|   echo "${upload_iso8601} $( echo ${line} | awk '{ $1=""; print}' )" | ||||
| done > "${reserve_file}" | ||||
| nl "${reserve_file}" | ||||
		Reference in New Issue
	
	Block a user