Eine kurze Readme vdrtranscode 2011-05-04 http://www.vdr-wiki.de/wiki/index.php/VdrTranscode http://www.vdr-portal.de/board/thread.php?threadid=82167 - konvertiert vdr TS files in h264 Videos - Container mp4 ( m4v , wenn ac3 drin ) und mkv - konvertiert im Hintergrund, keine Benutzerinteraktion nötig Arbeitsweise : Im VDR Aufnahme Befehlemenü kann ein Profil zum Umwandeln ausgewählt werden. Der Aufnahmepfad bekommt einen Hinweis zu den Einstellungen eingebaut ala : /video/Papageien,_Palmen_&_Co./[cut-m4v|HD-smallHD|VHQ|all](40)_Zoogeschichten_aus_dem_Loro_Park_auf_Teneriffa Im Hintergrund überprüft vdrtranscode_server.pl das Videoverzeichnis nach diesen Inserts und wird aktiv, wenn es eine [cut... Markierung findet. Hat die Aufnahme eiene gerade Anzahl an Markierungen, werden diese während er Bearbeitung zu einem File geschnitten und dann komprmiert , bei keiner vorhandenen Markierung wird der ganze File genommen. Gibt es genanu a2 Markierungen, werden diese als Start und Stopgenommen und dann kodiert. Besteht die Aufnahme aus mehr als einer TS Datei, werden diese zusammen erfasst. Der Server konvertiert diese Aufnahme ( im 2 Pass Modus und aktiviertem Turbo für Pass 1 ) , markiert sie während als [work.. und danach als [del... Danach schaut er wieder periodisch nach, ob neue zu konvertierende Aufnahmen anstehen. Alle konvertierten Aufnahmen landen im in der vdrtranscode.conf angegebenen Zielverzeichnis. Paket besteht aus : - /usr/local/bin/vdrtranscode_server.pl # das Hauptprogramm kann als daemon im Hintergrund laufen Optionen : -h die Hilfe -d als Daemon im Hintergrund -l schreibe Logdatei ( insbesondere die handbrake Ausgaben ) ins Zielverzeichnis der umgewandelten Aufnahmen -v schreibe umfangreiche Infos auf die Ausgabe, wenn im Vordergrund laufend /usr/local/bin/vdrtranscode_touch_cuted_flag.pl # Übernimmt die Umbenennung der Aufnahmeverzeichnisse, wird vom Menüeintrag aufgerufen /etc/vdrtranscode.conf # Die KonfigurationsDatei , reinschauen und anpassen ... /etc/init.d/vdrtranscode_server # ein ( halbwegs ) Debian konformes Start und Stop Script ### Wenn benutzt, hier den unbedingt User eintragen, unter dem VDR läuft, sonst klappt die Umbenenung der Aufnahmeverzeichnisse ev. nicht ! /etc/init/vdrtranscode.conf # conf für Ubuntus upstart, als Ersatz für init.d , noch nicht allgemein einsetzbar, in upstart einlesen und konfigurieren. /etc/vdr/command-hooks/reccmds.vdrtranscode.conf # erzeugt die Menüs, zur Auswahl der Komprimierung Unter Ubuntu 10.04 mit den yavdr Quellen brauchts noch ein : $ sudo ln -s /etc/vdr/command-hooks/reccmds.vdrtranscode.conf /usr/share/vdr/command-hooks/ Binarys , Perl Module etc. benötigt werden : - Perl - HandBrakeCLI - Proc::Daemon; - File::Find ; - File::Copy ; - File::Basename ; - Getopt::Long ; - Cwd; - Logfile::Rotate; Die meisten Perl Module sind Standart , sonst ist ( unter Debian ) "sudo apt-file search Perlmodul" dein Freund. Das Script geht stets vom Ziel der Komprimierung aus, es geht also jegliche Quelle einem Zielprofil zuzuordnen. Das meint, aus z.B. einer 1080 HD Quelle kann man anwählen : - SD Format mit Mid Quali , High Quali - Low Quality Webformat 640px Breite max. - Very Low Quality Webformat 480px Breite max - HD Recomprimierung , Bild bis zu 1080px hoch - smallHD , komprimieren nach max. 720px Höhe Kleinere Bildformate ( SD ) könnte man z.B. einem smallHD Ziel zuorden, es wird aber nirgends hochskaliert, macht also keinen Sinn. In den Untermenüs, nach der Wahl der Qualität und der Bildgröße, legt man die gewünschten Audiospuren und den Container fest, ein beherzter Druck, der File bekommt eine führende Markierung und vdrtranscode_server findet und bearbeitet es. Mögliche Audioauswahl kann sein : - nur erste Stereorspur nutzen ( mp2 ) - alle Stereospuren ( mp2 ) - zusätzlich Dolby Digital mit durchreichen ( keine Neukomprimierung ) - alle mp2 Audiospuren ( die zu aac werden ) , werden etwas normalisiert ( 2.5 ) , um die Lautheit zu erhöhen. Einstellbar in der conf als Parameter DRC, valide ist 1.0 ( orig belassen ) bis 4.0 ( Türzuschlag = Kanonenschlag ) Die resultierenden Videos werden vor der Komprimierung in der Video Datenrate etwas feinjustiert, um runde Filegrößen zu bekommen. Standartmäßig aktiv , ist decomp, ein Deinterlacer, der nur dann tätig wird, wenn Halbilder erkannt werden. Auch Standart ist anamorphe Kodierung ( außer bei HD und Webvideo ), kann in der conf deaktiviert werden. Sollte aber nicht, die Qualität ist besser und sexy ist es auch. Der Parameter "Name_incl_Videoformat" in der config setzt eine automatische Namenserweiterung bei Zieldateien in den HD Formaten. ( 1080p50 // 1080p25 // 720p25 // 720p50 ) Das sieht z.B. , wenn aktiviert, folgendermaßen aus : ohne -> "Rock_Gods_in_Concert.m4v" mit -> "Rock_Gods_in_Concert-1080p25.m4v" Es gibt die Möglichkeit in der Config Datei generell , den deutlich schnelleren Classic Profile Modus einzustellen : # 1 or any use_classic_profile = no Dieser Modus komprimiert deutlich schneller ( Faktor 1:5 ) , aber zu Lasten der Qualität. Wer aber eine schwache CPU hat und nicht 5 Stunden auf das Komprimieren eines 20Minuten Files warten will, kann wohl damit leben. Ein 7 Minuten Clip in 1080p25 braucht hier auf einem Phenom 4 x 2,2 Ghz zum Vergleich : - Classic Profile ~17 fps -> 17 Minuten - Full process 2Pass ~3,9 fps -> 71 Minuten Wenn aktiviert, wird die Nutzung von 2Pass, x264 und den X264 Encoder Optionen deaktiviert, genutzt wird dann ffmpeg mit 1Pass und fester Bitrate. Die normalen x264 Encoder Optionen sind etwas heftiger angelegt,für beste Bildqualität, die Prozessoren freut es : Nähe Zeile 289 in vdtranscode_server.pl : # ref=2:mixed-refs:bframes=2:b-pyramid=1:weightb=1:analyse=all:8x8dct=1:subme=7:me=umh:merange=24:trellis=1:no-fast-pskip=1:no-dct-decimate=1:direct=auto ABER , folgende Einschränkungen gibts : - Handbrake ist CPU süchtig eingestellt, ein FullHD in FullHD rekomprimieren, kann wohl seeeeehhhhr lange dauern. - Wenn die erste Markierung in HD Material weit hinten ist, dauert es eine kleine Ewigkeit, bis der Beriech bis zur ersten Marke durchfahren ist - Es gibt kein Echtzeitfeedback, wo Handbrake gerade ist. Das Logfile kann man aber zeitnah z.B. per "tail -f" auslesen. - Einmal ein Aufnahmeverzeichnis fürs transcodieren markiert und ( fast ) unaufhaltbar gehts los ( nicht ganz , Server schnell killen und Markierung wieder entfernen, geht ) Da Proggi ist neu, sehr neu ( 12.11. angefangen, heute ist der 18.11. ) also nicht Bullet proof, da gibts bestimmt schöne Bugs, schaut bitte in die Scripte rein und ändert. Ich habe versucht fast alles, so simpel, wie möglich und nachvollziehbar zu schreiben, obwohl Perl ja für Write-Only bekannt ist. Das Proggi ist "As Is", ich baue keine Funtionen rein, die ich nicht brauche, wohl aber jemand anderes, its only just for Fun, ich bin keine Softwarefirma. Dank an diese wundervollen howtos : http://trac.handbrake.fr/wiki/CLIGuide http://trac.handbrake.fr/wiki/x264Options http://trac.handbrake.fr/wiki/AnamorphicGuide http://encodingwissen.de/ http://wiki.debian.org/LSBInitScripts/ http://stackoverflow.com/questions/766397/how-can-i-run-a-perl-script-as-a-system-daemon-in-linux http://www.heise.de/open/artikel/Schneller-booten-mit-Upstart-844394.html Alex Richter