MLD-5.x > General

VDR-Aufnahme aus mp4 erzeugen

<< < (2/2)

clausmuus:
Hier gibt's im VDR-Portal einen Thrad zu dem Thema: https://www.vdr-portal.de/forum/index.php?thread/123608-konvertierung-mp4-ts-und-hinzuf%C3%BCgen-ins-video/

linuxdxs:
Hallo Forum,
ich habe etwas Code zusammengeschrieben, um MP4-Dateien von den Mediatheken der ÖRR in .ts Dateien umzuwandeln und diese dann in das Aufnahmeverzeichnis des VDR zu kopieren. Ich starte das Skript über cron alle 15 Minuten. Das Verschieben der gewandelten Dateien, in das Aufnahmeverzeichnis,  übernimmt ebenfalls ein Cronjob der nur während bestimmten Zeiten läuft. Über Rückmeldungen würde ich mich freuen.


--- Code: ---#-----------------------------------------------------------------------
#------------------------ Verzeichnisse --------------------------------
#Verzeichnis fuer die downgeloadeten mp4 Dateien
QUELLVERZEICHNIS="/ext/lw_1/filme"
#Aufnahmeverzeichnis des VDR
ZIELVERZEICHNIS="/ext_lw/tvaufnahmen/Mediathek"
#Hier werden die Original hierhin verschoben
SICHER_QUELLE="/ext/lw_1/sicher_quelle"
#Hier werden die konvertierten Datein zwischengespeichert
KONVERT_FERTIG="/ext/lw_1/fert_konv"
#Dieses Verzeichnis wird zum konvertieren benoetigt
KONVERT_TMP="/ext/lw_1/temp_konvert"
#Lockdatei
LOCKFILE="/var/lock/konvert"
#Logdatei
LOG_DATEI="/var/log/konvert"
#-----------------------------------------------------------------------
#-----------------------  Variablen ------------------------------------
SENDER_OERR="3Sat ARD ARD-ALPHA BR DW FUNK.NET KIKA ONE ORF PHOENIX ARTE.DE RBTV SRF SWR WDR ZDF-TIVI ARD.DE ZDF MDR NDR RBB SR HR"
SORT_VAR="Sender Thema Titel Datum Zeit Dauer Groesse Website http Url"
#Index      1       2     3     4    5    6       7      8      9   10
#-----------------------------------------------------------------------
#-----------------------  Funktionen -----------------------------------
#Log schreiben mit automatischem Datum
function LOG(){
echo "$(date '+%Y-%m-%d %H:%M') ${1}" >> ${LOG_DATEI}
}
#-----------------------------------------------------------------------
#-----------------------  Programmstart --------------------------------
#-----------------------------------------------------------------------
#Skript darf nur als root ausgefuehrt werden"
if [ ! "$(whoami)" = "root" ]; then
   LOG "Skript laeuft nicht als root"
   exit 0
fi
#-----------------------------------------------------------------------
#Skript darf nur einmal ausgefuehrt werden
if [ -f ${LOCKFILE} ]; then
   exit 0
fi
touch ${LOCKFILE}
#-----------------------------------------------------------------------
#Erstellen der Log-Datei
if [ ! -f ${LOG_DATEI} ]; then
   touch ${LOG_DATEI}
   LOG "Erstelle ${LOG_DATEI}"
fi
#-----------------------------------------------------------------------
#Auslesen der mp4 Dateien, $i Kompletter Pfad und Dateiname .mp4
for i in $(ls ${QUELLVERZEICHNIS}/*.mp4); do
   LOG "Bearbeite $i"
   TXT_DATEI=$(echo ${i%.*}.txt)
#-----------------------------------------------------------------------
#Erstellen der INFO-Datei fuer Oeffentlich Rechtlichen wenn
#die mp4- und die dazugehoerige txt-Datei vorhaden   
   if [ -f "${i}" ] && [ -f "${TXT_DATEI}" ]; then
      LOG "mp4 und txt Dateien vorhanden"
#Filter den Sendernamen aus der akt. txt Datei
      SENDER=$(grep -i "sender" ${TXT_DATEI}|cut -d":" -f2|sed 's/^[[:space:]]*//')
      LOG "Erkannter Sender in TXT-Datei = $SENDER"
      for j in ${SENDER_OERR}; do
#Wenn Sendername in Datei und Variable gleich
         if [ "${SENDER}" = "${j}" ]; then
            LOG "OER Sender $SENDER erkannt"
#-----------------------------------------------------------------------
            TEXT=""
            while read line; do
               if [ ! -z "${line}" ];then
                  ERKANNT=0
#Es werden von jeder Zeile, die eigelesen wird, die Sonderzeichen umgewandelt
                  line=$(echo ${line} | sed -e 's/\ö/oe/g' -e 's/\Ä/Ae/g' -e 's/\ä/ae/g' -e 's/\Ö/Oe/g' -e 's/\Ü/Ue/g' -e 's/\ü/ue/g' -e 's/\ß/ss/g')
#Wenn ein : in der Zeile dann Teilung und Zuordnung
                  if [ "$(echo ${line}|grep :)" ];then
                     TEIL1=$(echo ${line}|cut -d":" -f1|sed 's/^[[:space:]]*//')
                     TEIL2=$(echo ${line}|cut -d":" -f2-|sed 's/^[[:space:]]*//')
#Stringinhalt zuordnen
                     ZAEHLER=0
                     for k in ${SORT_VAR}; do
                        if [[ $TEIL1 =~ $k ]]; then
                           INFO[${ZAEHLER}]=$TEIL2
                           ERKANNT=1
                        fi
                        ZAEHLER=$(($ZAEHLER+1))
                     done
                  fi
                  if [[ ! $line =~ "Url" ]] && [ ${ERKANNT} -eq 0 ] ; then
                     TEXT=$(echo "$TEXT|${line}")
                     #Leerzeichen am Ende und am Anfang abschneiden
                     TEXT=$(echo ${TEXT}|sed 's/^[[:space:]]*//')
                  fi
               fi
            done < ${TXT_DATEI}
            LOG "TXT Datei bearbeitet"       
#-----------------------------------------------------------------------
#-----------------------------------------------------------------------         
            ZUFALL=$(( RANDOM % 4294967292 + 1 ))
            TITEL=$(echo ${INFO[2]}|sed 's/ /_/g'|sed 's/[^0-9a-zA-Z\_\]*//g')
            THEMA=$(echo ${INFO[1]}|sed 's/ /_/g'|sed 's/[^0-9a-zA-Z\_\]*//g')
            DATUM="$(echo ${INFO[3]}|cut -d'.' -f3)-$(echo ${INFO[3]}|cut -d'.' -f2)-$(echo ${INFO[3]}|cut -d'.' -f1)"
            ZEIT="$(echo ${INFO[4]}|cut -d':' -f2).$(echo ${INFO[4]}|cut -d':' -f1).5-0"
            UNIX_TIME=$(date -d "${DATUM} 20:15" +%s)

            KONV_VERZ="${KONVERT_TMP}/${TITEL}_${THEMA}/${DATUM}.${ZEIT}.rec"
            if [ -d ${KONV_VERZ} ]; then
               rm -R ${KONV_VERZ}
               LOG "Verzeichnis ${KONV_VERZ}, Verz wird geloescht"
            fi
            VERSCH_VERZ="${KONVERT_TMP}/${TITEL}_${THEMA}"
            LOG "Erstelle Verzeichnis ${KONV_VERZ}"
            mkdir -p ${KONV_VERZ}
            LOG "Erstelle Datei ${KONV_VERZ}/info"
            touch ${KONV_VERZ}/info
#-----------------------------------------------------------------------
            LOG "Kovertiere ${i} nach ${KONV_VERZ}/00001.ts"
            ffmpeg -i ${i} -c copy ${KONV_VERZ}/00001.ts
#-----------------------------------------------------------------------           
            if [ $? = "0" ]; then
               LOG "Konvertierung erfolgreich"
               DAUER_GE=$(ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 $i)
               DAUER_GE=(${DAUER_GE%.*})
               LOG "Dauer gesamt = ${DAUER_GE}"
           
               GROESSE=$(ls -lh ${KONV_VERZ}/00001.ts | awk '{print  $5}')
               LOG "GROESSE= ${GROESSE}"
               BILDWF=$(ffprobe -v error -select_streams v:0 -show_entries stream=avg_frame_rate -of default=noprint_wrappers=1:nokey=1 ${i})
               BILDWF=(${BILDWF%/*})
               LOG "FRAMES = ${BILDWF}"
#-----------------------------------------------------------------------
# INFO Datei erstellen             
               echo "C ${INFO[0]}" > ${KONV_VERZ}/info
               echo "E ${ZUFALL} ${UNIX_TIME} ${DAUER_GE}" >> ${KONV_VERZ}/info
               echo "T ${INFO[2]}" >> ${KONV_VERZ}/info
               echo "S ${INFO[3]}" >> ${KONV_VERZ}/info
               echo "D ${TEXT}" >> ${KONV_VERZ}/info
               echo "F ${BILDWF}" >> ${KONV_VERZ}/info
               echo "P 99" >> ${KONV_VERZ}/info
               echo "L 99" >> ${KONV_VERZ}/info
#-----------------------------------------------------------------------
               LOG "Fuehre genindex aus"
               vdr --genindex=${KONV_VERZ}
#-----------------------------------------------------------------------
               LOG "Verschiebe Dateien ${i} nach ${SICHER_QUELLE}"
               mv ${i} ${SICHER_QUELLE}
               mv ${TXT_DATEI} ${SICHER_QUELLE}
               LOG "Verschiebe Datei ${VERSCH_VERZ} nach ${KONVERT_FERTIG}"
               mv ${VERSCH_VERZ} ${KONVERT_FERTIG}
               LOG "---------------------------------------------"
               LOG " "
            else
               LOG "Konvertierung NICHT erfolgreich"
            fi   
         fi
      done   
   fi
done
#-----------------------------------------------------------------------
rm ${LOCKFILE}

--- End code ---

Navigation

[0] Message Index

[*] Previous page

Go to full version