Skip to content

Instantly share code, notes, and snippets.

@player0k
Last active August 2, 2022 16:50
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save player0k/4a6efaf90515018f71fd96f728f1b9e1 to your computer and use it in GitHub Desktop.
Save player0k/4a6efaf90515018f71fd96f728f1b9e1 to your computer and use it in GitHub Desktop.
Script mixing Janus .mjr audio files (videocall recordings)
#!/bin/bash
JANUS_BIN=/usr/bin/janus-pp-rec
FFMPEG_BIN=/usr/bin/ffmpeg
FFMPEG_VER=$($FFMPEG_BIN -version | sed -n "s/ffmpeg version \([-0-9.]*\).*/\1/p;")
MIN_VER="4.3"
NORMALIZE_FILTERS=""
vercomp () {
if [[ $1 == $2 ]]
then
return 0
fi
local IFS=.
local i ver1=($1) ver2=($2)
# fill empty fields in ver1 with zeros
for ((i=${#ver1[@]}; i<${#ver2[@]}; i++))
do
ver1[i]=0
done
for ((i=0; i<${#ver1[@]}; i++))
do
if [[ -z ${ver2[i]} ]]
then
# fill empty fields in ver2 with zeros
ver2[i]=0
fi
if ((10#${ver1[i]} > 10#${ver2[i]}))
then
return 1
fi
if ((10#${ver1[i]} < 10#${ver2[i]}))
then
return 2
fi
done
return 0
}
vercomp $FFMPEG_VER $MIN_VER
if [ $? -eq 2 ]
then
echo "FFmpeg min version required $MIN_VER"
exit
fi
vercomp $FFMPEG_VER "5.0"
cmp=$?
if [ $cmp -eq 1 ] || [ $cmp -eq 0 ]
then
NORMALIZE_FILTERS=":normalize=0,dynaudnorm"
fi
file1=$1
file2=$2
out1=${file1%.mjr}.opus
out2=${file2%.mjr}.opus
if [ -z "$3" ]
then
out3=OUTPUT.opus
else
out3=$3
fi
start1=`$JANUS_BIN --extended-json $file1 | jq ".u"`
start2=`$JANUS_BIN --extended-json $file2 | jq ".u"`
delay=$((($start1-$start2)/1000))
if [ $delay -lt 0 ]
then
delay1=0
delay2=${delay#-}
else
delay1=$delay
delay2=0
fi
$JANUS_BIN $file1 $out1
$JANUS_BIN $file2 $out2
$FFMPEG_BIN -i $out1 -i $out2 -filter_complex "[0:a] adelay=$delay1:all=1, asetpts=N/SR/TB [mic0]; [1:a] adelay=$delay2:all=1, asetpts=N/SR/TB [mic1]; [mic0][mic1] amix=inputs=2$NORMALIZE_FILTERS" $out3
rm -f $out1 $out2
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment