Script: Video einfach für iPod konvertieren - läuft

  • Hallo,


    ich hab' mal ein kleines Script geschrieben um eine Aufnahme für den iPod zu konvertieren. Ist mein erstes Script für den VDR, also noch ziemlich verbesserungswürdig.


    Was braucht es?
    Das Script benötigt ffmpeg mit Unterstützung für aac-Ton (ist manchmal nicht eincompiliert). Ich habe es auf meiner Gen2vdr (1.0 rc4) entwickelt und nur dort getestet.
    Es wird in die Datei /etc/vdr/reccmds.conf eingebaut und steht dann bei den Aufnahmen zur Verfügung


    Was tut es?
    Es konvertiert die ausgewählte Aufnahme in eine Datei "output.m4v" in den Ordner /film (dieser ist bei gen2vdr über samba freigegeben).


    Was tut es (noch) nicht?
    Es konvertiert nur kurze Aufnahmen die aus einer Datei "001.vdr" bestehen. Ich bin noch am überlegen wie man das geschickt erweitern kann, dass er auch eine 002.vdr konvertiert und diese dann mit der vorher konvertierten Datei zusammenbackt. Anregungen sind gefragt! Wer hat sowas schonmal gemacht?


    Es blockiert den VDR für die Zeit der Konvertierung. Das führt zu einem Absturz meines VDR's. Nach einem "/etc/init.d/vdr restart" geht alles wieder.


    Es gibt noch keine Nachricht wenn die Konvertierung beendet ist.


    Die beiden letzten Punkte hängen zusammen. Wenn ich den Aufruf von ffmpeg mit einem angehängten & in den Hintergrund schicke, stürzt zwar VDR nicht ab, aber er sagt immer noch nix wenn er fertig ist.


    Wie kann man das besser machen? Hilfe ist gefragt.


    Hier das Script:


  • Hallo,


    zu deinem Crash -Problem:


    Schreib in die reccmds.conf:


    iPOD : setsid script.sh


    und ans ende des Scripts statt echo:


    svdrpsend.pl mesg "Konvertierung von $nam beendet"

    VDR1: Gigabyte GA-M720-US3 (nVidia Corporation MCP78S [GeForce 8200]), Athlon II X2 240, 2GB RAM, Intel 82574L Gigabit, Debian Squeeze, Kernel 2.6.38.3 mit linux-media.tar.bz2 vom 20.04. 10:04, dvbhddevice fb6b1beedb72, VDR-1.7.22 (extension-Patch, 15 Plugins), epgsearch, extrecmenu, ...
    VDR2: Debian Etch, 2.6.21.3, K6-2 400, 192MB, NFS-Root, 466GiB über NFS, 1xNexus 2.1, 1xNova S, VDR-1.4.7
    Server: Debian Squeeze, 2.6.35.7, AMD X2 240e, 4GB, System: Raid1 2x500GB, Aufnahmen: Raid5 4TB + 1x 500GB, 1000MBit LAN
    Episodenlisten für epgsearch, VDRSeriesTimer

  • Irgendwie klappt das nicht so wie es soll.


    setsid habe ich eingefügt


    ipod : setsid /_config/bin/scriptname.sh


    Er bleibt dennoch bei Ausführung des Scripts an der Stelle auf dem Bildschirm stehen. Der Scriptname wird noch in die Statuszeile geschrieben und das wars dann.


    Komischerweise bekomme ich auch die Systemmeldung aus dem Script nicht auf den Bildschirm geschrieben, auch wenn ich das direkt über ssh in der Shell aufrufe.


    Finde ich etwas seltsam, weil man ja wohl dabei nicht viel falsch machen kann

  • Nimm doch das filebrowser-plugin, folgende Zeile sollte es tun.


    Code
    vdr2ipod:*.vdr:ffmpeg -f mpeg -i %f -vcodec xvid -s 320x240 -b 850 -acodec aac -ac 2 -ab 64 -ar 44100 -f mp4 %f.m4v:r
                                                                                                                 %D
                                                                                                                  ^
                                                                                                                  NAME/PATH


    MFG Ronny

  • Hallo awolf,


    Zuerst mal: DANKE FUER DIESE IDEE! Bin ch gar nicht frauf gekommen, die reccmds.conf fuer so etwas zu nehmen! Ich habe keinen iPod aber einen PDA mit dem ich sonst auch TV gucke (Streamdev) - und nun kann ich meine Aufnahmen mitnehmen! WIE GEIL!


    Ich habe Dein Skript mal bei mir eingebaut und ein wenig veraendert (ich nutze mencoder mit den gleichen Einstellungen wie beim Streamen) - bei mir gab es erst auch die gleichen Probleme wie bei Dir.


    Dann habe ich mal nachgeschaut, wie noad bei mir aufgerufen wird und habe das mal uebernommen - dort wird mittels "screen" nochmal eine Terminal Emulation vorgeschaltet. Somit rufe ich in der reccmds.conf das Skript ohne "setsid" auf und diese Zeile sollte genuegen, damit es klappt:


    Code
    screen -dm sh -c "/usr/bin/ffmpeg $string1"


    Ggf. muessen Variablen noch escaped werden:


    Code
    screen -dm sh -c "/usr/bin/ffmpeg \"$string1\""


    hth und Danke nochmal!


    Gruss,
    Timo


    P.S.: Zum Thema der 002, 003 etc Dateien: koennte evtl. klappen im Skript ein Listing zu machen mit allen Dateien, die .vdr heissen und numerisch sind; diese dann einzeln mit ffmpeg/mencoder transkodieren und dann die resultate mit cat zusammenfuegen. Bin leider in SH/BaSH eine Niete, aber wenn jemand sich damit auskennt... ;)

    yaVDR 0.4-pre1 on ASUS 1015PN -> Big Screen and XBMC remote on Android.


  • Zu 1.


    Code
    shell> mkfifo /tmp/vdr2ipod
    shell> cat /video0/%Constantine/2006-05-27.12.20.00.00.rec/[0-9][0-9][0-9].vdr > /tmp/vdr2ipod &
    shell> ffmpeg -f mpeg -i /tmp/vdr2ipod -vcodec xvid -s 320x240 -b 1000 -acodec aac -ac 2 -ab 92 /tmp/test.mp4


    Zu 2.


    Code
    shell> man nice


    Zu 3.


    Code
    shell> man screen
    shell> man at
    shell> man dtach


    MFG Ronny

  • Hier das ganze für das filebrowser-plugin.


    http://vdr-wiki.de/wiki/index.php/Filebrowser-plugin


    Eintrag commands.conf des Plugins, anstatt %D.m4v kann man auch einen PATH setzen.

    Code
    vdr2ipod:*.vdr:FIFO=/tmp/vdr2ipod.$RANDOM; mkfifo $FIFO; cat %M > $FIFO & nice -n 10 ffmpeg -f mpeg -i $FIFO -vcodec xvid -s 320x240 -b 850 -acodec aac -ac 2 -ab 64 -ar 44100 -f mp4 %D.m4v:r


    So kann man sich bequem per OSD:


    * die file(s) zusammen stellen
    * das Ziel angeben
    * das ganze mit einem Namen versehen
    * den Status verfolgen


    ------------


    Hier das ganze für PSP.


    Code
    vdr2psp:*.vdr:FIFO=/tmp/vdr2psp.$RANDOM; mkfifo $FIFO; cat %M > $FIFO & nice -n 10 ffmpeg -f mpeg -i $FIFO -acodec aac -ab 128 -vcodec mpeg4 -b 1200 -ar 24000 -mbd 2 -flags +4mv+trell -aic 2 -cmp 2 -subcmp 2 -s 368x192 -r 30000/1001 -title X -f psp %D.mp4:r


    ------------


    Hier das ganze nach mp3.


    Code
    vdr2mp3:*.vdr:FIFO=/tmp/vdr2mp3.$RANDOM; mkfifo $FIFO; cat %M > $FIFO & nice -n 10 ffmpeg -f mpeg -i $FIFO -acodec mp3 -ab 192 -ar 44100 %D.mp3:r


    MFG Ronny

  • Hi,


    also erstmal ganz vielen Dank an alle die hier fleissig gepostet haben! Ich bin jetzt endlich wieder an der Sache dran und werde auch das endgültige script hier posten.


    Die Sache mit dem Filebrowser-plugin klingt interessant, will ich aber nicht benutzen. Ich möchte gerne den VDR für den Dau benutzbar haben und möglichst wenig Plugins und funktionen einbauen. Wir setzen das Ding bei uns in der Firma ein und da muss das so simpel wie möglich sein.


    Ich entwickle das aber jetzt parallel auf einem VDr mit gen2vdr und einer aktuellen CT-VDR5 Installation. Der gen2vdr steht bei mir privat und der CT-VDR ist die abgespeckte Firma-Variante. Da wird dann auch in mpeg1 konvertiert.


    Bis bald!

  • Jetzt bin ich bei der CT-VDR5 noch auf ein neues Problem gestoßen. Anscheinend liest das aktuelle ffmpeg kein Dateien mehr die der VDR erzeugt hat.


    Weiss jeman dazu genaues? Auf meiner gen2vdr tut er es noch.


    Als Versionsnummer finde ich nur "cvs"

  • Zitat

    Original von awolf
    Jetzt bin ich bei der CT-VDR5 noch auf ein neues Problem gestoßen. Anscheinend liest das aktuelle ffmpeg kein Dateien mehr die der VDR erzeugt hat.


    Weiss jeman dazu genaues? Auf meiner gen2vdr tut er es noch.


    Als Versionsnummer finde ich nur "cvs"


    Bei den höheren Versionen, ist die Angabe vom Eingang erforderlich -f mpeg.


    MFG Ronny

  • Hi ronny,


    danke für die fixe Antwort. Leider klappt das mit der Angabe von -f genausowenig. Es kommt dennoch die Meldung "001.vdr: unknown format"


    Habe es auch schon mit -f mpegts und -f mpegvideo probiert. Mag er nicht. Läuft es denn bei dir?

  • Hallo,


    wollte nur sagen, dass das eine ganz tolle Idee ist mit dem Plugin!


    Jetzt fehlt mir nur noch eine Funktion, mit der ich das ganze per Cron aufrufen kann für bestimmte Verzeichnisse...


    Ich dachte mal, dass der nachts - wahlweise, z.B. 02h - mit dem Konvertieren anfängt, dann ist der VDR eh wenig in Gebrauch... er läuft über zuvor eingestellte Verzeichnisse. Wenn ich also bei Aufnahmen diese als "Serie" unter "IPOD/Titel" aufnehme, könnte das Skript nachts alles darn umwandeln...


    Dann noch eine Funktion, die Dateien abrufbar zu machen (per Skript auf den Desktop schieben geht zwar, aber als eine Art Podcast einzurichten, den ich per ITMS-Abo nutzen könnte, wäre eleganter...


    Dann würde der IPOD automatisch befüllt, sobald der VDR was konvertiert hat und als Podcast im Hausnetz bereit stellt... Das wäre dann wirklich komfortabel.


    Nur so als Entwicklungszielanregung...


    Finde ich klasse, dass Du an so etwas schreibst! Werde es gerne testen, sofern es denn auch unter LinVDR einsetzbar ist...


    Gruß,
    Sascha

    SW Server: TvHeadend auf Ubuntu 12.04 [kann ersetzt werden]


    SW Client: XBMC 11 / ATV


    HW Server: Intel DH67CL | Core i3-2100 | 4GB RAM | 1x Digital Devices cine S2 V6 Twin DVB-S2 | 2x TT DVB-S 1500 budget | LG GSA-4167B DVD+/-R(W) | Corsair Force F60
    HW Client: ATV2 / ATV3

  • Hallo AWolf,


    gibt es was neues hinsichtlich Deines Skripts? Werde wohl in zwei Wochen einen iPod "mein eigen" nennen können und bin daher sehr daran interessiert...


    Gruß,
    Sascha

    SW Server: TvHeadend auf Ubuntu 12.04 [kann ersetzt werden]


    SW Client: XBMC 11 / ATV


    HW Server: Intel DH67CL | Core i3-2100 | 4GB RAM | 1x Digital Devices cine S2 V6 Twin DVB-S2 | 2x TT DVB-S 1500 budget | LG GSA-4167B DVD+/-R(W) | Corsair Force F60
    HW Client: ATV2 / ATV3

  • Hi,


    nach dem es gewünscht wurde ein (leider noch nicht sehr weit fortgeschrittener) Zwischenstand:


    Also die anfänglichen echt blöden Probleme mit dem Aufruf habe ich jetzt dank der guten Unterstützung hier im Griff. Das Script läuft jetzt aus dem VDR heraus und ruft brav ffmpeg zur Konvertierung auf.


    Aufruf aus der reccmds.conf lautet:


    Code
    MPEG1 Video erstellen   : /usr/lib/vdr/vdr2mpeg.sh


    Das Script selbst:



    Ich bastle weiter dran rum, leider kann ich nur wenig Zeit investieren, aber folgende Schritte kommen als nächstes dran:


    - Name der Ausgabedatei aus der Aufnahme übernehmen
    (bisher scheitert das Script wenn bereits eine Datei mit dem gleichen Namen existiert)
    - weiter *.vdr Dateien berücksichtigen
    - auf dem VDR Statusmeldungen ausgeben


    Andere Ideen werde ich, soweit ich Zeit finde berücksichtigen, aber das oben hat erstmal Prio 1.


    Die Idee, die konvertierten Videos per RSS-Feed anzuzeigen, ist sicher nicht schlecht ;) in den Music-Store nimmt Apple die aber sicher nicht auf!


    Bringt LinVDR denn den ffmpeg überhaupt mit?

  • Klasse, bin sehr gespannt.


    Ich dachte, dass ffmpeg beim LinVDR drauf ist, wenn auch in einer alten Version ( http://vdr-portal.de/board/thr…hilight=ffmpeg+linvdr</a>. Die geht scheinbar nicht, denn MacVDR wollte auch so ein Skript basteln... zumindest sollte es für das neue burn dazu kommen in 0.8 bzw. dafür leichter kompilierbar sein...


    Einen RSS-Feed sollte man doch in iTunes abonnieren können, auch wenn der Webserver nicht von apple stammt - das geht ja auch mit allen Podcasts aus dem Netz, die man abonnieren kann.


    Damit würde der Player die umgewandelten Aufnahmen des hemischen RSS-Feeders immer automatisch laden, wäre echt klasse.


    Aber das ist derzeit wohl nicht angesagt, erst einmal muss die Umwandlung sauber laufen, da gebe ich Dir voll und ganz recht.


    Ein simples automatisches Verschieben via samba/cron auf meinen Desktop würde mir auch fürs erste genügen, dort kann ich die Daten ja per Hand abgleichen...


    Viel Erfolg weiterhin!


    Gruß,
    Sascha

    SW Server: TvHeadend auf Ubuntu 12.04 [kann ersetzt werden]


    SW Client: XBMC 11 / ATV


    HW Server: Intel DH67CL | Core i3-2100 | 4GB RAM | 1x Digital Devices cine S2 V6 Twin DVB-S2 | 2x TT DVB-S 1500 budget | LG GSA-4167B DVD+/-R(W) | Corsair Force F60
    HW Client: ATV2 / ATV3

    Einmal editiert, zuletzt von 44892 ()

  • Hallo,


    ich habe heute mal weiter probiert. Das Script nimmt jetzt mit dem Zusatz


    Code
    # Name der Ausgabedatei ohne Endung
    # dritte Zeile aus der Datei info.vdr, 25 Zeichen Länge
    nam=`sed -n '3 p' "$1/info.vdr" | sed -r 's/^.{2}//' |awk '{ print substr($0,0,25)}' | sed -e 's/[ ]/_/g'`


    den Namen der Ausgabedatei aus der info.vdr die bei jeder Aufnahme vom vdr mit abgelegt wird.


    Das klappt prima. Was leider nicht gut funktioniert ist das Umleiten der 001.vdr 002.vdr etc. über die Pipe wie von ronnykornexl vorgeschlagen. Das klappt zwar prinzipiell, aber hinterher sind Ton und Bild nicht mehr synchron.


    Jemand eine Idee? Danke im Voraus!

  • Hallo zusammen,


    nach einigen Pausen und falschen Fährten habe ich jetzt das Script bzw. die Scripte so am laufen, dass ich es sehr gerne einsetze. Es sind zwei Scripte geworden damit sich längere Videos bearbeiten lassen und dann der VDR auch freigegeben wird.


    Scripte sind angehangen und laufen bei mir perfekt. Doku ist im Script drin. Wenn ihr Fragen habt, her damit!


    Die Weiterentwicklung Richtung RSS-Feed um die Dateien direkt in iTunes einzuladen kommt auch noch. Bin mich da gerade am reinarbeite, scheint nicht so schwierig zu sein. Mein Problem ist nur, dass es ja auch sein kann, dass man mehrere Videos im Feed bereitstellt. Die Logik um die Videos löschen zu können etc. muss ich mir noch überlegen. Das ist ein größerer Akt.


    Schau'n wir mal!


    Ach ja, was ich bisher noch nicht hinbekommen habe ist, dass man die Videos im iPod anhalten kann und der iPod an der gleichen Stelle weitermacht wenn man zwischenzeitlich was anderes angehört hat. Jemand eine Idee was ich mit dem Film machen muss, damit das klappt?


    Die Dateien werden jetzt übrigens doch mit "cat" angehangen, das hat keinen nennenswerten Probleme hervorgerufen.


  • Morgen


    Das mergen mit cut, braucht Recurcen, was mit named pipe nicht der Fall sein dürfte.


    MFG Ronny

    Einmal editiert, zuletzt von ronnykornexl ()

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!