FAAC mit AviDemux_Cli

  • Hallo,


    kann man bei AviDemux_Cli FAAC als Zielformat einstellen?


    Hintergrund:

    Ich möchte viele Videos meiner DigiCam (MJPEG/PCM) mit einer Batchdatei zu x264/AAC transocden.

    Ich habe das mit AviDemux_Cli probiert, aber laut Wiki
    http://avidemux.org/admWiki/index.…_usage#Commands
    (zweite Zeile in der Tabelle)
    kann man als Zielformat NICHT FAAC einstellen.


    Kann man das vielleicht doch irgendwie und ist die Funktion in den im Netz herumschwirrenden Anleitungen vielleicht nur (noch) nicht beschrieben?


    Schonmal Danke für eure Hilfe.

  • Ein Blick in die Quellcodes offenbart, dass man FAAC tatsäclich nicht über "--audio-codec" setzen kann:

    Code
    AUTOMATON reaction_table[]={	        [...]        {"audio-codec",1,"set audio codec (MP2/MP3/AC3/NONE (WAV PCM)/TWOLAME/COPY)",call_audiocodec},        [...]}
    Code
    void call_audiocodec(char *p){	if(!strcasecmp(p,"MP2"))		audioCodecSetcodec( AUDIOENC_MP2 );	else if(!strcasecmp(p,"AC3"))		audioCodecSetcodec( AUDIOENC_AC3 );#ifdef HAVE_LIBMP3LAME			else if(!strcasecmp(p,"MP3"))		 audioCodecSetcodec( AUDIOENC_MP3 );#endif	else if(!strcasecmp(p,"NONE"))		audioCodecSetcodec( AUDIOENC_NONE );	else if(!strcasecmp(p,"TWOLAME"))		audioCodecSetcodec( AUDIOENC_2LAME );		#ifdef USE_VORBIS			else if(!strcasecmp(p,"VORBIS"))		audioCodecSetcodec( AUDIOENC_VORBIS );		#endif			else if(!strcasecmp(p,"COPY"))		audioCodecSetcodec( AUDIOENC_COPY );			else{		audioCodecSetcodec( AUDIOENC_NONE );		fprintf(stderr,"audio codec \"%s\" unknown.\n",p);	}}


    Sollte sich aber einfach beheben lassen. Müsste man nur einen Entwickler freundlich bitten, die fehlende Zeile einzufügen ;)

    Code
    #ifdef USE_FAAC
    	else if(!strcasecmp(p,"AAC"))
    		audioCodecSetcodec( AUDIOENC_FAAC );		
    #endif
  • Ich habe das Built 4532 gerade mal in qt4 mit den Presets getestet, die ich mit dem Release sonst immer benutze.

    Ein 100MB-AVI mit MJPEG/PCM wird mit dem Release 12 MB groß.
    Mit den gleichen Presets erzeugt das Built 4532 15,5 MB.
    Das Built meldet am Ende, dass die Datei nicht erfolgreich auf die Platte geschrieben werden konnte, obwohl das Video problemlos mit MPC abgespielt werden kann.

    Die Bildqualität des Builts 4532 ist aber trotz größerer Datei deutlich schlechter, als die des Releases.


    Ich werde heute Abend, wenn ich etwas Zeit habe, die EXE des Built4532 mit den Dateien des Releases ausprobieren.
    Wenn das geht, werde ich gucken, ob ich das dann auch mit der *Cli.EXE auf die Kette bekomme.

    Falls es interessiert, so sehen mein Preset aus:

  • 1. Ich denke die Folgende Zeile ist nicht unbedingt zwischen verschiedenen Avidemux Versionen portierbar:

    Code
    app.video.codec("X264","AQ=26","188 00 00 00 00 00 00 00 00 00 00 00 00 28 00 00 00 1e 00 00 00 3c 00 00 00 0a 00 00 00 33 00 00 00 04 00 00 00 01 00 00 00 28 00 00 00 19 00 00 00 fa 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 00 00 00 00 01 00 00 00 01 00 00 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 04 00 00 00 10 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 5a 00 00 00 ");

    2. Seit der letzten Release Version hat sich an x264 ziemlich viel verändert, insbesondere auch die Bedeutung der CRF Werte. Allgemein lässt sich aber feststellen, dass der gleiche CRF Wert jetzt zwar größere Dateien erzeugt als früher, der Qualitätsgewinn ist aber größer, als die zusätzliche Datenrate es eigentlich wert wäre. Sprich: CRF liefert jetzt noch mehr Qualität pro Bit. Allerdings hat sich die CRF Skala so verändert, dass man jetzt eher etwas höhere Werte wählen muss, um das gleiche Ergebnis wie früher zu erhalten.

    3. Auch in Avidemux selbst wurden seit dem letzen Release diverse Probleme bezüglich x264 gefixt. So werden die Frames jetzt am Ende des Encodes korrekt aus dem Encoder geflusht (das war früher nicht der Fall!). Und seit neustem läuft der erste Durchgang eines 2-Pass Encodes endlich mit "--bitrate [Zielbitrate]" anstatt mit "--qp 2" (das rührte wohl noch aus der Frühzeit von x264 her). Hat mich einiges an Überzeugungsarbeit gekostet, bis mein Patch diesbezüglich akzeptiert wurde ^^

  • Danke für den Hinweis.

    Ich bin gerade nach einer ordentlichen Erkältung endlich dazu gekommen, die neusten Erkenntnisse auszuprobieren.

    Ich habe die Kommandozeilenversion so aufgerufen:

    Code
    %programm% --load "%~1" --audio-resample 44100 --audio-codec aac --video-codec x264 --video-conf cq=26 --save "%~1".mp4 --output-format MP4


    Ich habe also nur die nötigsten Parameter angegeben, wie ich es auch mit der qt4-Version sonst gemacht habe. Mit q26 bei der CLI wird das Ergebnis ähnlich groß, wie mit q24 bei der qt4. Das Ergebnis sieht für mich auch brauchbar aus.


    Die Onlinehilfe ist gerade leider nicht erreichbar, aber mit --help habe ich zusätzliche Parameter für den Video-Codec gefunden.


    Code
    --video-conf, set video codec conf cq=q|cbr=br|2pass=size)[,mbr=br][,matrix=(0|1|2|3)]
      (one arg)
    --reuse-2pass-log, reuse 2pass logfile if it exists
      (no args)
    --set-pp, set post processing default value,value(1=hdeblok|2=vdeblock|4=dering) and strength (0-5)
      (two args)

    Lässt sich damit die Bildqualität verbessern, ohne die Datei nennenswert zu vergrößern?
    Zeit spielt fast keine Rolle. Ich würde auch doppelt so lange encoden, wenn dadurch eine deutliche Qualitätssteigerung bei ähnlicher Dateigröße heraus käme.

    Kann mir jemand Tipps geben, welche Parameter ich dazu setzen müsste?

  • Lässt sich damit die Bildqualität verbessern, ohne die Datei nennenswert zu vergrößern?

    Welche x264 Optionen bei Avidemux über das CLI Interface direkt zugänglich sind weiß ich nicht.
    Ich vermute aber, um app.video.codec("X264","AQ=26"," ... "); wird man da nicht herumkommen.

    Die "Qualität pro Bit" lässt sich mit diversen Optionen verbessern, allerdings bezahlst du dafür mit längerer Enkodierzeit.

    Ich würde mal damit Anfangen:
    * Die "Partition Decision" erhöhen. Wenn's sein muss, bis auf 9
    * "8x8 Transform aktivieren"
    * ME Methode auf "Uneven Multi-Hexagon" setzen
    * Die Anzahl der "Ref Frames" auf ~6 setzen (viel mehr ist wenig sinnvoll, aber langsamer)
    * "Trellis" auf "2" setzen
    * Die B-Frame Methode auf "Optimal" setzen (heißt in Avidemux seltsamerweise "Adaptive DCT")
    * Die Anzahl der "B-Frames" auf "4" setzen (viel mehr ist wenig sinnvoll, aber erheblich langsamer)
    * Und die B-Pyramide ("Usa as reference") sollte auch an sein

    Ansonsten:
    http://mulder.dummwiedeutsch.de/pub/x264/

  • Danke für die Optimierungstipps, aber die funktionieren vermutlich nur, wenn ich für jedes Video eine Projektdatei anlege.
    Diese dann per Skript zu erstellen, bekomme ich nicht hin.

    Ich muss mit den Kommandozeilenparametern von Avidemux zurecht kommen, und ich vermute, dass da nur die beiden Schalter
    --set-pp
    und
    --video-conf [,mbr=br][,matrix=(0|1|2|3)]
    in Frage kommen.


    Leider finde ich nirgendwo eine Erklärung, was man mit den Parametern beeinflusst, bzw. wie es sich auf die Rechenzeit, Qualität und Dateigröße auswirkt.

    Von den Bezeichnungen her kann ich auch keine Brücken zu deinen Tipps schlagen.

  • Du kannst doch ein Project mit den gewünschten x264 Einstellungen speichern und dann alles, außer der "app.video.codec" Zeile, aus der gespeicherten JavaScript Datei werfen.

    Diese Datei lädst du dann per Kommandozeile und dem "--load-workbench" Befehl. Dann sollte er eigentlich nichts tun, außer die x264 Optionen aus dem script zu übernehmen.

    Klappt das so nicht ???

  • Also zumindest nicht auf Anhieb.

    Für mich sieht das so aus, als würde Avidemux das Video zuerst ordentlich öffnen und den Codec richtig als MJPEG erkennen.

    Aber dann verhaspelt es sich wohl und will auf das Projektfile zugreifen, als wäre das ein Video.

    Aufgerufen habe ich das so:

    Code
    Set Programm="F:\Programme\avidemux 2.4\avidemux2_cli.exe"
    
    
    %programm% --load "%~1" --load-workbench f:\z_test\digicam4532_q30_5db.js --save "%~1".mp4 --output-format MP4

    Einmal editiert, zuletzt von Schnarchnase (31. Januar 2009 um 15:12)

  • Ahhh, ich glaube, ich hab's.

    Da muss nicht --load-workbench hin, sondern --codec-conf.
    Damit klappt's. Zumindest habe ich erstmal den Eindruck :)

    Mit --load-workbench lädt der wohl files, die er encoden will.


    ...

    Scheint doch nicht zu funktionieren. Im Ergebnis sind die Videos nur kopiert, aber nicht transcodet. Audio transcodet er.

    Ich wollte das mal mit der qt4-Version vergleichen, aber die meldet am Ende immer, dass das File nicht erfolgreich gespeichert worden wäre, sobald ich es als mp4 speichere. Wenn ich es als AVI speichere, geht es.

    Morgen habe ich hoffentlich etwas Zeit, um mal ein paar Varianten auszuprobieren.

    Einmal editiert, zuletzt von Schnarchnase (26. Januar 2009 um 18:57)

  • Ich glaube, ich hab's jetzt.

    Meine Batchdatei sieht im Wesentlichen so aus

    Code
    Set Programm="F:\Programme\avidemux 2.4\avidemux2_cli.exe"%programm% --load "%~1" --run f:\z_test2\test2.js --save "%~1".mp4 --output-format MP4 >"%~1".txt

    Das Kommando --run hat für den Durchbruch gesorgt :)


    Die Projektdatei sieht so aus:


    Da konnte ich das Meiste rausschmeißen.


    So, wie es aussieht, macht die Batchdatei nun genau das, was ich schon lange gesucht habe. Das Schöne ist, dass Videos nun in dem Verzeichnis erstellt werden, in dem das Inputfile liegt. Mit der GUI hat AviDemux immer das letzte Verzeichnis genommen.

    Ein wenig erstaunt war ich über den Zugriff auf die Projektdatei. Die GUI nimmt die hier ausschließlich, wenn die in einem von Avidemux festgelegten Ordner liegen. Die Cli nimmt die dagegen aus dem aktuellen Ordner, oder ich kann einen kompletten Pfad angeben.


    Erste Sahne!

    Vielen Dank für die Hilfe!

    :D

Jetzt mitmachen!

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