Home sweet home
Nav
hide
S1
S2
S3
Name: comagConvert
Typ: bash
benötigt: comagMeta, comagTitle (c-Programme, s.u.), projectX, mplex, requant (ggf.)
Das Script dient dazu, die Comag TS-Dateien in eine mpg Datei umzuwandeln.

Probleme:
  1. Ich habe unter den bisher konvertierten Filmen (>100) 2 gehabt, bei denen der Ton nach dem Script fehlte. Ein schrittweises durchführen der einzelnen Schritte zeigte, dass sich die Dateien (video und audio) zwar per mplex zusammen führen ließen, dann aber der Ton weg war. Die Ursache ist mir natürlich unbekannt, da ich die Details nicht verstehe. Ein Workaround besteht darin, die in projectX alle ts-Dateien zu laden, zu schneiden, dann zu demuxen und die entstehenden Dateien dann zusammen zu fügen (mplex). Man sollte also die TS-Files behalten, bis man eine mpg Datei mit Ton hat.
  2. Ebenfalls selten gelingt die Konvertierung mit projectX nicht. Dann bietet sich zunächst eine Umwandlung der TS-Dateien mit ffmpeg an: ffmpeg -i REC.TS -target dvd rec0.mpg, dann die REC.01 ... analog. Die entstehenden mpg Dateien lassen sich dann mit projectX schneiden, es entstehen die m2v und die Audio-Dateien (ac3 und oder mp2). Die zusammen gehörenden werden mit mplex verbunden, hier ein Beispiel (bei dem evtl. die mp2 Daten nicht brauchbar waren):
    mplex -f 8 -o hairspray1.mpg rec1.m2v rec1.ac3
    mplex -f 8 -o hairspray2.mpg rec2.m2v rec2.ac3
    mplex -f 8 -o hairspray3.mpg rec3.m2v rec3.ac3
    cat hairspray1.mpg hairspray2.mpg hairspray3.mpg > hairspray.mpg

Details: Das Script ruft eine Reihe anderer Programme auf, um die TS-Files des Comag-Festplattenrekorders umzubenennen und in eine mpg-Datei umzuwandeln.

Es existiert eine Version (comagConvert), die eine Benutzer-Interaktion erfordert und eine (comagConvertBatch), welche keine Eingaben entgegen nimmt und somit auf eine Reihe von Verzeichnissen angewandt werden kann.

Benötigte Programme (ich hoffe vollständig:

Das Script muss noch leicht auf die Gegebenheiten angepasst werden, die Variable zielPfad ist zu ändern.
Der Aufruf lautet comagConvert rec....
Die Batch-Variante erfordert keine weitere Benutzer-Interaktion und es können mehrere Verzeichnisnamen übergeben werden, z.B. : comagConvertBatch rec*
Der Quellcode zu comagConvert
show
comagConvert
#!/bin/bash
# mar 09: Umstellung, lasse die REC.. verzeichnisse auf der 
# externen Platte - ziehe nur die benoetigten Daten in das neue Verzeichnis
#noch nicht bearbeitet - wenn ich die verzeichnisse schon umbenannt habe
#dann gibt es stress - fehler im script bei Ausgangsverzeichnissen mit leerzeichen
 
zielPfad=/MediaNew/videoConverted/
 
echo "Bearbeite ein Verzeichnis das von Comaq Recorder erzeugt wurde"
echo "Verzeichnis kann auf externer HD liegen"
echo "Vorsicht - Verzeichnis darf nur aus einem Wort bestehten, z.B REC001"
echo "Enter druecken" 
read a
echo "Ergebnisverzeichnis in $zielPfad<titel>"
echo "-> umbenennen von Dateien" 
echo "-> zusammenfuegen der ts-Dateien"
echo "-> Meta-Infos auslesen"
echo "   (um Meta-Info für mehrere Filme auszulesen -> siehe comagMetaCSV)"
echo " nicht Interaktiv: comagConvertBatch"
echo " Aufruf " $(basename $0) "<verzeichnisname>"
 
if [[ $# -ne 1 ]] 
then
  echo "Parameter-Zahl nicht ok"
  exit
else
  oldVerz=$1
# ein slash mehr stoert nicht  
fi
 
echo -n "Start: " 
sdatum=$(date); 
echo $sdatum
cd "$oldVerz" &&  comagMeta > meta.txt && verz=$(comagTitel) && cd ..
 
#hatte ein / im Dateinamen: nikolaikirche 1/2 ...
verz=${verz////v}
 
if [[ "$oldVerz" != /*  ]]
then
  pfad=$(pwd)
  oldVerz=$pfad/$oldVerz
fi
 
echo "Titel / neuer Verzeichnisname: "$verz
echo "anderer Name j/n";
read a
##fuer batch a=n
#a="n"
if [[ $a. == "j." ]]
then 
  echo "Neuer Verzeichnisname (ohne Pfad): "	
  read verz
fi
 
 
########################
##fuer batchbetrieb bei erhalt des verzeichnisnamens
#verz=$oldVerz
#folgendes raus fuer Batch:
#########################
fullVerz=$zielPfad/$verz
mkdir -v "$fullVerz"
cd "$fullVerz"
 
echo -n "work in dir "
pwd
 
#das folgende geht nicht, ln ist auch erfolgreich, wenn die Datei nicht existiert
#ln -s $oldVerz/REC.TS "$verz""_0".ts ||  ln -s $oldVerz/rec.ts "$verz""_0".ts
i=$(find $oldVerz -maxdepth 1 -iname  "REC.TS")
ln -s  $i "$verz""_0".ts
 
 
counter=1
for i in $(find $oldVerz -maxdepth 1 -iname  "REC.0?" | sort)
do 
   ln -s  $i "$verz""_"$counter.ts
   let counter++
done
 
#links angelegt (ts-Dateien)
#kopiere restlichen Daten - meta sinnvoll - der Rest - fraglich
#sichergehen, dass ich klein / gross habe
cp "$oldVerz/"*.bm "$fullVerz"  ||  cp "$oldVerz/"*.BM "$fullVerz"
cp "$oldVerz/"*.cp "$fullVerz"  || cp "$oldVerz/"*.CP "$fullVerz"
cp "$oldVerz/"*.txt "$fullVerz" || cp "$oldVerz/"*.TXT "$fullVerz"
cp "$oldVerz/"*.dat "$fullVerz" || cp "$oldVerz/"*.DAT "$fullVerz"
 
 
 
#liste=$(find . -iname "*.ts" | sed  "s/ /\\\ /g" | sort)
#in der liste soll jeder dateiname von  " umgeben sein
liste=$(find . -iname "*.ts" | sed  "s/ /\\\ /g" | sort | \
while read eintrag
do
  eintrag=${eintrag#./}
  eintrag=\"$eintrag\"
  echo -n $eintrag " ";
done)
#dieser seltsame konstrukt ist noetig, da ich liste in der 
#schleife nicht veraendern kann - habe ich nicht verstanden
 
echo "Liste: $liste"
echo "umbenannt, soll noch geschnitten werden? (j/n)"
echo "ich denke es ist doch sinnvoller erst spaeter  das mpg zu scheiden und demux zu wählen"
echo "danach dann wieder per mplex zusammen fuegen"
read a
if [[ "$a." == "j."  ]]
then 
  echo "Bitte nacheinander mit  öffnen (originale), schneiden, als binary copy speichern"
  echo "es entsteht eine Datei mit Namen ...[copy]"
  echo "umbenennen, so dass die erzeugten links in $fullVerz gültig sind"
  echo -n "ENTER" 
  read a
  eval java -jar /home/roemke/Infos/Linux/Multimedia/Project-X/ProjectX.jar 
  echo -n "Enter, wenn die Links wieder stimmen achte auf CASE - Sensitive"
  read a
fi
 
 
echo "fuege ts zusammen und demultiplexe mit Project-X"
# project-x macht stress mit . in Dateiname - ersetze
verz=${verz//./ }
verz=${verz//:/ } 
#doppelpuntk - sicher gehen
demuxName=$verz"_demux"
eval java -jar /home/roemke/Infos/Linux/Multimedia/Project-X/ProjectX.jar -demux\
          -name \"$demuxName\" $liste            
 
#warum ist da denn ein eval noetig - unklar
#log datei umbenennen
mv "$verz""_demux_log.txt" "$verz""_log.txt"
echo "Habe die Dateien erzeugt, Größen: (m2v ist Video): "
du -sm *
size=$(du -s "$verz"_demux.m2v | cut -f 1 -s)  
echo "Beachte: nur 4482 MB Platz auf der DVD - Vorsicht dazu noch Bilder und Menus (wahrscheinlich < 20 MB)";
#spaeter vielleicht mal eine Empfehlung berechnen lassen 
echo "Geben Sie einen Faktor ein, um die Viedeodateien (nicht Audio) verringert wird (neueGröße=größe*1/faktor: (1)" 
echo "Hinweis wollen Sie die m2v um b bytes reduzieren so sollte sich der faktor aus $size/($size - b) berechnen lassen"
echo -n " 1 oder Enter - nichts passiert: "
read fak
if [[ ( "$fak". != "." ) &&  ( $fak != "1" )  ]]
then
  cat "$verz""_demux.m2v" | requant $fak 0 $size > "$verz""_requant_demux.m2v"
  mv "$verz""_requant_demux.m2v" "$verz""_demux.m2v"
fi
echo "erzeuge DVD-Format"
#hinweise im Netz: fuer dvdauthor ist -f 8 sinnvoll
mplex -f 8 -o "$verz""_result.mpg" "$verz""_demux"*
tFile="$verz"".mpg"
if [[ -f $tFile ]]
then
  mv -v $tFile "$verz""_save.mpg"
fi
tFile="$verz""_result.mpg"
if [[ -f "$tFile"  ]]
then 
  #die liste
  eval rm $liste 
  #die demuxten Dateien
  rm "$verz""_demux"*
  mv "$tFile"  "$verz".mpg
else 
  echo "Fehler? Datei \"$tFile\" nicht da" 
fi
cd ..
echo "Insgesamt lief der Prozess von - bis"
echo "Start: "$sdatum
echo -n "Stop: " 
date
# altes verzeichnis doch umbenennen, -> erkenne das gelaufen
 
mv "$oldVerz" "${oldVerz%/}_$verz"
 
#echo "original-verzeichnis nicht verschoben"
 
 
 
 
Parsed using GeSHi 1.0.8.6

Der Quellcode zu comagConvertBatch
show
comagConvertBatch
#!/bin/bash
zielPfad=/MediaNew/videoConverted/
 
echo "Bearbeite  Verzeichniss das von Comaq Recorder erzeugt wurde"
echo "Verzeichnis kann auf externer HD liegen"
echo "-> umbenennen von Dateien" 
echo "-> zusammenfuegen der ts-Dateien"
echo "-> Meta-Infos auslesen"
echo " Aufruf " $(basename $0) "verzeichnisname1 vzname2 ..."
echo " Ergebnisse in " $zielPfad 
echo "known Bug / Feature 1: keine Leerzeichen in Verzeichnisnamen gestattet"
echo "known Bug / Feature 2: keine Leerzeichen in Verzeichnisnamen gestattet"
echo "Abbruch: ctrl c"
echo "Normal: enter"
echo "dry run: dry -> ohne mplex project x, verzeichnisse werden nicht umbenannt, nur anzeige."
read a 
dry=""
if [[ $a. == "dry." ]]
then
  dry="echo" 
fi
echo -n "Start: " 
sdatum=$(date); 
echo $sdatum
maskiere="( )"
for dir in "$@"
do 
  if [[ -d "$dir" ]] 
  then   
    cd "$dir" &&  comagMeta > meta.txt && verz=$(comagTitel) && cd ..
     #comagTitel checkt nicht auf irgendwelche sonderzeichen -> maskiere hier
     #nein, hatte ein / im Dateinamen: nikolaikirche 1/2 ...
     verz=${verz////v} # / durch v ersetzt
     verz=${verz//\"/} # " durch nichts ersetzt
 
    #for i in $maskiere
    #do 
 	#verz=${verz//$i/\\$i}
    #done
    #echo Verzeichnis lautet $verz
    #exit
 
 
    ########################
    ##fuer batchbetrieb bei erhalt des verzeichnisnamens
    #verz=$oldVerz
    #folgendes raus fuer Batch:
    #if [[ "$oldVerz" != "$verz" ]]
    #then
    #  mv -v "$oldVerz" "$verz"
    #fi
    #########################
    zurNot=$(cat "$dir/meta.txt" | grep Startdatum | cut -d ' ' -f 2)
 
    fullVerz=$zielPfad/$verz
    if [[ -e $fullVerz ]]
    then
      fullVerz=$fullVerz"_"$zurNot
      if [[ -e $fullVerz ]] 
      then
        # wenn das auch noch da, hänge startzeit noch an :-)
        zurNot=$(cat "$dir/meta.txt" | grep Startzeit | cut -d ' ' -f 2)
        #:kritisch - ersetze durch - 
        zurNot=${zurNot//:/-}
        fullVerz=$fullVerz"_"$zurNot
      fi
      echo "fullVerz ist $fullVerz"
    fi
    #exit
    echo "fullVerz ist $fullVerz"
    eval $dry mkdir -v "$fullVerz"
    pfad=$(pwd)
    if [[ "$dir" != /*  ]]
    then
      dir=$pfad/$dir
    fi
 
    eval $dry cd "$fullVerz"
 
    #mv -v REC.TS "$verz""_0".ts ||  mv -v rec.ts "$verz""_0".ts
    # ln -s $dir/REC.TS "$verz""_0".ts ||  ln -s $dir/rec.ts "$verz""_0".ts
    #obiges nicht  
    if [[ "$dry." != "echo." ]]
    then
      i=$(find "$dir" -maxdepth 1 -iname  "REC.TS")
      ln -s  $i "$verz""_0".ts
 
      counter=1
      for i in $(find $dir -maxdepth 1 -iname  "REC.0?" | sort)
      do 
         ln -s $i "$verz""_"$counter.ts
         let counter++
      done
    	#links angelegt (ts-Dateien)
    	#kopiere restlichen Daten - meta sinnvoll - der Rest - fraglich
    	find "$dir" -maxdepth 1 -mindepth 1 -iname "*.bm" -exec cp {} "$fullVerz" \;
    	find "$dir" -maxdepth 1 -mindepth 1 -iname "*.cp" -exec cp {} "$fullVerz" \;
    	find "$dir" -maxdepth 1 -mindepth 1 -iname "*.dat" -exec cp {} "$fullVerz" \;
    	find "$dir" -maxdepth 1 -mindepth 1 -iname "*.txt" -exec cp {} "$fullVerz" \;
 
      echo "fuege ts zusammen und demultiplexe mit Project-X"
      #liste=$(find . -iname "*.ts" | sed  "s/ /\\\ /g" | sort)
      #in der liste soll jeder dateiname von  " umgeben sein
      liste=$(find . -iname "*.ts" | sed  "s/ /\\\ /g" | sort | \
      while read eintrag
      do
        eintrag=${eintrag#./}
        eintrag=\"$eintrag\"
      echo -n $eintrag " ";
      done)
      #dieser seltsame konstrukt ist noetig, da ich liste in der 
      #schleife nicht veraendern kann - habe ich nicht verstanden
      echo "Liste: $liste"
 
     #projectx macht stress mit dem . - dem : vielleicht auch	
      renVerz=$verz
      verz=${verz//./_}
      verz=${verz//:/_} 
      demuxName=$verz"_demux"
      eval java -jar /home/roemke/Infos/Linux/Multimedia/Project-X/ProjectX.jar -demux\
              -name \"$demuxName\" $liste            
      #warum ist da denn ein eval noetig - unklar
      #log datei umbenennen
      mv "$verz""_demux_log.txt" "$verz""_log.txt"
      echo "Habe die Dateien erzeugt, Größen: (m2v ist Video): "
      du -sh *
 
      echo "erzeuge DVD-Format"
      #hinweise im Netz: fuer dvdauthor ist -f 8 sinnvoll
      mplex -f 8 -o "$verz""_result.mpg" "$verz""_demux"*
      tFile="$verz"".mpg"
      if [[ -f $tFile ]]
      then
         mv -v $tFile "$verz""_save.mpg"
      fi
      tFile="$verz""_result.mpg"
      if [[ -f "$tFile"  ]]
      then 
        #die liste
        eval rm $liste 
        #die demuxten Dateien
        rm "$verz""_demux"*
        mv "$tFile"  "$verz".mpg
      else 
        echo "Fehler: Datei \"$tFile\" nicht da" 
      fi
      mv "$dir" "${dir%/}_$renVerz"
    fi
  fi
  cd $pfad 
done
echo "Insgesamt lief der Prozess von - bis"
echo "Start: "$sdatum
echo -n "Stop: " 
date
 
 
 
Parsed using GeSHi 1.0.8.6
Download / View Source / Run it   (depends on file type)

Karsten Römke (k Ponkt roemke at gmx in de), Rechtliches, Datenschutz, etc.
Rein private Seite, lediglich eine Spielerei
Last modified: 2010-05-13
Created: 2010-05-13
Reason: –
Home sweet home