forked from HPR/hpr-tools
		
	Cleanup of the show processing workflow
This commit is contained in:
		
										
											Binary file not shown.
										
									
								
							| Before Width: | Height: | Size: 15 KiB | 
							
								
								
									
										268
									
								
								workflow/hprid
									
									
									
									
									
								
							
							
						
						
									
										268
									
								
								workflow/hprid
									
									
									
									
									
								
							| @@ -1,268 +0,0 @@ | ||||
| #!/bin/bash | ||||
| # hprid | ||||
|  | ||||
| ################################################################################ | ||||
| # | ||||
| # script to prepare audio files for HPR shows | ||||
| # | ||||
| # input: mp3 or ogg file | ||||
| # result: mp3, ogg in 44100 Hz, spx files 16000Hz with intro and outro | ||||
| # provides 3 interactive checks for audio quality, intro and outro | ||||
| # | ||||
| ################################################################################ | ||||
| # This file is part of the HPR Tool set | ||||
| #  | ||||
| # HPR Tool set is free software: you can redistribute it and/or modify | ||||
| # it under the terms of the GNU Affero General Public License as published by | ||||
| # the Free Software Foundation, either version 3 of the License, or | ||||
| # (at your option) any later version. | ||||
| #  | ||||
| # HPR Tool set is distributed in the hope that it will be useful, | ||||
| # but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
| # GNU Affero General Public License for more details. | ||||
| #  | ||||
| # You should have received a copy of the GNU Affero General Public License | ||||
| # along with HPR Tool set.  If not, see <http://www.gnu.org/licenses/>. | ||||
| # http://www.gnu.org/licenses/agpl-3.0.html | ||||
| # ######################################################################### | ||||
|  | ||||
| ################################################################################ | ||||
| # | ||||
| # PREREQUISITS | ||||
| # - current folder has to be writable | ||||
| # - there should NOT be a temp.ogg or temp.mp3 file | ||||
| # - intro.mp3 and outro.mp3 have to be present | ||||
| # - IMPORTANT: sox compiled with mp3 support | ||||
| #                see http://a0u.xanga.com/700438974/howto-soc-installation | ||||
| # | ||||
| # | ||||
| # IMPORTANT | ||||
| # Backup the files before feeding them to this script, no guarantees here | ||||
| # Handling of .wav not yet tested, but it should work  | ||||
| # | ||||
| # code.cruncher, May 2011 | ||||
| #  | ||||
| ################################################################################ | ||||
|  | ||||
| ################################################################################ | ||||
| # | ||||
| # TODO | ||||
| #  | ||||
| # test handling of wav files | ||||
| # add play final files or open them in specific player(s) | ||||
| # add handling of ID3 tags | ||||
| # create html interface for standardized info gathering  | ||||
| # | ||||
| ################################################################################ | ||||
|  | ||||
|  | ||||
| #============================================================ | ||||
| # Check input | ||||
| usage="usage: $(basename $0 ) [ -i ] [ -o ] <fname>, -i to add intro and -o outro, fname is a file with audio for HPR" | ||||
|  | ||||
| CHANNELS="1" | ||||
| ADDINTRO="n" | ||||
| ADDOUTRO="n" | ||||
|  | ||||
|  | ||||
| while getopts "io" opt; do | ||||
|     case $opt in | ||||
|         i ) | ||||
|             ADDINTRO="y" | ||||
|             ;; | ||||
|         o ) | ||||
|             ADDOUTRO="y" | ||||
|             ;; | ||||
|     esac | ||||
| done | ||||
| shift $(($OPTIND - 1)) | ||||
|  | ||||
| # if not ${mediafile} return usage | ||||
| if [ $# -lt 1 ]; then | ||||
|   echo $usage | ||||
|   exit 1 | ||||
| fi | ||||
|  | ||||
| mediafile=${1} | ||||
|  | ||||
| # test if file exists  | ||||
| if [ ! -f "intro.flac" ]; then | ||||
|   echo "sorry, file \"intro.flac\" does not exist" | ||||
|   echo "To download it run the command:" | ||||
|   echo "   wget http://hackerpublicradio.org/media/theme-music/intro.flac" | ||||
|   exit 1 | ||||
| fi | ||||
|  | ||||
| if [ ! -f "outro.flac" ]; then | ||||
|   echo "sorry, file \"outro.flac\" does not exist" | ||||
|   echo "To download it run the command:" | ||||
|   echo "   wget http://hackerpublicradio.org/media/theme-music/outro.flac" | ||||
|   exit 1 | ||||
| fi | ||||
|  | ||||
| for mediafile in "$@" | ||||
| do | ||||
|     echo $var    | ||||
|  | ||||
|     if [ ! -f "${mediafile}" ]; then | ||||
|         echo "sorry, file \"${mediafile}\" does not exist" | ||||
|         continue | ||||
|     fi | ||||
|  | ||||
|     # test if file exists  | ||||
|     if [ ! -r "${mediafile}" ]; then | ||||
|         echo "sorry, file \"${mediafile}\" is not readable" | ||||
|         continue | ||||
|     fi | ||||
|  | ||||
|     if [ $(ffprobe "${mediafile}" 2>&1 | grep "Audio:" | wc -l ) -eq 0 ]; then | ||||
|         echo "sorry, file \"${mediafile}\" has no audio track" | ||||
|         continue | ||||
|     fi | ||||
|  | ||||
|     # extract file name and extension | ||||
|     fname=${mediafile%.*} | ||||
|     ext=${mediafile/*./} | ||||
|  | ||||
|     #Make a backup | ||||
|     # mediafilebackup=${mediafile}_$(md5sum ${mediafile} | cut -c -32 )_orig.${ext} | ||||
|     # cp -v ${mediafile} ${mediafilebackup} | ||||
|     #  | ||||
|     # if [[ ! -e ${mediafilebackup} ]]; then | ||||
|     #   echo "Backup not made: ${mediafilebackup}" | ||||
|     #   exit | ||||
|     # fi | ||||
|  | ||||
|     # check audio quality | ||||
|     dur=7			# playtime of sample in seconds | ||||
|     go=1			# variable to repeat playing of sample | ||||
|     from=180                # start sample at 3 minutes in | ||||
|  | ||||
|     #============================================================ | ||||
|     # Question Time | ||||
|  | ||||
|     # # # while [ $go -ne 0 ] | ||||
|     # # # do | ||||
|     # # #   echo | ||||
|     # # #   echo "--------------------------------------------------------------------------------" | ||||
|     # # #   echo "1/4 AUDIO TEST: check audio quality: ... playing $dur seconds ..."  | ||||
|     # # #   play "${mediafile}" trim $from $dur | ||||
|     # # #   ((from+=180))           # next sample will be 3 minutes later | ||||
|     # # #   read -s -n1 -p "sound quality ok?[y,n] ... or play another sample[a] ... [y,n,a]" | ||||
|     # # #   echo | ||||
|     # # #   case "$REPLY" in | ||||
|     # # #     n) echo "aborting ... get better quality sound file ... good bye!"; exit 0;; | ||||
|     # # #     y) go=0;; | ||||
|     # # #   esac | ||||
|     # # # done | ||||
|     # # #  | ||||
|     # # # # Check for intro | ||||
|     # # # echo | ||||
|     # # # echo "--------------------------------------------------------------------------------" | ||||
|     # # # echo "2/4 ADDINTRO TEST: Is the intro playing? " | ||||
|     # # # play "${mediafile}" trim 1 5	# play 5 seconds at beginning of file | ||||
|     # # # read -s -n1 -p "Is there a intro? [y, n]" -i "n"; echo | ||||
|     # # # if [ "$REPLY" = 'y' ]; then | ||||
|     # # #   echo "Will add the intro" | ||||
|     # # #   ADDINTRO="y" | ||||
|     # # # fi | ||||
|     # # #  | ||||
|     # # # # Check for outro | ||||
|     # # # echo  | ||||
|     # # # echo "--------------------------------------------------------------------------------" | ||||
|     # # # echo "3/4 ADDOUTRO TEST: Is the outro playing? " | ||||
|     # # # len=$(eval "soxi -D \"${mediafile}\"") | ||||
|     # # # len=$(echo "scale=0; $len - 50" | bc) | ||||
|     # # # play "${mediafile}" trim $len 5 | ||||
|     # # # read -s -n1 -p "Is there a outro ? [y, n]" -i "n"; echo | ||||
|     # # # if [ "$REPLY" = 'y' ]; then | ||||
|     # # #   echo "Will add the outro" | ||||
|     # # #   ADDOUTRO="y" | ||||
|     # # # fi | ||||
|     # # #  | ||||
|     # # #  | ||||
|     # # # echo | ||||
|     # # # echo "--------------------------------------------------------------------------------" | ||||
|     # # # echo "4/4 STEREO TEST: Should this be mono or stereo [m,s] ? " | ||||
|     # # # CHANNELS="1" | ||||
|     # # # read -s -n1 -p "intro ok? [m, s]" -i "m" ; echo | ||||
|     # # # if [ "$REPLY" = 's' ]; then | ||||
|     # # #   echo "Will convert to stereo" | ||||
|     # # #   CHANNELS="2" | ||||
|     # # # fi | ||||
|  | ||||
|     #============================================================ | ||||
|     # Preprocess the source file | ||||
|  | ||||
|     echo "Convert from ${mediafile} to known wav format ${fname}_tmp.wav" | ||||
|     ffmpeg -i ${mediafile} -ar 44100 -ac $CHANNELS ${fname}_tmp.wav > ${fname}_tmp.log 2>&1 | ||||
|  | ||||
|     # echo "Normalising the audio" | ||||
|     # normalize -a 0.5 ${fname}_tmp.wav >> ${fname}_tmp.log 2>&1 | ||||
|  | ||||
|     # TODO Compressor ! | ||||
|  | ||||
|     # TODO add a little speed up | ||||
|  | ||||
|     # TODO little overlap in fade in of intro | ||||
|  | ||||
|     # echo "Truncating the silence" | ||||
|     # sox ${fname}_tmp.wav ${fname}_sox.wav silence -l 1 0.1 1.6% -1 0.6 1.6% >> ${fname}_tmp.log 2>&1 | ||||
|     cp -v  ${fname}_tmp.wav ${fname}_sox.wav | ||||
|  | ||||
|     echo "Add the intro if it is missing and add it to the temp pcm file" | ||||
|     if [ "$ADDINTRO" = 'y' ]; then | ||||
|     ffmpeg -i intro.flac -ar 44100 -ac $CHANNELS -acodec pcm_s16le -f s16le - > ${fname}_tmp.pcm 2>> ${fname}_tmp.log  | ||||
|     fi | ||||
|  | ||||
|     echo "convert the uploaded episode and add it to the temp pcm file" | ||||
|     ffmpeg -i ${fname}_sox.wav -ar 44100 -ac $CHANNELS -acodec pcm_s16le -f s16le - >> ${fname}_tmp.pcm 2>> ${fname}_tmp.log  | ||||
|  | ||||
|     echo "Add the outro if it is missing and add it to the temp pcm file" | ||||
|     if [ "$ADDOUTRO" = 'y' ]; then | ||||
|     ffmpeg -i outro.flac -ar 44100 -ac $CHANNELS -acodec pcm_s16le -f s16le - >> ${fname}_tmp.pcm 2>> ${fname}_tmp.log  | ||||
|     fi | ||||
|  | ||||
|     echo "Convert the pcm file to a know wav format" | ||||
|     ffmpeg -f s16le -ar 44100 -ac 1 -acodec pcm_s16le -i ${fname}_tmp.pcm ${fname}_mez.wav 2>> ${fname}_tmp.log  | ||||
|  | ||||
|     # echo "Get an image of the converted audio" | ||||
|     # sox ${fname}_mez.wav -n  spectrogram -x 800 -y 100 -o ${fname}_mez.png | ||||
|  | ||||
|     echo "--------------------------------------------------------------------------------" | ||||
|     echo "File information" | ||||
|     ffprobe ${fname}_mez.wav 2>&1 | grep Audio: | ||||
|     mediainfo ${fname}_mez.wav | ||||
|  | ||||
|     echo "--------------------------------------------------------------------------------" | ||||
|     # display ${fname}_mez.png & | ||||
|     # read -s -n1 -p "Spectrogram check: Everything look ok [y,n] ? " -i "y" ; echo | ||||
|     # if [ "$REPLY" = 'n' ]; then | ||||
|     #   echo "Something went w  rong. Aborting." | ||||
|     #   exit | ||||
|     # fi | ||||
|  | ||||
|     # echo "--------------------------------------------------------------------------------" | ||||
|     # vlc ${fname}_mez.wav >> ${fname}_tmp.log 2>&1 & | ||||
|     # read -s -n1 -p "VLC check: Everything look ok [y,n] ? " -i "y" ; echo | ||||
|     # if [ "$REPLY" = 'n' ]; then | ||||
|     #   echo "Something went wrong. Aborting." | ||||
|     #   exit | ||||
|     # fi | ||||
|  | ||||
|     echo "Remove temp files" | ||||
|     rm -v ${fname}_tmp.wav ${fname}_sox.wav ${fname}_tmp.pcm ${fname}_tmp.log | ||||
|  | ||||
|     echo "Convert to mp3" # TODO and add tags" | ||||
|     sox -S ${fname}_mez.wav ${fname}_mez.mp3  | ||||
|  | ||||
|     echo "Convert to ogg" # TODO and add tags" | ||||
|     sox -S ${fname}_mez.wav ${fname}_mez.ogg | ||||
|  | ||||
|     echo "Convert to spx" # TODO and add tags" | ||||
|     sox -S ${fname}_mez.wav -c 1 -r 16000 -t wav  - | speexenc - ${fname}_mez.spx | ||||
|  | ||||
|     echo "Changing the file dates to the time of upload" | ||||
|     touch -r ${mediafile} ${fname}* | ||||
| done | ||||
| @@ -1,268 +0,0 @@ | ||||
| #!/bin/bash | ||||
| # hprid | ||||
|  | ||||
| ################################################################################ | ||||
| # | ||||
| # script to prepare audio files for HPR shows | ||||
| # | ||||
| # input: mp3 or ogg file | ||||
| # result: mp3, ogg in 44100 Hz, spx files 16000Hz with intro and outro | ||||
| # provides 3 interactive checks for audio quality, intro and outro | ||||
| # | ||||
| ################################################################################ | ||||
| # This file is part of the HPR Tool set | ||||
| #  | ||||
| # HPR Tool set is free software: you can redistribute it and/or modify | ||||
| # it under the terms of the GNU Affero General Public License as published by | ||||
| # the Free Software Foundation, either version 3 of the License, or | ||||
| # (at your option) any later version. | ||||
| #  | ||||
| # HPR Tool set is distributed in the hope that it will be useful, | ||||
| # but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
| # GNU Affero General Public License for more details. | ||||
| #  | ||||
| # You should have received a copy of the GNU Affero General Public License | ||||
| # along with HPR Tool set.  If not, see <http://www.gnu.org/licenses/>. | ||||
| # http://www.gnu.org/licenses/agpl-3.0.html | ||||
| # ######################################################################### | ||||
|  | ||||
| ################################################################################ | ||||
| # | ||||
| # PREREQUISITS | ||||
| # - current folder has to be writable | ||||
| # - there should NOT be a temp.ogg or temp.mp3 file | ||||
| # - intro.mp3 and outro.mp3 have to be present | ||||
| # - IMPORTANT: sox compiled with mp3 support | ||||
| #                see http://a0u.xanga.com/700438974/howto-soc-installation | ||||
| # | ||||
| # | ||||
| # IMPORTANT | ||||
| # Backup the files before feeding them to this script, no guarantees here | ||||
| # Handling of .wav not yet tested, but it should work  | ||||
| # | ||||
| # code.cruncher, May 2011 | ||||
| #  | ||||
| ################################################################################ | ||||
|  | ||||
| ################################################################################ | ||||
| # | ||||
| # TODO | ||||
| #  | ||||
| # test handling of wav files | ||||
| # add play final files or open them in specific player(s) | ||||
| # add handling of ID3 tags | ||||
| # create html interface for standardized info gathering  | ||||
| # | ||||
| ################################################################################ | ||||
|  | ||||
|  | ||||
| #============================================================ | ||||
| # Check input | ||||
| usage="usage: $(basename $0 ) [ -i ] [ -o ] <fname>, -i to add intro and -o outro, fname is a file with audio for HPR" | ||||
|  | ||||
| CHANNELS="1" | ||||
| ADDINTRO="n" | ||||
| ADDOUTRO="n" | ||||
|  | ||||
|  | ||||
| while getopts "io" opt; do | ||||
|     case $opt in | ||||
|         i ) | ||||
|             ADDINTRO="y" | ||||
|             ;; | ||||
|         o ) | ||||
|             ADDOUTRO="y" | ||||
|             ;; | ||||
|     esac | ||||
| done | ||||
| shift $(($OPTIND - 1)) | ||||
|  | ||||
| # if not ${mediafile} return usage | ||||
| if [ $# -lt 1 ]; then | ||||
|   echo $usage | ||||
|   exit 1 | ||||
| fi | ||||
|  | ||||
| mediafile=${1} | ||||
|  | ||||
| # test if file exists  | ||||
| if [ ! -f "intro.flac" ]; then | ||||
|   echo "sorry, file \"intro.flac\" does not exist" | ||||
|   echo "To download it run the command:" | ||||
|   echo "   wget http://hackerpublicradio.org/media/theme-music/intro.flac" | ||||
|   exit 1 | ||||
| fi | ||||
|  | ||||
| if [ ! -f "outro.flac" ]; then | ||||
|   echo "sorry, file \"outro.flac\" does not exist" | ||||
|   echo "To download it run the command:" | ||||
|   echo "   wget http://hackerpublicradio.org/media/theme-music/outro.flac" | ||||
|   exit 1 | ||||
| fi | ||||
|  | ||||
| for mediafile in "$@" | ||||
| do | ||||
|     echo $var    | ||||
|  | ||||
|     if [ ! -f "${mediafile}" ]; then | ||||
|         echo "sorry, file \"${mediafile}\" does not exist" | ||||
|         continue | ||||
|     fi | ||||
|  | ||||
|     # test if file exists  | ||||
|     if [ ! -r "${mediafile}" ]; then | ||||
|         echo "sorry, file \"${mediafile}\" is not readable" | ||||
|         continue | ||||
|     fi | ||||
|  | ||||
|     if [ $(ffprobe "${mediafile}" 2>&1 | grep "Audio:" | wc -l ) -eq 0 ]; then | ||||
|         echo "sorry, file \"${mediafile}\" has no audio track" | ||||
|         continue | ||||
|     fi | ||||
|  | ||||
|     # extract file name and extension | ||||
|     fname=${mediafile%.*} | ||||
|     ext=${mediafile/*./} | ||||
|  | ||||
|     #Make a backup | ||||
|     # mediafilebackup=${mediafile}_$(md5sum ${mediafile} | cut -c -32 )_orig.${ext} | ||||
|     # cp -v ${mediafile} ${mediafilebackup} | ||||
|     #  | ||||
|     # if [[ ! -e ${mediafilebackup} ]]; then | ||||
|     #   echo "Backup not made: ${mediafilebackup}" | ||||
|     #   exit | ||||
|     # fi | ||||
|  | ||||
|     # check audio quality | ||||
|     dur=7			# playtime of sample in seconds | ||||
|     go=1			# variable to repeat playing of sample | ||||
|     from=180                # start sample at 3 minutes in | ||||
|  | ||||
|     #============================================================ | ||||
|     # Question Time | ||||
|  | ||||
|     # # # while [ $go -ne 0 ] | ||||
|     # # # do | ||||
|     # # #   echo | ||||
|     # # #   echo "--------------------------------------------------------------------------------" | ||||
|     # # #   echo "1/4 AUDIO TEST: check audio quality: ... playing $dur seconds ..."  | ||||
|     # # #   play "${mediafile}" trim $from $dur | ||||
|     # # #   ((from+=180))           # next sample will be 3 minutes later | ||||
|     # # #   read -s -n1 -p "sound quality ok?[y,n] ... or play another sample[a] ... [y,n,a]" | ||||
|     # # #   echo | ||||
|     # # #   case "$REPLY" in | ||||
|     # # #     n) echo "aborting ... get better quality sound file ... good bye!"; exit 0;; | ||||
|     # # #     y) go=0;; | ||||
|     # # #   esac | ||||
|     # # # done | ||||
|     # # #  | ||||
|     # # # # Check for intro | ||||
|     # # # echo | ||||
|     # # # echo "--------------------------------------------------------------------------------" | ||||
|     # # # echo "2/4 ADDINTRO TEST: Is the intro playing? " | ||||
|     # # # play "${mediafile}" trim 1 5	# play 5 seconds at beginning of file | ||||
|     # # # read -s -n1 -p "Is there a intro? [y, n]" -i "n"; echo | ||||
|     # # # if [ "$REPLY" = 'y' ]; then | ||||
|     # # #   echo "Will add the intro" | ||||
|     # # #   ADDINTRO="y" | ||||
|     # # # fi | ||||
|     # # #  | ||||
|     # # # # Check for outro | ||||
|     # # # echo  | ||||
|     # # # echo "--------------------------------------------------------------------------------" | ||||
|     # # # echo "3/4 ADDOUTRO TEST: Is the outro playing? " | ||||
|     # # # len=$(eval "soxi -D \"${mediafile}\"") | ||||
|     # # # len=$(echo "scale=0; $len - 50" | bc) | ||||
|     # # # play "${mediafile}" trim $len 5 | ||||
|     # # # read -s -n1 -p "Is there a outro ? [y, n]" -i "n"; echo | ||||
|     # # # if [ "$REPLY" = 'y' ]; then | ||||
|     # # #   echo "Will add the outro" | ||||
|     # # #   ADDOUTRO="y" | ||||
|     # # # fi | ||||
|     # # #  | ||||
|     # # #  | ||||
|     # # # echo | ||||
|     # # # echo "--------------------------------------------------------------------------------" | ||||
|     # # # echo "4/4 STEREO TEST: Should this be mono or stereo [m,s] ? " | ||||
|     # # # CHANNELS="1" | ||||
|     # # # read -s -n1 -p "intro ok? [m, s]" -i "m" ; echo | ||||
|     # # # if [ "$REPLY" = 's' ]; then | ||||
|     # # #   echo "Will convert to stereo" | ||||
|     # # #   CHANNELS="2" | ||||
|     # # # fi | ||||
|  | ||||
|     #============================================================ | ||||
|     # Preprocess the source file | ||||
|  | ||||
|     echo "Convert from ${mediafile} to known wav format ${fname}_tmp.wav" | ||||
|     ffmpeg -i ${mediafile} -ar 44100 -ac $CHANNELS ${fname}_tmp.wav > ${fname}_tmp.log 2>&1 | ||||
|  | ||||
|     # echo "Normalising the audio" | ||||
|     # normalize -a 0.5 ${fname}_tmp.wav >> ${fname}_tmp.log 2>&1 | ||||
|  | ||||
|     # TODO Compressor ! | ||||
|  | ||||
|     # TODO add a little speed up | ||||
|  | ||||
|     # TODO little overlap in fade in of intro | ||||
|  | ||||
|     # echo "Truncating the silence" | ||||
|     # sox ${fname}_tmp.wav ${fname}_sox.wav silence -l 1 0.1 1.6% -1 0.6 1.6% >> ${fname}_tmp.log 2>&1 | ||||
|     cp -v  ${fname}_tmp.wav ${fname}_sox.wav | ||||
|  | ||||
|     echo "Add the intro if it is missing and add it to the temp pcm file" | ||||
|     if [ "$ADDINTRO" = 'y' ]; then | ||||
|     ffmpeg -i intro.flac -ar 44100 -ac $CHANNELS -acodec pcm_s16le -f s16le - > ${fname}_tmp.pcm 2>> ${fname}_tmp.log  | ||||
|     fi | ||||
|  | ||||
|     echo "convert the uploaded episode and add it to the temp pcm file" | ||||
|     ffmpeg -i ${fname}_sox.wav -ar 44100 -ac $CHANNELS -acodec pcm_s16le -f s16le - >> ${fname}_tmp.pcm 2>> ${fname}_tmp.log  | ||||
|  | ||||
|     echo "Add the outro if it is missing and add it to the temp pcm file" | ||||
|     if [ "$ADDOUTRO" = 'y' ]; then | ||||
|     ffmpeg -i outro.flac -ar 44100 -ac $CHANNELS -acodec pcm_s16le -f s16le - >> ${fname}_tmp.pcm 2>> ${fname}_tmp.log  | ||||
|     fi | ||||
|  | ||||
|     echo "Convert the pcm file to a know wav format" | ||||
|     ffmpeg -f s16le -ar 44100 -ac 1 -acodec pcm_s16le -i ${fname}_tmp.pcm ${fname}_mez.wav 2>> ${fname}_tmp.log  | ||||
|  | ||||
|     # echo "Get an image of the converted audio" | ||||
|     # sox ${fname}_mez.wav -n  spectrogram -x 800 -y 100 -o ${fname}_mez.png | ||||
|  | ||||
|     echo "--------------------------------------------------------------------------------" | ||||
|     echo "File information" | ||||
|     ffprobe ${fname}_mez.wav 2>&1 | grep Audio: | ||||
|     mediainfo ${fname}_mez.wav | ||||
|  | ||||
|     echo "--------------------------------------------------------------------------------" | ||||
|     # display ${fname}_mez.png & | ||||
|     # read -s -n1 -p "Spectrogram check: Everything look ok [y,n] ? " -i "y" ; echo | ||||
|     # if [ "$REPLY" = 'n' ]; then | ||||
|     #   echo "Something went w  rong. Aborting." | ||||
|     #   exit | ||||
|     # fi | ||||
|  | ||||
|     # echo "--------------------------------------------------------------------------------" | ||||
|     # vlc ${fname}_mez.wav >> ${fname}_tmp.log 2>&1 & | ||||
|     # read -s -n1 -p "VLC check: Everything look ok [y,n] ? " -i "y" ; echo | ||||
|     # if [ "$REPLY" = 'n' ]; then | ||||
|     #   echo "Something went wrong. Aborting." | ||||
|     #   exit | ||||
|     # fi | ||||
|  | ||||
|     echo "Remove temp files" | ||||
|     rm -v ${fname}_tmp.wav ${fname}_sox.wav ${fname}_tmp.pcm ${fname}_tmp.log | ||||
|  | ||||
|     echo "Convert to mp3" # TODO and add tags" | ||||
|     sox -S ${fname}_mez.wav ${fname}_mez.mp3  | ||||
|  | ||||
|     echo "Convert to ogg" # TODO and add tags" | ||||
|     sox -S ${fname}_mez.wav ${fname}_mez.ogg | ||||
|  | ||||
|     echo "Convert to spx" # TODO and add tags" | ||||
|     sox -S ${fname}_mez.wav -c 1 -r 16000 -t wav  - | speexenc - ${fname}_mez.spx | ||||
|  | ||||
|     echo "Changing the file dates to the time of upload" | ||||
|     touch -r ${mediafile} ${fname}* | ||||
| done | ||||
| @@ -1,422 +0,0 @@ | ||||
| #!/bin/bash | ||||
| # Copyright Ken Fallon - Released into the public domain. http://creativecommons.org/publicdomain/  | ||||
| #============================================================ | ||||
| # Check input | ||||
| usage="usage: $(basename $0 ) [ -i ] [ -o ] <fname>, -i to add intro and -o outro, fname is a file with audio for HPR" | ||||
|  | ||||
| # Argument = -t test -r server -p password -v | ||||
|  | ||||
| echoerr()  | ||||
| {  | ||||
| echo "$@" 1>&2;  | ||||
| } | ||||
|  | ||||
| usage() | ||||
| { | ||||
| cat << EOF | ||||
| usage: $0 [options] {media file to encode} {episode number} | ||||
|  | ||||
| OPTIONS: | ||||
|    -h      Show this message | ||||
|    -p      add a promo | ||||
|    -i      add the intro | ||||
|    -s      Automatically generate the summary | ||||
|    -o      add the outro | ||||
|    -b      add the intro and outro ( and summary default) | ||||
|    -2      encode to 2 channels | ||||
|    -n      no audio normalization | ||||
|    -x      eXclude sponsor mention | ||||
|     | ||||
| EOF | ||||
| } | ||||
|  | ||||
| TEMP_DIR="/var/tmp/" | ||||
| CHANNELS="1" | ||||
| FIXAUDIO="1" | ||||
| ADDSUMMARY="n" | ||||
| ADDINTRO="n" | ||||
| ADDPROMO="n" | ||||
| ADDOUTRO="n" | ||||
| ADDSPONSOR="y" | ||||
| ARTIST="EMPTY" | ||||
| TITLE="EMPTY" | ||||
| YEAR="EMPTY" | ||||
| SLOT="EMPTY" | ||||
| basedir="/var/IA" | ||||
| intro="${basedir}/intro.flac" | ||||
| promo="${basedir}/promo.flac" | ||||
| outro="${basedir}/outro.flac" | ||||
| anhonesthost="${basedir}/sponsor-anhonesthost.com-hpr15.flac" | ||||
| internetarchive="${basedir}/sponsor-archive.org.flac" | ||||
|  | ||||
| while getopts "hipsob2nx" OPTION | ||||
| do | ||||
|      case $OPTION in | ||||
|          h) | ||||
|              usage | ||||
|              exit 1 | ||||
|              ;; | ||||
|          s) | ||||
|              ADDSUMMARY="y" | ||||
|              ;; | ||||
|          i) | ||||
|              ADDINTRO="y" | ||||
|              ;; | ||||
|          p) | ||||
|              ADDPROMO="y" | ||||
|              ;; | ||||
|          o) | ||||
|              ADDOUTRO="y" | ||||
|              ;; | ||||
|          b) | ||||
|              ADDINTRO="y" | ||||
|              ADDOUTRO="y" | ||||
|              ;; | ||||
|          2)  | ||||
|              CHANNELS="2" | ||||
|              ;; | ||||
|          n) | ||||
|              FIXAUDIO="0" | ||||
|              ;;          | ||||
|          x) | ||||
|              ADDSPONSOR="n" | ||||
|              ;;          | ||||
|          ?) | ||||
|              usage | ||||
|              exit | ||||
|              ;; | ||||
|      esac | ||||
| done | ||||
|  | ||||
| shift $(($OPTIND - 1)) | ||||
|  | ||||
| if [ "$#" -ne 2 ]; then | ||||
|     echoerr "Please enter the source file and episode number" | ||||
|     exit | ||||
| fi | ||||
|  | ||||
| mediafile=${1} | ||||
| ep_num=${2} | ||||
|  | ||||
| ep_num=$(echo $ep_num | sed 's/hpr//g') | ||||
| re='^[0-9]+$' | ||||
| if ! [[ $ep_num =~ $re ]] ; then | ||||
|    echoerr "error: episode \"${ep_num}\" is not a number" | ||||
|    exit 1 | ||||
| fi | ||||
|  | ||||
| if [ ! -f "${anhonesthost}" ]; then | ||||
|   echoerr "sorry, file \"${anhonesthost}\" does not exist" | ||||
|   exit 1 | ||||
| fi | ||||
|  | ||||
| if [ ! -f "${internetarchive}" ]; then | ||||
|   echoerr "sorry, file \"${internetarchive}\" does not exist" | ||||
|   exit 1 | ||||
| fi | ||||
|  | ||||
| if [ ! -f "${intro}" ]; then | ||||
|   echoerr "sorry, file \"intro.flac\" does not exist" | ||||
|   exit 1 | ||||
| fi | ||||
|  | ||||
| if [ "$ADDPROMO" = 'y' ]; then | ||||
|   if [ ! -f "${promo}" ]; then | ||||
|     echoerr "sorry, file \"promo.flac\" does not exist" | ||||
|     exit 1 | ||||
|   fi | ||||
| fi | ||||
|  | ||||
| if [ ! -f "${outro}" ]; then | ||||
|   echoerr "sorry, file \"outro.flac\" does not exist" | ||||
|   exit 1 | ||||
| fi | ||||
|  | ||||
| if [ ! -f "${mediafile}" ]; then | ||||
|   echoerr "sorry, media file \"${mediafile}\" does not exist" | ||||
|   exit | ||||
| fi | ||||
|  | ||||
| if [ ! -r "${mediafile}" ]; then | ||||
|   echoerr "sorry, media file \"${mediafile}\" is not readable" | ||||
|   exit | ||||
| fi | ||||
|  | ||||
| if [ $(ffprobe "${mediafile}" 2>&1 | grep "Audio:" | wc -l ) -eq 0 ]; then | ||||
|   echoerr "sorry, media file \"${mediafile}\" has no audio track" | ||||
|   exit | ||||
| fi | ||||
|  | ||||
| # extract file name and extension | ||||
| media_dir=$(dirname ${mediafile}) | ||||
| fname=${mediafile%.*} | ||||
| ext=${mediafile/*./} | ||||
|  | ||||
| if [ "$ADDSUMMARY" = 'n' ]; then | ||||
|   if [ ! -e "${media_dir}/summary.wav" ] | ||||
|   then | ||||
|     echoerr "ERROR: Can not find the summary file \"${media_dir}/summary.wav\"" | ||||
|     wget -O- --timeout=10 --tries=1 --quiet http://hackerpublicradio.org/say.php?id=${ep_num} | grep HPR_summary | ||||
|     exit 1 | ||||
|   fi | ||||
| fi | ||||
|  | ||||
| if [[ -e hpr${ep_num}.wav ]] || [[ -e hpr${ep_num}.mp3 ]] || [[ -e hpr${ep_num}.ogg ]] || [[ -e hpr${ep_num}.spx ]] || [[ -e hpr${ep_num}_summary.wav ]] || [[ -e ${fname}_mez_norm.wav ]] || [[ -e ${fname}_mez.wav ]] || [[ -e ${fname}_sox_norm.wav ]] || [[ -e ${fname}_sox.wav ]] || [[ -e ${fname}_tmp_hh.pcm ]] || [[ -e ${fname}_tmp_ia.pcm ]] || [[ -e ${fname}_tmp.log ]] | ||||
| then | ||||
|   echoerr "Files for this episode already exist." | ||||
|   ls -1 hpr${ep_num}* ${fname}_* 2>/dev/null | ||||
|   exit 1 | ||||
| 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 < <( wget --timeout=10 --tries=1 --quiet http://hackerpublicradio.org/say.php?id=${ep_num} -O - ) | ||||
|  | ||||
| if [[ -z "$ADDINTRO" || -z "$ADDPROMO" || -z "$ADDSUMMARY" || -z "$ADDOUTRO" || -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 | ||||
|   echoerr "Could not find information on ${ep_num}. Has the show been posted ?" | ||||
|   exit; | ||||
| fi | ||||
| echo "--------------------------------------------------------------------------------" | ||||
| echo "Add intro   : $ADDINTRO" | ||||
| echo "Add promo   : $ADDPROMO" | ||||
| echo "Add Summary : $ADDSUMMARY" | ||||
| echo "Add outro   : $ADDOUTRO" | ||||
| 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" | ||||
|  | ||||
| if [[ $HPR_duration == "0" ]] | ||||
| then | ||||
|   echoerr "The duration is set to 0. Please update the show with the correct time." | ||||
|   exit; | ||||
| fi | ||||
|  | ||||
| #============================================================ | ||||
| # Preproc`s the source file | ||||
|  | ||||
| echo "--------------------------------------------------------------------------------" | ||||
| echo "Prepare mezzanine file" | ||||
| ffmpeg -i ${mediafile} -ar 44100 -ac $CHANNELS ${fname}_sox.wav > ${fname}_tmp.log 2>&1 | ||||
|  | ||||
| if [ "$FIXAUDIO" = "1" ];then  | ||||
| 	echo "normalizing audio" | ||||
| 	sox --temp "${TEMP_DIR}" --norm ${fname}_sox.wav ${fname}_sox_norm.wav | ||||
| 	mv -v ${fname}_sox_norm.wav ${fname}_sox.wav >> ${fname}_tmp.log 2>&1 | ||||
| #	normalize -a 0.5 ${fname}_sox.wav >> ${fname}_tmp.log 2>&1 | ||||
| fi | ||||
|  | ||||
| echo "--------------------------------------------------------------------------------" | ||||
| echo "Add HPR Branding" | ||||
|  | ||||
| if [ "$ADDSUMMARY" = 'y' ]; then | ||||
|   echo "Creating the summary" | ||||
|   #echo "$HPR_summary" - | espeak -w hpr${ep_num}_summary.wav | ||||
|   echo "$HPR_summary" - | text2wave - -o hpr${ep_num}_summary.wav #festival --tts | ||||
|   #echo "${HPR_summary}" | gtts-cli - --output hpr${ep_num}_summary.mp3 | ||||
|   #ffmpeg -i hpr${ep_num}_summary.mp3 hpr${ep_num}_summary.wav | ||||
|   #rm -v hpr${ep_num}_summary.mp3 | ||||
| else | ||||
|   echo "Copying the supplied summary" | ||||
|   if [ ! -e "${media_dir}/summary.wav" ] | ||||
|   then | ||||
|     echoerr "ERROR: Can not find the summary file \"${media_dir}/summary.wav\""  | ||||
|     exit 1 | ||||
|   fi | ||||
|   cp -v "${media_dir}/summary.wav" hpr${ep_num}_summary.wav | ||||
| fi | ||||
|  | ||||
| ffmpeg -i hpr${ep_num}_summary.wav -ar 44100 -ac $CHANNELS -acodec pcm_s16le -f s16le - >> ${fname}_tmp_hh.pcm 2>> ${fname}_tmp.log | ||||
| ffmpeg -i hpr${ep_num}_summary.wav -ar 44100 -ac $CHANNELS -acodec pcm_s16le -f s16le - >> ${fname}_tmp_ia.pcm 2>> ${fname}_tmp.log | ||||
| rm hpr${ep_num}_summary.wav | ||||
|  | ||||
| if [ "$ADDSPONSOR" = 'y' ]; then | ||||
|   echo "Adding the sponsor" | ||||
|   ffmpeg -i "$anhonesthost" -ar 44100 -ac $CHANNELS -acodec pcm_s16le -f s16le - >> ${fname}_tmp_hh.pcm 2>> ${fname}_tmp.log | ||||
|   ffmpeg -i "$internetarchive" -ar 44100 -ac $CHANNELS -acodec pcm_s16le -f s16le - >> ${fname}_tmp_ia.pcm 2>> ${fname}_tmp.log | ||||
| else | ||||
|   echo "NOT Adding the sponsor" | ||||
| fi | ||||
|  | ||||
| if [ "$ADDPROMO" = 'y' ]; then | ||||
|   echo "Adding the promo" | ||||
|   ffmpeg -i "$promo" -ar 44100 -ac $CHANNELS -acodec pcm_s16le -f s16le - >> ${fname}_tmp_hh.pcm 2>> ${fname}_tmp.log  | ||||
|   ffmpeg -i "$promo" -ar 44100 -ac $CHANNELS -acodec pcm_s16le -f s16le - >> ${fname}_tmp_ia.pcm 2>> ${fname}_tmp.log  | ||||
| fi | ||||
|  | ||||
| if [ "$ADDINTRO" = 'y' ]; then | ||||
|   echo "Adding the intro" | ||||
|   ffmpeg -i "$intro" -ar 44100 -ac $CHANNELS -acodec pcm_s16le -f s16le - >> ${fname}_tmp_hh.pcm 2>> ${fname}_tmp.log  | ||||
|   ffmpeg -i "$intro" -ar 44100 -ac $CHANNELS -acodec pcm_s16le -f s16le - >> ${fname}_tmp_ia.pcm 2>> ${fname}_tmp.log  | ||||
| fi | ||||
|  | ||||
| echo "convert the uploaded episode and add it to the temp pcm file" | ||||
| ffmpeg -i ${fname}_sox.wav -ar 44100 -ac $CHANNELS -acodec pcm_s16le -f s16le - >> ${fname}_tmp_hh.pcm 2>> ${fname}_tmp.log  | ||||
| ffmpeg -i ${fname}_sox.wav -ar 44100 -ac $CHANNELS -acodec pcm_s16le -f s16le - >> ${fname}_tmp_ia.pcm 2>> ${fname}_tmp.log  | ||||
|  | ||||
| if [ "$ADDOUTRO" = 'y' ]; then | ||||
|   echo "Adding the outro" | ||||
|   ffmpeg -i "$outro" -ar 44100 -ac $CHANNELS -acodec pcm_s16le -f s16le - >> ${fname}_tmp_hh.pcm 2>> ${fname}_tmp.log  | ||||
|   ffmpeg -i "$outro" -ar 44100 -ac $CHANNELS -acodec pcm_s16le -f s16le - >> ${fname}_tmp_ia.pcm 2>> ${fname}_tmp.log  | ||||
| fi | ||||
|  | ||||
| echo "Convert the pcm file to a know wav format" | ||||
| ffmpeg -f s16le -ar 44100 -ac $CHANNELS -acodec pcm_s16le -i ${fname}_tmp_hh.pcm ${fname}_mez.wav 2>> ${fname}_tmp.log  | ||||
| ffmpeg -f s16le -ar 44100 -ac $CHANNELS -acodec pcm_s16le -i ${fname}_tmp_ia.pcm hpr${ep_num}.wav 2>> ${fname}_tmp.log  | ||||
|  | ||||
| echo "Normalizing the wav files" | ||||
| sox --temp "${TEMP_DIR}" --norm ${fname}_mez.wav ${fname}_mez_norm.wav | ||||
| mv -v ${fname}_mez_norm.wav ${fname}_mez.wav >> ${fname}_tmp.log 2>&1 | ||||
| # normalize -a 0.5 ${fname}_mez.wav >> ${fname}_tmp.log 2>&1 | ||||
| sox --temp "${TEMP_DIR}" --norm hpr${ep_num}.wav hpr${ep_num}_norm.wav | ||||
| mv -v hpr${ep_num}_norm.wav /var/IA/uploads/hpr${ep_num}.wav >> ${fname}_tmp.log 2>&1 | ||||
| # normalize -a 0.5 hpr${ep_num}.wav >> ${fname}_tmp.log 2>&1 | ||||
|  | ||||
| echo "--------------------------------------------------------------------------------" | ||||
| echo "File information" | ||||
| ffprobe ${fname}_mez.wav 2>&1 | grep Audio: | ||||
| mediainfo ${fname}_mez.wav | ||||
|  | ||||
| echo "--------------------------------------------------------------------------------" | ||||
| echo "Convert to opus for IA" | ||||
| opusenc hpr${ep_num}.wav /var/IA/uploads/hpr${ep_num}.opus | ||||
|  | ||||
| echo "--------------------------------------------------------------------------------" | ||||
| echo "Convert to flac for IA" | ||||
| sox --temp "${TEMP_DIR}" -S hpr${ep_num}.wav /var/IA/uploads/hpr${ep_num}.flac | ||||
|  | ||||
| echo "--------------------------------------------------------------------------------" | ||||
| echo "Convert to mp3 for HPR" | ||||
| sox --temp "${TEMP_DIR}" -S ${fname}_mez.wav hpr${ep_num}.mp3 | ||||
| echo "Convert to mp3 for IA" | ||||
| sox --temp "${TEMP_DIR}" -S hpr${ep_num}.wav /var/IA/uploads/hpr${ep_num}.mp3 | ||||
|  | ||||
| echo "--------------------------------------------------------------------------------" | ||||
| echo "Convert to ogg for HPR" | ||||
| sox --temp "${TEMP_DIR}" -S ${fname}_mez.wav hpr${ep_num}.ogg | ||||
| echo "Convert to ogg for IA" | ||||
| sox --temp "${TEMP_DIR}" -S hpr${ep_num}.wav /var/IA/uploads/hpr${ep_num}.ogg | ||||
|  | ||||
| echo "--------------------------------------------------------------------------------" | ||||
| echo "Convert to spx for HPR" | ||||
| sox --temp "${TEMP_DIR}" -S ${fname}_mez.wav -c 1 -r 16000 -t wav  - | speexenc - hpr${ep_num}.spx | ||||
| echo "Convert to spx for IA" | ||||
| sox --temp "${TEMP_DIR}" -S hpr${ep_num}.wav -c 1 -r 16000 -t wav  - | speexenc - /var/IA/uploads/hpr${ep_num}.spx | ||||
|  | ||||
|  | ||||
| if [[ ! -s /var/IA/uploads/hpr${ep_num}.wav ]] || [[ ! -s /var/IA/uploads/hpr${ep_num}.mp3 ]] || [[ ! -s /var/IA/uploads/hpr${ep_num}.ogg ]] || [[ ! -s /var/IA/uploads/hpr${ep_num}.spx ]] || [[ ! -s hpr${ep_num}.mp3 ]] || [[ ! -s hpr${ep_num}.ogg ]] || [[ ! -s hpr${ep_num}.spx ]] | ||||
| then | ||||
|   echoerr "ERROR: Something went wrong encoding the files" | ||||
|   exit 1 | ||||
| fi | ||||
|  | ||||
| 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" hpr${ep_num}* 2>> ${fname}_tmp.log 1>&2 | ||||
| fix_tags -album="$HPR_album" -artist="$HPR_artist" -comment="$HPR_comment" -genre="$HPR_genre" -title="$HPR_title" -track="$HPR_track" -year="$HPR_year" /var/IA/uploads/hpr${ep_num}* 2>> ${fname}_tmp.log 1>&2 | ||||
| fix_tags hpr${ep_num}* | ||||
| fix_tags /var/IA/uploads/hpr${ep_num}* | ||||
|  | ||||
| #echo "Changing the file dates to the time of upload" | ||||
| touch -r ${mediafile} hpr${ep_num}* | ||||
| touch -r ${mediafile} /var/IA/uploads/hpr${ep_num}* | ||||
|  | ||||
|  | ||||
| rsync -ave ssh --partial --progress --ignore-existing hpr${ep_num}.mp3 hpr${ep_num}.ogg hpr${ep_num}.spx hpr:www/eps/ | ||||
|  | ||||
| firefox http://hackerpublicradio.org/local/hpr${ep_num}.mp3 | ||||
| firefox http://hackerpublicradio.org/local/hpr${ep_num}.ogg | ||||
| firefox file:///var/IA/uploads/hpr${ep_num}.mp3 | ||||
| firefox file:///var/IA/uploads/hpr${ep_num}.ogg | ||||
|  | ||||
| echo "Source: $( mediainfo --Output=XML --Full "${mediafile}" | xmlstarlet sel -T -t -m '/_:MediaInfo/_:media/_:track[@type="Audio"]' -v '_:Duration' -n | awk -F '.' '{print $1}' )" | ||||
| mediainfo --Output=XML --Full hpr${ep_num}* /var/IA/uploads/hpr${ep_num}* | xmlstarlet sel -T -t -m '/_:MediaInfo/_:media/_:track[@type="Audio"]' -v '_:Duration' -n | awk -F '.' '{print $1}' | sort | uniq -c | ||||
|  | ||||
| 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} | ||||
|   ssh hpr -t "ls -al /home/hpr/www/eps/hpr${ep_num}*"  | ||||
|   cp -v "${mediafile}" "/var/IA/uploads/hpr${ep_num}_source.${mediaextension}" | ||||
|  | ||||
|   #echo "Remove temp files" | ||||
|   rm -v ${fname}_sox.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 - | ||||
|  | ||||
|   #rsync -ave ssh --partial --progress /var/IA/uploads/ hpr:/home/hpr/upload/processed/ | ||||
|   rsync -ave ssh --partial --progress /var/IA/uploads/ borg:/data/IA/uploads/ | ||||
|   find /var/IA/done/ -empty -delete | ||||
| else | ||||
|   echo "skipping...." | ||||
|   echo "cp -v \"${mediafile}\" \"/var/IA/uploads/hpr${ep_num}_source.${mediaextension}\"" | ||||
|   echo "rm -v ${fname}_sox.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 /var/IA/uploads/ borg:/data/IA/uploads/" | ||||
| fi | ||||
| @@ -1,238 +0,0 @@ | ||||
| #!/bin/bash | ||||
| # Copyright Ken Fallon - Released into the public domain. http://creativecommons.org/publicdomain/  | ||||
| #============================================================ | ||||
|  | ||||
| echoerr()  | ||||
| {  | ||||
| echo "$@" 1>&2;  | ||||
| } | ||||
|  | ||||
| TEMP_DIR="/var/tmp/" | ||||
| CHANNELS="1" | ||||
| FIXAUDIO="1" | ||||
| ARTIST="EMPTY" | ||||
| TITLE="EMPTY" | ||||
| YEAR="EMPTY" | ||||
| SLOT="EMPTY" | ||||
| basedir="/var/IA" | ||||
| upload_dir="${basedir}/uploads" | ||||
| intro="${basedir}/short.flac" | ||||
|  | ||||
|  | ||||
| if [ "$#" -ne 2 ]; then | ||||
|     echoerr "Please enter the source file and episode number" | ||||
|     exit | ||||
| fi | ||||
|  | ||||
| mediafile=${1} | ||||
| ep_num=${2} | ||||
|  | ||||
| ep_num=$(echo $ep_num | sed 's/hpr//g') | ||||
| re='^[0-9]+$' | ||||
| if ! [[ $ep_num =~ $re ]] ; then | ||||
|    echoerr "error: episode \"${ep_num}\" is not a number" | ||||
|    exit 1 | ||||
| fi | ||||
|  | ||||
| if [ ! -f "${mediafile}" ]; then | ||||
|   echoerr "sorry, media file \"${mediafile}\" does not exist" | ||||
|   exit | ||||
| fi | ||||
|  | ||||
| if [ ! -r "${mediafile}" ]; then | ||||
|   echoerr "sorry, media file \"${mediafile}\" is not readable" | ||||
|   exit | ||||
| fi | ||||
|  | ||||
| if [ $(ffprobe "${mediafile}" 2>&1 | grep "Audio:" | wc -l ) -eq 0 ]; then | ||||
|   echoerr "sorry, media file \"${mediafile}\" has no audio track" | ||||
|   exit | ||||
| fi | ||||
|  | ||||
| # extract file name and extension | ||||
| media_dir=$(dirname ${mediafile}) | ||||
| fname=${mediafile%.*} | ||||
| ext=${mediafile/*./} | ||||
|  | ||||
| if [[ -e hpr${ep_num}.wav ]] || [[ -e hpr${ep_num}.mp3 ]] || [[ -e hpr${ep_num}.ogg ]] || [[ -e hpr${ep_num}.spx ]] || [[ -e hpr${ep_num}_summary.wav ]] || [[ -e hpr${ep_num}.wav ]] || [[ -e ${fname}_mez.wav ]] || [[ -e ${fname}_sox_norm.wav ]] || [[ -e ${fname}_mezzanine.wav ]] || [[ -e ${fname}_tmp.pcm ]] || [[ -e ${fname}_tmp.log ]] | ||||
| then | ||||
|   echoerr "Files for this episode already exist." | ||||
|   ls -1 hpr${ep_num}* ${fname}_* 2>/dev/null | ||||
|   exit 1 | ||||
| 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 < <( wget --timeout=10 --tries=1 --quiet http://hackerpublicradio.org/say.php?id=${ep_num} -O - ) | ||||
|  | ||||
| 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 | ||||
|   echoerr "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" | ||||
|  | ||||
| if [[ $HPR_duration == "0" ]] | ||||
| then | ||||
|   echoerr "The duration is set to 0. Please update the show with the correct time." | ||||
|   exit; | ||||
| fi | ||||
|  | ||||
| #============================================================ | ||||
| # Preproc`s the source file | ||||
|  | ||||
| echo "--------------------------------------------------------------------------------" | ||||
| echo "Prepare mezzanine file" | ||||
| ffmpeg -i ${mediafile} -ar 44100 -ac $CHANNELS hpr${ep_num}.wav > ${fname}_tmp.log 2>&1 | ||||
|  | ||||
| echo "Normalizing the wav files" | ||||
| sox --temp "${TEMP_DIR}" --norm hpr${ep_num}.wav hpr${ep_num}_norm.wav | ||||
| mv -v hpr${ep_num}_norm.wav ${upload_dir}/hpr${ep_num}.wav >> ${fname}_tmp.log 2>&1 | ||||
|  | ||||
| echo "--------------------------------------------------------------------------------" | ||||
| echo "File information" | ||||
| ffprobe ${upload_dir}/hpr${ep_num}.wav 2>&1 | grep Audio: | ||||
| mediainfo ${upload_dir}/hpr${ep_num}.wav | ||||
|  | ||||
| echo "--------------------------------------------------------------------------------" | ||||
| echo "Convert to opus" | ||||
| opusenc ${upload_dir}/hpr${ep_num}.wav ${upload_dir}/hpr${ep_num}.opus 2>> ${fname}_tmp.log 1>&2 | ||||
|  | ||||
| echo "--------------------------------------------------------------------------------" | ||||
| echo "Convert to flac" | ||||
| sox --temp "${TEMP_DIR}" -S ${upload_dir}/hpr${ep_num}.wav ${upload_dir}/hpr${ep_num}.flac 2>> ${fname}_tmp.log 1>&2 | ||||
|  | ||||
| echo "--------------------------------------------------------------------------------" | ||||
| echo "Convert to mp3" | ||||
| sox --temp "${TEMP_DIR}" -S ${upload_dir}/hpr${ep_num}.wav ${upload_dir}/hpr${ep_num}.mp3 2>> ${fname}_tmp.log 1>&2 | ||||
|  | ||||
| echo "--------------------------------------------------------------------------------" | ||||
| echo "Convert to ogg" | ||||
| sox --temp "${TEMP_DIR}" -S ${upload_dir}/hpr${ep_num}.wav ${upload_dir}/hpr${ep_num}.ogg 2>> ${fname}_tmp.log 1>&2 | ||||
|  | ||||
| echo "--------------------------------------------------------------------------------" | ||||
| echo "Convert to spx" | ||||
| sox --temp "${TEMP_DIR}" -S ${upload_dir}/hpr${ep_num}.wav -c 1 -r 16000 -t wav  - | speexenc - ${upload_dir}/hpr${ep_num}.spx 2>> ${fname}_tmp.log 1>&2 | ||||
|  | ||||
| if [[ ! -s ${upload_dir}/hpr${ep_num}.wav ]] || [[ ! -s ${upload_dir}/hpr${ep_num}.opus ]] || [[ ! -s ${upload_dir}/hpr${ep_num}.flac ]] || [[ ! -s ${upload_dir}/hpr${ep_num}.mp3 ]] || [[ ! -s ${upload_dir}/hpr${ep_num}.ogg ]] || [[ ! -s ${upload_dir}/hpr${ep_num}.spx ]]  | ||||
| then | ||||
|   echoerr "ERROR: Something went wrong encoding the files" | ||||
|   exit 1 | ||||
| fi | ||||
|  | ||||
| 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}/hpr${ep_num}* 2>> ${fname}_tmp.log 1>&2 | ||||
|  | ||||
| fix_tags ${upload_dir}/hpr${ep_num}* | ||||
|  | ||||
| #echo "Changing the file dates to the time of upload" | ||||
| touch -r ${mediafile} hpr${ep_num}* | ||||
| touch -r ${mediafile} ${upload_dir}/hpr${ep_num}* | ||||
|  | ||||
| ls -al hpr${ep_num}* ${upload_dir}/hpr${ep_num}* | ||||
|  | ||||
| rsync -ave ssh --partial --progress --ignore-existing ${upload_dir}/hpr${ep_num}.mp3 ${upload_dir}/hpr${ep_num}.ogg ${upload_dir}/hpr${ep_num}.spx hpr:www/eps/ | ||||
|  | ||||
| firefox http://hackerpublicradio.org/local/hpr${ep_num}.mp3 | ||||
| firefox http://hackerpublicradio.org/local/hpr${ep_num}.ogg | ||||
| firefox file://${upload_dir}/hpr${ep_num}.mp3 | ||||
| firefox file://${upload_dir}/hpr${ep_num}.ogg | ||||
| 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}/hpr${ep_num}.spx" "file://${upload_dir}/hpr${ep_num}.opus" "file://${upload_dir}/hpr${ep_num}.ogg" "file://${upload_dir}/hpr${ep_num}.mp3" "file://${upload_dir}/hpr${ep_num}.flac" | ||||
|  | ||||
| echo "Source: $( mediainfo --Output=XML --Full "${mediafile}" | xmlstarlet sel -T -t -m '/_:MediaInfo/_:media/_:track[@type="Audio"]' -v '_:Duration' -n | awk -F '.' '{print $1}' )" | ||||
| mediainfo --Output=XML --Full hpr${ep_num}* ${upload_dir}/hpr${ep_num}* | xmlstarlet sel -T -t -m '/_:MediaInfo/_:media/_:track[@type="Audio"]' -v '_:Duration' -n | awk -F '.' '{print $1}' | sort | uniq -c | ||||
|  | ||||
| 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} | ||||
|   ssh hpr -t "ls -al /home/hpr/www/eps/hpr${ep_num}*"  | ||||
|   cp -v "${mediafile}" "${upload_dir}/hpr${ep_num}_source.${mediaextension}" | ||||
|  | ||||
|   #echo "Remove temp files" | ||||
|   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 - | ||||
|  | ||||
|   #rsync -ave ssh --partial --progress ${upload_dir}/ hpr:/home/hpr/upload/processed/ | ||||
|   rsync -ave ssh --partial --progress ${upload_dir}/ borg:/data/IA/uploads/ | ||||
|   echo "$( ssh borg -t "ls -al /data/IA/uploads/hpr${ep_num}*" ; ls -al ${upload_dir}/hpr${ep_num}* )" | grep "hpr${ep_num}" | awk '{print $5, $NF}' | sort | ||||
|   find /var/IA/done/ -empty -delete | ||||
| else | ||||
|   echo "skipping...." | ||||
|   echo "cp -v \"${mediafile}\" \"${upload_dir}/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}/ borg:/data/IA/uploads/" | ||||
| fi | ||||
| @@ -1,603 +0,0 @@ | ||||
| #!/usr/bin/env bash | ||||
| # Copyright Ken Fallon - Released into the public domain. http://creativecommons.org/publicdomain/  | ||||
| #============================================================ | ||||
| TEMP_DIR="/var/tmp/" | ||||
| CHANNELS="1" | ||||
| 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" | ||||
| ttsserver="http://localhost:5500" | ||||
| processing_dir="/home/ken/tmp/hpr/processing" | ||||
| git_image_dir="/home/ken/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 | ||||
|   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 | ||||
|   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' ) | ||||
|  | ||||
|   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 | ||||
|  | ||||
| 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}/" | ||||
|  | ||||
| if [[ "$( find "${media_dir}" \( -iname "hpr${ep_num}.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}.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}.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}.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}.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}.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 "${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 | ||||
|  | ||||
| echo "Creating the sandwitch: \"hpr${ep_num}_intro.wav\" \"${fname}_mezzanine.wav\" \"${outro}\" \"hpr${ep_num}.wav\" " | tee -a ${fname}_tmp.log | ||||
|  | ||||
| sox -V2 "hpr${ep_num}_intro.wav" "${fname}_mezzanine.wav" "${outro}" "hpr${ep_num}.wav" >> ${fname}_tmp.log 2>&1 | ||||
|  | ||||
| echo "Normalizing the wav files" | tee -a ${fname}_tmp.log | ||||
| #sox --temp "${TEMP_DIR}" --norm hpr${ep_num}.wav hpr${ep_num}_norm.wav | ||||
| 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 | ||||
|  | ||||
| mv -v hpr${ep_num}_norm.wav ${upload_dir}/hpr${ep_num}.wav >> ${fname}_tmp.log 2>&1 | ||||
|  | ||||
| echo "--------------------------------------------------------------------------------" | tee -a ${fname}_tmp.log | ||||
| echo "File information" | tee -a ${fname}_tmp.log | ||||
| ffprobe ${upload_dir}/hpr${ep_num}.wav 2>&1 | grep Audio: | ||||
| mediainfo ${upload_dir}/hpr${ep_num}.wav | ||||
| audio2image.bash ${upload_dir}/hpr${ep_num}.wav | ||||
| xdg-open ${upload_dir}/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}/hpr${ep_num}.png | ||||
|  | ||||
|  | ||||
| echo "--------------------------------------------------------------------------------" | ||||
| echo "Geting transcript of hpr${ep_num}" | ||||
|  | ||||
| whisper --model tiny --language en --output_dir "${media_dir}" "${upload_dir}/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}/hpr${ep_num}" >/dev/null 2>&1 | ||||
|  | ||||
| cp -v "${media_dir}/hpr${ep_num}".vtt "${upload_dir}/hpr${ep_num}/hpr${ep_num}.vtt" | tee -a ${fname}_tmp.log | ||||
| cp -v "${media_dir}/hpr${ep_num}".srt "${upload_dir}/hpr${ep_num}/hpr${ep_num}.srt" | tee -a ${fname}_tmp.log | ||||
| cp -v "${media_dir}/hpr${ep_num}".txt "${upload_dir}/hpr${ep_num}/hpr${ep_num}.txt" | tee -a ${fname}_tmp.log | ||||
| cp -v "${media_dir}/hpr${ep_num}".tsv "${upload_dir}/hpr${ep_num}/hpr${ep_num}.tsv" | tee -a ${fname}_tmp.log | ||||
| cp -v "${media_dir}/hpr${ep_num}".json "${upload_dir}/hpr${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}/hpr${ep_num}.wav ${upload_dir}/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}/hpr${ep_num}.wav ${upload_dir}/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}/hpr${ep_num}.wav ${upload_dir}/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}/hpr${ep_num}.wav ${upload_dir}/hpr${ep_num}.ogg 2>> ${fname}_tmp.log 1>&2 | ||||
| ffmpeg -y -i ${upload_dir}/hpr${ep_num}.wav -acodec libopus -f ogg ${upload_dir}/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}/hpr${ep_num}.wav ${upload_dir}/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}/hpr${ep_num}.wav \ | ||||
| ${upload_dir}/hpr${ep_num}.opus \ | ||||
| ${upload_dir}/hpr${ep_num}.flac \ | ||||
| ${upload_dir}/hpr${ep_num}.mp3 \ | ||||
| ${upload_dir}/hpr${ep_num}.spx \ | ||||
| ${upload_dir}/hpr${ep_num}.ogg | ||||
| do | ||||
|   # ${upload_dir}/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}/hpr${ep_num}.wav ]] || [[ ! -s ${upload_dir}/hpr${ep_num}.opus ]] || [[ ! -s ${upload_dir}/hpr${ep_num}.flac ]] || [[ ! -s ${upload_dir}/hpr${ep_num}.mp3 ]] || [[ ! -s ${upload_dir}/hpr${ep_num}.ogg ]] || [[ ! -s ${upload_dir}/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}/hpr${ep_num}* 2>> ${fname}_tmp.log 1>&2 | ||||
|  | ||||
| fix_tags ${upload_dir}/hpr${ep_num}* | ||||
|  | ||||
| #echo "Changing the file dates to the time of upload" | ||||
| touch -r ${mediafile} hpr${ep_num}* | ||||
| touch -r ${mediafile} ${upload_dir}/hpr${ep_num}* | ||||
|  | ||||
| ls -al hpr${ep_num}* ${upload_dir}/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}/hpr${ep_num}.wav \ | ||||
| # # ${upload_dir}/hpr${ep_num}.opus \ | ||||
| # # ${upload_dir}/hpr${ep_num}.flac \ | ||||
| # # ${upload_dir}/hpr${ep_num}.mp3 \ | ||||
| # # ${upload_dir}/hpr${ep_num}.spx \ | ||||
| # # ${upload_dir}/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}/hpr${ep_num}.mp3 ${upload_dir}/hpr${ep_num}.ogg ${upload_dir}/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}/hpr${ep_num}.mp3" >/dev/null 2>&1 & | ||||
| firefox "file://${upload_dir}/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}/hpr${ep_num}.spx" "file://${upload_dir}/hpr${ep_num}.opus" "file://${upload_dir}/hpr${ep_num}.ogg" "file://${upload_dir}/hpr${ep_num}.mp3" "file://${upload_dir}/hpr${ep_num}.flac" | ||||
| mpv "file://${upload_dir}/hpr${ep_num}.spx" "file://${upload_dir}/hpr${ep_num}.opus" "file://${upload_dir}/hpr${ep_num}.ogg" "file://${upload_dir}/hpr${ep_num}.mp3" "file://${upload_dir}/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 | ||||
| #    | ||||
| #   ssh hpr -t "ls -al /home/hpr/www/eps/hpr${ep_num}*"  | ||||
| #   cp -v "${mediafile}" "${upload_dir}/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 "$( ssh borg -t "ls -al /data/IA/uploads/hpr${ep_num}*" ; ls -al ${upload_dir}/hpr${ep_num}* )" | grep "hpr${ep_num}" | awk '{print $5, $NF}' | sort | ||||
|    | ||||
|   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}/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}/ borg:/data/IA/uploads/" | ||||
| fi | ||||
| @@ -1,397 +0,0 @@ | ||||
| #!/usr/bin/env bash | ||||
| # Copyright Ken Fallon - Released into the public domain. http://creativecommons.org/publicdomain/  | ||||
| #============================================================ | ||||
| TEMP_DIR="/var/tmp/" | ||||
| CHANNELS="1" | ||||
| 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" | ||||
| ttsserver="http://localhost:5500" | ||||
| processing_dir="/home/ken/tmp/hpr/processing" | ||||
| git_image_dir="/home/ken/sourcecode/hpr/HPR_Public_Code/www/images/hosts" | ||||
| 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 | ||||
|  | ||||
| ################### | ||||
| # Get the show | ||||
| # | ||||
| #  | ||||
| if [[ -f "${1}" && -n "${2}" ]] | ||||
| then | ||||
|   mediafile="${1}" | ||||
|   ep_num="${2}" | ||||
|   echo "The duration is \"$( \date -ud "1970-01-01 $( ffprobe -i "${mediafile}" 2>&1| awk -F ': |, ' '/Duration:/ { print $2 }' )" +%s )\"." | ||||
| else | ||||
|   response=$( curl --silent --netrc-file ${HOME}/.netrc "https://hackerpublicradio.org/cms/status.php" | \ | ||||
|   grep 'SHOW_POSTED' | \ | ||||
|   head -1 | \ | ||||
|   sed 's/,/ /g' ) | ||||
|  | ||||
|   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://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}" | ||||
|   echo detox -v "${processing_dir}/${dest_dir}/" | ||||
|   detox -vr "${processing_dir}/${dest_dir}/" | ||||
|   cd "${processing_dir}/${dest_dir}/" | ||||
|   pwd | ||||
|  | ||||
|   echo "INFO: Processing hpr${ep_num} from ${email}" | ||||
|   echo "INFO: Working directory is \"${processing_dir}/${dest_dir}/\"" | ||||
|   echo "" | ||||
|  | ||||
|   media=$( find "${processing_dir}/${timestamp_epoc}_${ep_num}_${ep_date}_${key}" -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 | ||||
|  | ||||
|   mediafile="" | ||||
|  | ||||
|   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 | ||||
|   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 & | ||||
|   read -p "Source Waveform look ok ? (N|y) ? " -n 1 -r | ||||
|   echo    # (optional) move to a new line | ||||
|   if [[ ! $REPLY =~ ^[yY]$ ]] | ||||
|   then | ||||
|     echo "skipping...." | ||||
|     exit | ||||
|   fi | ||||
|  | ||||
| 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 "${theme}" ] | ||||
| then | ||||
|   echo "sorry, file \"${theme}\" does not exist" | ||||
|   exit 1 | ||||
| fi | ||||
|  | ||||
| if [ ! -f "${mediafile}" ] | ||||
| then | ||||
|   echo "sorry, media file \"${mediafile}\" does not exist" | ||||
|   exit | ||||
| 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 | ||||
|  | ||||
| mpv -vo=null "${mediafile}" | ||||
| read -p "Is there any problems with the audio (N|y) ? " -n 1 -r | ||||
| echo    # (optional) move to a new line | ||||
| if [[ $REPLY =~ ^[yY]$ ]] | ||||
| then | ||||
|   echo "skipping...." | ||||
|   exit 1 | ||||
| fi | ||||
|  | ||||
| # extract file name and extension | ||||
| media_dir=$(dirname ${mediafile}) | ||||
| fname=${mediafile%.*} | ||||
| ext=${mediafile/*./} | ||||
|  | ||||
| if [[ -e hpr${ep_num}.wav ]] || [[ -e hpr${ep_num}.mp3 ]] || [[ -e hpr${ep_num}.ogg ]] || [[ -e hpr${ep_num}.spx ]] || [[ -e hpr${ep_num}_summary.wav ]] || [[ -e hpr${ep_num}.wav ]] || [[ -e ${fname}_mez.wav ]] || [[ -e ${fname}_sox_norm.wav ]] || [[ -e ${fname}_mezzanine.wav ]] || [[ -e ${fname}_tmp.pcm ]] || [[ -e ${fname}_tmp.log ]] || [[ -e hpr${ep_num}_intro.wav ]] || [[ -e ~hpr${ep_num}_summary.wav ]] || [[ -e ~~hpr${ep_num}_summary.wav ]]  | ||||
| then | ||||
|   echo "Files for this episode already exist." | ||||
|   ls -1 *hpr${ep_num}* ${fname}_* 2>/dev/null | ||||
|   exit 1 | ||||
| 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 < <( wget --timeout=10 --tries=1 --quiet http://hackerpublicradio.org/say.php?id=${ep_num} -O - ) | ||||
|  | ||||
| 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" | ||||
|  | ||||
| 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 -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" - | 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 | ||||
|  | ||||
| ffmpeg -i ~hpr${ep_num}_summary.wav -ar 44100 ~~hpr${ep_num}_summary.wav >> ${fname}_tmp.log 2>&1 | ||||
|  | ||||
| sox -n -r 44100 -c 1 silence.wav trim 0.0 6.0 >> ${fname}_tmp.log 2>&1 | ||||
|  | ||||
| sox 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 -m "hpr${ep_num}_summary.wav" "${theme}" "hpr${ep_num}_intro.wav" >> ${fname}_tmp.log 2>&1 | ||||
|  | ||||
| echo "Creating the sandwitch" | tee -a ${fname}_tmp.log | ||||
|  | ||||
| sox "hpr${ep_num}_intro.wav" "${fname}_mezzanine.wav" "${outro}" "hpr${ep_num}.wav" >> ${fname}_tmp.log 2>&1 | ||||
|  | ||||
| echo "Normalizing the wav files" | tee -a ${fname}_tmp.log | ||||
| #sox --temp "${TEMP_DIR}" --norm hpr${ep_num}.wav hpr${ep_num}_norm.wav | ||||
| ffmpeg -i hpr${ep_num}.wav -af loudnorm=I=-16:LRA=11:TP=-1.5  hpr${ep_num}_norm.wav  >> ${fname}_tmp.log 2>&1 | ||||
|  | ||||
| mv -v hpr${ep_num}_norm.wav ${upload_dir}/hpr${ep_num}.wav >> ${fname}_tmp.log 2>&1 | ||||
|  | ||||
| echo "--------------------------------------------------------------------------------" | tee -a ${fname}_tmp.log | ||||
| echo "File information" | tee -a ${fname}_tmp.log | ||||
| ffprobe ${upload_dir}/hpr${ep_num}.wav 2>&1 | grep Audio: | ||||
| mediainfo ${upload_dir}/hpr${ep_num}.wav | ||||
| audio2image.bash ${upload_dir}/hpr${ep_num}.wav | ||||
| xdg-open ${upload_dir}/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}/hpr${ep_num}.png | ||||
|  | ||||
| echo "--------------------------------------------------------------------------------" | tee -a ${fname}_tmp.log | ||||
| echo "Convert to opus" | tee -a ${fname}_tmp.log | ||||
| ffmpeg -y -i ${upload_dir}/hpr${ep_num}.wav ${upload_dir}/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 | ||||
| sox --temp "${TEMP_DIR}" -S ${upload_dir}/hpr${ep_num}.wav ${upload_dir}/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 | ||||
| sox --temp "${TEMP_DIR}" -S ${upload_dir}/hpr${ep_num}.wav ${upload_dir}/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}/hpr${ep_num}.wav ${upload_dir}/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}/hpr${ep_num}.wav ${upload_dir}/hpr${ep_num}.spx 2>> ${fname}_tmp.log 1>&2 | ||||
|  | ||||
| for check_file in \ | ||||
| ${upload_dir}/hpr${ep_num}.wav \ | ||||
| ${upload_dir}/hpr${ep_num}.opus \ | ||||
| ${upload_dir}/hpr${ep_num}.flac \ | ||||
| ${upload_dir}/hpr${ep_num}.mp3 \ | ||||
| ${upload_dir}/hpr${ep_num}.ogg \ | ||||
| ${upload_dir}/hpr${ep_num}.spx | ||||
| do | ||||
|   if [[ ! -s "${check_file}" ]] | ||||
|   then | ||||
|     echo "ERROR: Something went wrong encoding of the file \"${check_file}\"" | ||||
|   fi | ||||
| done | ||||
|  | ||||
| if [[ ! -s ${upload_dir}/hpr${ep_num}.wav ]] || [[ ! -s ${upload_dir}/hpr${ep_num}.opus ]] || [[ ! -s ${upload_dir}/hpr${ep_num}.flac ]] || [[ ! -s ${upload_dir}/hpr${ep_num}.mp3 ]] || [[ ! -s ${upload_dir}/hpr${ep_num}.ogg ]] || [[ ! -s ${upload_dir}/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}/hpr${ep_num}* 2>> ${fname}_tmp.log 1>&2 | ||||
|  | ||||
| fix_tags ${upload_dir}/hpr${ep_num}* | ||||
|  | ||||
| #echo "Changing the file dates to the time of upload" | ||||
| touch -r ${mediafile} hpr${ep_num}* | ||||
| touch -r ${mediafile} ${upload_dir}/hpr${ep_num}* | ||||
|  | ||||
| ls -al hpr${ep_num}* ${upload_dir}/hpr${ep_num}* | tee -a ${fname}_tmp.log | ||||
|  | ||||
|  | ||||
| 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}/hpr${ep_num}.mp3 ${upload_dir}/hpr${ep_num}.ogg ${upload_dir}/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}/hpr${ep_num}.mp3" >/dev/null 2>&1 & | ||||
| firefox "file://${upload_dir}/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}/hpr${ep_num}.spx" "file://${upload_dir}/hpr${ep_num}.opus" "file://${upload_dir}/hpr${ep_num}.ogg" "file://${upload_dir}/hpr${ep_num}.mp3" "file://${upload_dir}/hpr${ep_num}.flac" | ||||
|  | ||||
| echo "Source: $( mediainfo --Output=XML --Full "${mediafile}" | xmlstarlet sel -T -t -m '/_:MediaInfo/_:media/_:track[@type="Audio"]' -v '_:Duration' -n | awk -F '.' '{print $1}' )" | ||||
| mediainfo --Output=XML --Full hpr${ep_num}* ${upload_dir}/hpr${ep_num}* | xmlstarlet sel -T -t -m '/_:MediaInfo/_:media/_:track[@type="Audio"]' -v '_:Duration' -n | awk -F '.' '{print $1}' | sort | uniq -c | ||||
|  | ||||
| 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} | ||||
|   ssh hpr -t "ls -al /home/hpr/www/eps/hpr${ep_num}*"  | ||||
|   cp -v "${mediafile}" "${upload_dir}/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 - | ||||
|  | ||||
|   rsync -ave ssh --partial --progress ${upload_dir}/hpr${ep_num}* borg:/data/IA/uploads/ | ||||
|   echo "$( ssh borg -t "ls -al /data/IA/uploads/hpr${ep_num}*" ; ls -al ${upload_dir}/hpr${ep_num}* )" | grep "hpr${ep_num}" | awk '{print $5, $NF}' | sort | ||||
|   # SHOW_SUBMITTED → METADATA_PROCESSED → SHOW_POSTED → MEDIA_TRANSCODED → UPLOADED_TO_IA → UPLOADED_TO_RSYNC_NET | ||||
|   curl --netrc-file ${HOME}/.netrc "https://hackerpublicradio.org/cms/status.php?ep_num=${ep_num}&status=MEDIA_TRANSCODED" | ||||
| else | ||||
|   echo "skipping...." | ||||
|   echo "cp -v \"${mediafile}\" \"${upload_dir}/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}/ borg:/data/IA/uploads/" | ||||
| fi | ||||
| @@ -1,60 +0,0 @@ | ||||
| #!/bin/bash | ||||
| # http://eddmann.com/posts/uploading-podcast-audio-to-youtube/ | ||||
| # http://cutycapt.sourceforge.net/ xvfb-run | ||||
| # https://el-tramo.be/blog/ken-burns-ffmpeg/ | ||||
|  | ||||
| #hpr${ep_num}.wav | ||||
|  | ||||
| ep_num=2463 | ||||
|  | ||||
| xvfb-run --server-args="-screen 0, 1024x768x24" CutyCapt --url="http://hackerpublicradio.org/eps.php?id=${ep_num}" --out=${ep_num}.png --insecure  | ||||
|  | ||||
| ffmpeg -i input.wav -filter_complex "[0:a]showwaves=s=800x600:mode=line:rate=25,format=yuv420p[v]" -map "[v]" -map 0:a output-showwaves.mp4 | ||||
|  | ||||
|  | ||||
| # ffmpeg -start_number n -i test_%d.jpg -vcodec mpeg4 test.avi | ||||
| # ffmpeg -loop 1 -r 2 -i image.jpg -i input.mp3 -vf scale=-1:380 -c:v libx264 -preset slow -tune stillimage -crf 18 -c:a copy -shortest -pix_fmt yuv420p -threads 0 output.mkv | ||||
|  | ||||
| # https://video.stackexchange.com/questions/9644/how-do-i-turn-audio-into-video-that-is-show-the-waveforms-in-a-video | ||||
|  | ||||
| #this | ||||
| #  | ||||
| # rm out.mp4 output.mp4 ; ffmpeg -i 2463.png -filter_complex "pad=w=9600:h=6000:x='(ow-iw)/2':y='(oh-ih)/2',zoompan=x='(iw-0.625*ih)/2':y='(1-on/(25*4))*(ih-ih/zoom)':z='if(eq(on,1),2.56,zoom+0.002)':d=25*4:s=1280x800" -pix_fmt yuv420p -c:v libx264 out.mp4 | ||||
| #  | ||||
| # rm out.mp4 output.mp4; ffmpeg -i 2463.png -filter_complex "pad=w=9600:h=6000:x='(ow-iw)/2':y='(oh-ih)/2',zoompan=z='zoom+0':d=25*4:s=1280x2048,crop=w=1280:h=800:x='(iw-ow)/2':y='(ih-oh)/2' " -pix_fmt yuv420p -c:v libx264 out.mp4 | ||||
| #  | ||||
| # ffmpeg -i in.jpg  | ||||
| #   -filter_complex  | ||||
| #     "zoompan=z='zoom+0.002':d=25*4:s=1280x800"  | ||||
| #   -pix_fmt yuv420p -c:v libx264 out.mp4 | ||||
| #    | ||||
| #    | ||||
| #    | ||||
| # ffmpeg -i input.flac -filter_complex "[0:a]ahistogram,format=yuv420p[v]" -map "[v]" -map 0:a output.mp4 | ||||
| #  | ||||
| #  | ||||
| # ffmpeg -i input -i background.png -filter_complex "[0:a]showwavespic=s=640x240[fg];[1:v][top]overlay=format=auto" -frames:v 1 output.png | ||||
|  | ||||
|  | ||||
| ffmpeg -loop 1 -i background.png -i video1.mp4 -i video2.mp4 -filter_complex \ | ||||
| "[1:v]scale=(iw/2)-20:-1[a]; \ | ||||
|  [2:v]scale=(iw/2)-20:-1[b]; \ | ||||
|  [0:v][a]overlay=10:(main_h/2)-(overlay_h/2):shortest=1[c]; \ | ||||
|  [c][b]overlay=main_w-overlay_w-10:(main_h/2)-(overlay_h/2)[video]" \ | ||||
| -map "[video]" output.mkv | ||||
|  | ||||
|  | ||||
| https://stackoverflow.com/questions/13390714/superimposing-two-videos-onto-a-static-image | ||||
| https://video.stackexchange.com/questions/14519/add-image-under-the-video-with-ffmepg | ||||
|  | ||||
|  | ||||
| ffmpeg \ | ||||
|     -loop 1 -i hprback.png \ | ||||
|     -i output-showwaves-320x240.mp4 \ | ||||
|     -filter_complex "overlay=0:0:shortest=1" \ | ||||
|     out.m4v | ||||
|      | ||||
|      | ||||
| # ffmpeg -i input.wav -filter_complex "[0:a]showfreqs=s=320x266:mode=line:fscale=log,format=yuv420p[v]" -map "[v]" -map 0:a output-showfreqs-319x266.mp4 | ||||
| # ffmpeg -loop 1 -i hprback.png -i output-showfreqs-319x266.mp4 -filter_complex "overlay=663:143:shortest=1"  out1.m4v | ||||
|  | ||||
| @@ -1,233 +0,0 @@ | ||||
| #!/usr/bin/env python3 | ||||
| #  | ||||
| # Copyright (C) 2017 Ken Fallon ken@fallon.ie | ||||
| #  | ||||
| # This program is free software: you can redistribute it and/or modify | ||||
| # it under the terms of the GNU Affero General Public License as | ||||
| # published by the Free Software Foundation, either version 3 of the | ||||
| # License, or (at your option) any later version. | ||||
| #  | ||||
| # This program is distributed in the hope that it will be useful, | ||||
| # but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
| # GNU Affero General Public License for more details. | ||||
| #  | ||||
| # You should have received a copy of the GNU Affero General Public License | ||||
| # along with this program.  If not, see <http://www.gnu.org/licenses/>. | ||||
|  | ||||
| # UTF-8 Test >> ÇirçösÚáóíéőöÓÁśł << | ||||
| # 213.46.252.136 gateway | ||||
|  | ||||
| import sys, getopt, json, os, logging, sys, requests, datetime, re, dateutil.parser, base64, xmltodict, random, psycopg2, time, automationhat | ||||
|  | ||||
| from pprint import pprint | ||||
| #import traceback | ||||
| logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s') | ||||
| #logging.disable(logging.DEBUG) | ||||
| settings = dict() | ||||
|  | ||||
| def usage(exitcode, message = None): | ||||
|     ''' | ||||
|     prints usage and exits | ||||
|     ''' | ||||
|     if message is not None: | ||||
|         logging.error( message ) | ||||
|     print( os.path.basename(sys.argv[0]) + ' [--help -l <lab> -c <config> ]') | ||||
|     sys.exit(exitcode) | ||||
|      | ||||
| def get_lab_settings(settings): | ||||
|     ''' | ||||
|     Get configuration for the lab, usually from     http://172.30.218.244/autotest/settings.json | ||||
|     ''' | ||||
|     if os.path.isfile( settings[ 'config_url' ] ): | ||||
|         with open( settings[ 'config_url' ] ) as json_file: | ||||
|             info_dict = json.load(json_file) | ||||
|             return info_dict | ||||
|     else: | ||||
|         session = requests.session() | ||||
|         resp = session.get(url=settings[ 'config_url' ], headers={'Accept-Encoding': 'gzip'}) | ||||
|         if resp.status_code == 200: | ||||
|             info_dict = json.loads(resp.text) | ||||
|             return info_dict | ||||
|     return None | ||||
|      | ||||
| def argumentTest(): | ||||
|     ''' | ||||
|     Gets the required paramaters that the program needs in order to run. These can either be provided on the command line, or as environemental variables, or both. | ||||
|  | ||||
|     export LAB="lab4b" | ||||
|     export config_url="http://172.30.218.244/autotest/settings.json" | ||||
|     export service="purcha#!/usr/bin/env python | ||||
|  | ||||
| import automationhat | ||||
| import time | ||||
| import os | ||||
| import sys | ||||
|  | ||||
| counter = -1 | ||||
| lightPattern = [ | ||||
|     [1,0,0], | ||||
|     [0,1,0], | ||||
|     [0,0,1], | ||||
|     [0,1,1], | ||||
|     [0,1,0], | ||||
|     [1,1,0], | ||||
|     [1,0,0], | ||||
|     [1,1,0], | ||||
|     [0,1,0], | ||||
|     [0,1,1], | ||||
|     [0,0,1], | ||||
|     [0,0,0], | ||||
|     [1,0,1], | ||||
|     [0,1,0], | ||||
|     [0,0,0], | ||||
| ] | ||||
|  | ||||
| def increment(): | ||||
|     global counter | ||||
|     counter+=1 | ||||
|     if counter==len(lightPattern): | ||||
|         counter = 0 | ||||
|  | ||||
| def doCurrentCycle(): | ||||
|     currentCycle = lightPattern[counter] | ||||
|     print currentCycle | ||||
|     if (currentCycle[0]==1) : | ||||
|         automationhat.output.one.on() | ||||
|     else: | ||||
|         automationhat.output.one.off() | ||||
|  | ||||
|     if (currentCycle[1] == 1): | ||||
|         automationhat.output.two.on() | ||||
|     else: | ||||
|         automationhat.output.two.off() | ||||
|  | ||||
|     if (currentCycle[2] == 1): | ||||
|         automationhat.output.three.on() | ||||
|     else: | ||||
|         automationhat.output.three.off() | ||||
|  | ||||
|     time.sleep(2) | ||||
|  | ||||
|  | ||||
|  | ||||
| while True: | ||||
|     increment() | ||||
|     doCurrentCycle()se-service" | ||||
|     export customers="customers.json" | ||||
|  | ||||
|     ''' | ||||
|     lab = str() | ||||
|     config_url = str() | ||||
|     service = str() | ||||
|     settings = dict() | ||||
|      | ||||
|     for evariable in [ 'LAB', 'config_url' ]: | ||||
|         if os.getenv( evariable ) is not None: | ||||
|             settings[ evariable ] = os.environ[ evariable ] | ||||
|             logging.debug( "Setting \"" + evariable + "\" set to \"" + settings[ evariable ] + "\" from an enviroment variable.") | ||||
|  | ||||
|     try: | ||||
|         options, remainder = getopt.getopt(sys.argv[1:], 'hl:c:', [ 'help', 'lab=', 'config=' ]) | ||||
|  | ||||
|     except getopt.GetoptError: | ||||
|         usage(1, "Unrecognized option was found or missing argument." ) | ||||
|  | ||||
|     for opt, arg in options: | ||||
|         if opt in ('-h', '--help'): | ||||
|             usage(2) | ||||
|         elif opt in ('-l', '--lab'): | ||||
|             logging.debug( "Setting \"LAB\" set to \"" + arg + "\" from the \"" + opt + "\" command line argument.") | ||||
|             settings[ 'LAB' ] = arg | ||||
|         elif opt in ('-c', '--config'): | ||||
|             logging.debug( "Setting \"config_url\" set to \"" + arg + "\" from the \"" + opt + "\" command line argument.") | ||||
|             settings[ 'config_url' ] = arg | ||||
|  | ||||
|     for param in [ 'LAB', 'config_url' ]: | ||||
|         if not param in settings: | ||||
|             usage( 3, "Cant find value for \"" + param +"\"") | ||||
|  | ||||
|     try: | ||||
|         settings[ 'config' ] = get_lab_settings( settings )[ settings[ 'LAB' ] ] | ||||
|         if 'jenkins' in settings.keys(): | ||||
|             logging.debug('Updating TraxIS Customer file to include the Purchase Service status.') | ||||
|  | ||||
|     except Exception as e: | ||||
|         print('Error: Could not get Lab Configuration for "%s".' % settings[ 'LAB' ] ) | ||||
|         traceback.print_exc()    | ||||
|         exit(1) | ||||
|  | ||||
|     return settings | ||||
|  | ||||
|  | ||||
| #def get_server_instance(): | ||||
|     #jenkins_url = 'http://172.22.137.160:8080' | ||||
|     #server = Jenkins(jenkins_url, username='autotest', password='autotest') | ||||
|     #return server | ||||
|  | ||||
| def get_server_instance(settings): | ||||
|     jenkins_url = 'http://%s:%s' % ( settings[ 'config' ][ 'jenkins' ][ 'host' ] , settings[ 'config' ][ 'jenkins' ][ 'port' ] ) | ||||
|     server = Jenkins(jenkins_url, username = settings[ 'config' ][ 'jenkins' ][ 'user' ], password = settings[ 'config' ][ 'jenkins' ][ 'password' ]) | ||||
|     return server | ||||
|  | ||||
| def alloff(): | ||||
|     automationhat.relay.one.off() | ||||
|     automationhat.output.one.off() | ||||
|     automationhat.output.two.off() | ||||
|     automationhat.output.three.off() | ||||
|  | ||||
| # Set according to status | ||||
| def setstatus(status): | ||||
|     if status != "": | ||||
|         alloff() | ||||
|         if status == "SUCCESS": | ||||
|             automationhat.output.three.on() | ||||
|             print( "SUCCESS" ) | ||||
|  | ||||
|         if status == "UNSTABLE": | ||||
|             automationhat.output.two.on() | ||||
|             print( "UNSTABLE" ) | ||||
|  | ||||
|         if status == "FAILURE": | ||||
|             automationhat.output.one.on() | ||||
|             print( "FAILURE" ) | ||||
|     return | ||||
|  | ||||
| def get_job_details( settings ): | ||||
|     # Refer Example #1 for definition of function 'get_server_instance' | ||||
|     server = get_server_instance( settings ) | ||||
|     settings[ 'teststatus' ] = str() | ||||
|     for job in settings[ 'config' ][ 'jenkins' ][ 'jobs' ]: | ||||
|         logging.debug( "Checking job %s" % job ) | ||||
|         job_instance = server.get_job( job ) | ||||
|         this_status = job_instance.get_last_build().get_status() | ||||
|         if not ( settings[ 'teststatus' ] == "FAILURE" or (settings[ 'teststatus' ] == "UNSTABLE" and this_status == "SUCCESS") ): | ||||
|             settings[ 'teststatus' ] = this_status | ||||
|     return settings | ||||
|  | ||||
| if __name__ == "__main__": | ||||
|     logging.debug( "start" ) | ||||
|     try: | ||||
|         while True: | ||||
|             alloff() | ||||
|             automationhat.relay.one.on() | ||||
|             settings = argumentTest() | ||||
|             #pprint( settings[ 'config' ][ 'jenkins' ] ) | ||||
|             #print( "Hello" ) | ||||
|             #pprint ( get_server_instance( settings ).version ) | ||||
|             settings = get_job_details( settings ) | ||||
|             status = settings[ 'teststatus' ] | ||||
|             setstatus(status) | ||||
|             #print( get_server_instance().version ) | ||||
|             time.sleep(300) | ||||
|  | ||||
|     except Exception as e: | ||||
|         print("Error: " + str(e)) | ||||
|         traceback.print_exc() | ||||
|         exit(1) | ||||
|     logging.debug('done') | ||||
|  | ||||
| ''' | ||||
| export LAB="lab4b" | ||||
| export config_url="http://172.30.218.244/autotest/settings.json" | ||||
| ''' | ||||
| @@ -1,18 +0,0 @@ | ||||
| #!/bin/bash | ||||
| # Copyright Ken Fallon - Released into the public domain. http://creativecommons.org/publicdomain/  | ||||
| find ${pwd} -type f | 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 "${duration} ${mediafile}" | ||||
|     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 "${duration} ${mediafile}" | ||||
|     continue | ||||
|   fi | ||||
| done | ||||
| find -type f -exec file {} \; | grep -vEi 'audio|mpeg|video'  | ||||
| @@ -1,44 +0,0 @@ | ||||
| #!/bin/bash | ||||
| # Copyright Ken Fallon - Released into the public domain. http://creativecommons.org/publicdomain/  | ||||
| intro_clip_end="00:01:30" | ||||
| quality_clip_duration="90" | ||||
| outro_clip="90" | ||||
| #DEBUG="echo " | ||||
| cd /mnt/DUMP/hpr-for-archive.org/todo/ | ||||
| for FILEX in * | ||||
| do  | ||||
| 	if [[ "$(file "$FILEX" | grep -i audio | wc -l )" -ne 1 && "$(mediainfo "$FILEX" | grep -i audio | wc -l )" -ne 1 ]] | ||||
| 	then | ||||
| 		echo "$FILEX is not an audio file" | ||||
| 	else | ||||
| 		echo "Processing $FILEX" | ||||
| 		fname=${FILEX%.*} | ||||
| 		ext=${FILEX/*./} | ||||
| 		# We get the druation from mediainfo in miliseconds and remove the last three digits to convert it to seconds | ||||
| 		# Then calculate the times of the end clip working back from the end of the file | ||||
| 		# We then pick a random segment between the intro and outro.  | ||||
| 		# Finally we convert to hour minute second format and the date command is the easiest way to do that | ||||
| 		duration=$( mediainfo --full "${fname}.${ext}" | grep Duration | egrep -v ".*:.*:|ms|s|mn" | head -1 | awk -F ': ' '{print $2}' ) | ||||
| 		duration="${duration:0:${#duration}-3}" | ||||
| 		outro_clip_start="$(($duration-$outro_clip))" | ||||
| 		quality_clip_end="$(($outro_clip_start-$quality_clip_duration))" | ||||
| 		quality_clip_start=$(shuf -i ${intro_clip_end}-${quality_clip_end} -n 1) | ||||
| 		quality_clip_end="$(($quality_clip_start+$quality_clip_duration))" | ||||
| 		duration=$(\date -d@${duration} -u +%H:%M:%S) | ||||
| 		quality_clip_start=$(\date -d@${quality_clip_start} -u +%H:%M:%S) | ||||
| 		quality_clip_end=$(\date -d@${quality_clip_end} -u +%H:%M:%S) | ||||
| 		outro_clip_start=$(\date -d@${outro_clip_start} -u +%H:%M:%S) | ||||
| 		echo -e "\tExtracting spectrogram" | ||||
| 		${DEBUG} sox "${fname}.${ext}" -n spectrogram -Y 130 -l -r -t "${fname}.${ext}" -o "${fname}_spectrogram.png" | ||||
| 		echo -e "\tExtracting intro clip from 0 to ${intro_clip_end}" | ||||
| 		${DEBUG} ffmpeg -y -ss 0 -t ${intro_clip_end} -i "${fname}.${ext}" "${fname}_intro_clip".wav 2>/dev/null | ||||
| 		echo -e "\tExtracting quality clip from ${quality_clip_start} to ${quality_clip_end}" | ||||
| 		${DEBUG} ffmpeg -y -ss ${quality_clip_start} -t ${quality_clip_end} -i "${fname}.${ext}" "${fname}_quality_clip".wav 2>/dev/null | ||||
| 		echo -e "\tExtracting outro clip from ${outro_clip_start}  ${duration}" | ||||
| 		${DEBUG} ffmpeg -y -ss ${outro_clip_start} -t ${duration} -i "${fname}.${ext}" "${fname}_outro_clip".wav 2>/dev/null | ||||
| 		echo -e "\tCreating low fidelity version" | ||||
| 		${DEBUG} ffmpeg -y -i "${fname}.${ext}" temp.wav  2>/dev/null | ||||
| 		${DEBUG} sox "temp.wav" -c 1 -r 16000 -t wav  - 2>/dev/null | speexenc - "${fname}_low_fidelity.spx" 2>/dev/null | ||||
| 		${DEBUG} rm temp.wav | ||||
| 	fi | ||||
| done | ||||
| @@ -1,50 +0,0 @@ | ||||
| #cd /home/ken/processing/1659905303_3664_2022-08-18_037b55af6b77191b2610f5cedb5d2bd962f0251720bf0 | ||||
| ttsserver="http://localhost:5500" | ||||
| ep_num="3664" | ||||
|  | ||||
| echo "This is Hacker Public Radio " > "hpr${ep_num}_summary.txt" | ||||
|  | ||||
| ## Jump to encoding | ||||
|  | ||||
| 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 | ||||
| } | ||||
|  | ||||
| create_tts_summary_ok="not-ok" | ||||
|  | ||||
| while [ "${create_tts_summary_ok}" != "OK" ] | ||||
| do | ||||
|   create_tts_summary | ||||
|  | ||||
|   mpv ~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." | ||||
|     xdg-open "hpr${ep_num}_summary.txt" 2>&1 & | ||||
|     inotifywait --event modify "hpr${ep_num}_summary.txt" | ||||
|   fi | ||||
| done | ||||
| echo "INFO: TTS complete." | ||||
| #  | ||||
| #  | ||||
| #  | ||||
| #  | ||||
| #  | ||||
| #  | ||||
| #  | ||||
| #  | ||||
| #  | ||||
| #  | ||||
| #  | ||||
| #  | ||||
| #  | ||||
| #  | ||||
| #  | ||||
| # exit 9999 | ||||
		Reference in New Issue
	
	Block a user