#!/bin/bash
# ffmpeg_x64 compatible DS920+ est disponible dans les paquets SynoCommunity et ici: https://github.com/th0ma7/synology/tree/master/packages/dsm7-beta
# dernière version installée 4.4.2-46
# utilise ffmpeg_x64
logfolder=/volume1/scriptlog # Dossier où se trouve ce script et les fichiers temporaires
mkvfolder=/volume2/teamvideo # Dossier des mkv sur volume2 NVMe
# if [ ! -d $mkvfolder ]; then
# echo 2-1 > /sys/bus/usb/drivers/usb/unbind
# echo 2-1 > /sys/bus/usb/drivers/usb/bind
# sleep 10
# fi
if pidof -o %PPID -x "Copy2EAC3.sh">/dev/null
then
echo -e `date +'%d/%m/%Y %X'` "Une copie de Copy2EAC3.sh est déjà en cours\n" >> $logfolder/CheckAudio.log
exit 0
fi
if [ "$(find $mkvfolder/ -name '*.mkv' | wc -l)" -lt "1" ]; then exit ; fi # y a-t-il des fichiers mkv à traiter
# formatage des noms de fichiers.mkv (optionnel)
find $mkvfolder/ -name '*.MKV' | while read i ; do mv "$i" ${i//MKV/mkv} ; done # remplace l'extension MKV en mkv
find $mkvfolder/ -name '*.mkv' | while read i ; do mv "$i" ${i// /.} ; done # remplace les espaces par des . dans les mkv
find $mkvfolder/ -name '*.mkv' | while read i ; do mv "$i" ${i//,/} ; done # supprime les , dans les mkv
find $mkvfolder/ -name '*.mkv' | while read i ; do mv "$i" ${i//../.} ; done # remplace les .. par des . dans les mkv
find $mkvfolder/ -name '*.mkv' | while read i ; do mv "$i" ${i//_/.} ; done # remplace le _ par un . dans les mkv
find $mkvfolder/ -name '*.mkv' | while read i ; do mv "$i" ${i//.-./.} ; done # remplace les .-. par des . dans les mkv
find $mkvfolder/ -name '*.mkv' | while read i ; do mv "$i" ${i//!/} ; done # supprime les ! dans les mkv
find $mkvfolder/ -name '*.mkv' | while read i ; do mv "$i" `echo $i | sed 's/\x27//g'` ; done # supprime les ' dans les mkv
# fin du formatage des noms de fichier
# traitement
find $mkvfolder/ -name '*.mkv' | sort > $logfolder/file.nfo # fichier contenant tous les .mkv à traiter
for i in $(cat $logfolder/file.nfo); do
md=${i/.mkv/.md}
txt=${i/.mkv/.txt}
echo `date +'%d/%m/%Y %X'` ": ${i##*/}" >> $logfolder/CheckAudio.log # nom du MKV analysé
/var/packages/ffmpeg/target/bin/ffmpeg -hide_banner -i "$i" >& "$md"
cat "$md" |grep -n 'Audio:' >> $logfolder/CheckAudio.log # nom et position de toutes les pistes audio du MKV analysé
if ((grep "(fre): Audio: dts" $md) || (grep "(fre): Audio: truehd" $md) || (grep "(fra): Audio: dts" $md) || (grep "(fre): Audio: opus" $md) || (grep "(fre): Audio: aac" $md) || (grep "(fre): Audio: mp3" $md) || (grep "(fre): Audio: mp2" $md)); then
if !(grep "Could not find codec" $md | grep "Audio"); then
cat "$md" |grep 'Audio:' > "$txt"
pos=$(cat "$txt" |grep -n '(fre): Audio: dts')
if (grep "(fra): Audio: dts" $txt); then pos=$(cat "$txt" |grep -n '(fra): Audio: dts'); fi
if (grep "(fre): Audio: truehd" $txt); then pos=$(cat "$txt" |grep -n '(fre): Audio: truehd'); fi
if (grep "(fre): Audio: opus" $txt); then pos=$(cat "$txt" |grep -n '(fre): Audio: opus'); fi
if (grep "(fre): Audio: aac" $txt); then pos=$(cat "$txt" |grep -n '(fre): Audio: aac'); fi
if (grep "(fre): Audio: mp2" $txt); then pos=$(cat "$txt" |grep -n '(fre): Audio: mp2'); fi
if (grep "(fre): Audio: mp3" $txt); then pos=$(cat "$txt" |grep -n '(fre): Audio: mp3'); fi
po=$((${pos:16:1}-1))
if [ "$po" -lt "0" ]; then po=0 ; fi # cas du Stream audio #0:0(fre)
out=${i/.mkv/.EAC3.mkv}
/var/packages/ffmpeg/target/bin/ffmpeg -i "$i" -map 0 -c copy -c:a:"$po" eac3 -b:a 960k "$out"
/var/packages/ffmpeg/target/bin/ffmpeg -hide_banner -i "$out" >& "$md" # check le md du MKV modifé avec EAC3
if (grep "(fre): Audio: eac3" $md); then echo "$(cat "$md" |grep -n '(fre): Audio: eac3')" "<< piste convertie en eac3" >> $logfolder/CheckAudio.log; fi
if (grep "(fra): Audio: eac3" $md); then echo "$(cat "$md" |grep -n '(fra): Audio: eac3')" "<< piste convertie en eac3" >> $logfolder/CheckAudio.log; fi
rm "$txt" "$i"
else
echo "Stream (fre) Audio dts, truehd, aac ou opus indéfini, fichier déplacé dans le dossier video(.bad)" >> $logfolder/CheckAudio.log
mv "$i" /volume1/video/${i##*/}.bad
fi
fi
rm "$md"
echo "" >> $logfolder/CheckAudio.log
done
rm $logfolder/file.nfo
exit 0