VdrTranscode

Aus VDR Wiki
Wechseln zu: Navigation, Suche

Inhaltsverzeichnis

News

Autor: Alexander Richter

- last stable Version upload 19.11.2010 vdrtranscode_snapshot_2010-11-19.tar.gz

Kurzinfo

  • konvertiert vdr TS files in h264 Videos
  • Container mp4 ( m4v , wenn ac3 drin ) und mkv
  • konvertiert im Hintergrund, keine Benutzerinteraktion nötig
Menüs in VDR bei Befehle - Aufnahme

Ein kurzes Video, das die Menüführung zeigt : Youtube->vdtranscode_menues_in_vdr

Den Screencast hab ich erstellt mit vlc und nachbearbeitet mit avidemux2 :

$ cvlc screen:// --screen-fps 25 --nooverlay --sout "#transcode{vcodec=xvid,vb=6000,scale=0.8,acodec=mp3,ab=128,channels=2}:duplicate{dst=std{access=file,mux=avi,dst=screencast.avi}}"

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 zwei gesetzte Markierungen, wird ab der 1. bis zur 2. Markierung kodiert, sonst wird der ganze File genommen.
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.

Abhängigkeiten

  • Vdr >= 1.7.4 ( ts Format )
  • HandBrakeCLI
  • Perl
    • 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.

$ sudo apt-file search Rotate.pm

ergibt ( hier in kubuntu 10.04) :

...
liblogfile-rotate-perl: /usr/share/perl5/Logfile/Rotate.pm
...

Installation mit :

$sudo apt-get install liblogfile-rotate-perl

Paket Bestandteile / Installation

Alle Programmteile ( außer reccmds.custom.conf , siehe unten ) liegen im tgz im jeweiligen Verzeichnis, in das sie später sollen.

  • /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 ...

# vdtranscode conf

## General settings
Indir = /video/
Outdir = /home/alex/Videos/

# nice Level for processing, valid is 0...19 , large means lower priority  
nice_level = 5

# Set kbps Video Data Rate for Encoding
# UVHQ , VHQ and HQ Settings for HD Targets ( 1080 -> 1080 , 1080 -> 720 , 720 -> 720 )
# HQ and MQ Seting for SD Targets ( keep Dimensions )
# LQ for Webencoding ( sets maximum Width of Picture to 480 , always disables anamorph encoding, sets AAC Bitrate to 96 )

UVHQ = 7000
VHQ =  3700 
HQ = 1200
MQ = 800
LQ = 400

# Set Audio Bitrate for aac content
AAC_Bitrate = 128
# use dynmic range control on audio AAC ( means compression , valid are 1.0 ( none ) ... 4.0 ( closing a Door sounds like roar of guns )
DRC = 2.5

## Video Settings
# anamorph encoding ,  recommended for better quality
anamorph_encoding = 1
  • /etc/init.d/vdrtranscode_server

ein ( halbwegs ) Debian konformes Start und Stop Script ### Hier den unbedingt User eintragen, unter dem VDR läuft, sonst klappt die
Umbenenung der Aufnahmeverzeichnisse ev. nicht !

  • /vdr-reccmd/reccmds.custom.conf

erzeugt die Menüs, zur Auswahl der Komprimierung, bitte per Hand in die Vdr Struktur einpflegen, danach Vdr neu starten

Im Detail

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 480px Breite max.
- HD Recomprimierung , Bild bei 1080 beibehalten
- smallHD , komprimieren nach 720p

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.

Die x264 Encoder Optionen sind etwas heftiger angelegt,für beste Bildqualität, die Prozessoren freut es :
Zeile 247 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

- es wird nur der erste TS File genommen, also 00001.ts , ich hab da eben im VDR eine supergroße max Filesize eingegeben und gut.
- 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, im Logfile, kann man zumindest die letzten Kodierungen überprüfen.
- Einmal ein Aufnahmeverzeichnis fürs transcodieren markiert und ( fast ) unaufhaltbar gehts los ( nicht ganz , Server schnell killen und Markierung wieder entfernen, geht )

Tricks und Tips

Tragt ein, was ihr rausgefunden habt ( Bugs, Hints, Stolperfallen etc. )

letzte Worte

Da Proggi ist neu, sehr neu ( 12.11. angefangen, heute ist der 19.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.