720p (h264) Handy-Videos komprimieren

  • Hallo,

    mein Handy zeichnet, wie die meisten aktuellen Modelle, Videos in 720p/h264 auf. Leider verwendet es dafür eine extrem übertrieben hohe Bitrate von ca. 12000kb/s also fast 100MB/s.
    Ich möchte schon bei h264 bzw. x264 bleiben und nur die Bitrate auf etwa 1/3 reduzieren, ähnlich also wie gängige BR-Rips.
    Bisher scheitert es schon daran, dass die meisten von mir getesten Tools (meGUI, VirtualDub) nicht einmal mit h264-Input zurechtkommen.

    Was wären denn geeignete Tools für mein Vorhaben?

    Danke,
    Stefan


  • Bisher scheitert es schon daran, dass die meisten von mir getesten Tools (meGUI, VirtualDub) nicht einmal mit h264-Input zurechtkommen.


    Mit MeGUI sollte das kein Problem sein, wenn Du über Tools/File Indexer die Dateien öffnest und speicherst.

  • Hallo,

    mein Handy zeichnet, wie die meisten aktuellen Modelle, Videos in 720p/h264 auf. Leider verwendet es dafür eine extrem übertrieben hohe Bitrate von ca. 12000kb/s also fast 100MB/s.


    Ein Handy mit 12000kb/s - 720p - H264 ist doch perfekt! Wie kommst Du da auf 100MB/s ??? Fast genau in der selben Quali senden auch ARD und ZDF. Was willst Du mehr. Laß das so!!!

    PS: Wahnsinn das ein Handy diesen Datenstrom schafft. :D Also ich wär glücklich. :ja:

  • Da hat sich jemand verrechnet... 12 Mbps : 8 ~ 1,5 MB/s (mal Kilo/KiBi nicht genauer beachtet).

    Und ja, in der Tat: Viele AviSynth-basierte Konverter brauchen für AVC-Quellvideos erst mal das richtige Plugin zum Einlesen. Da gibt es verschiedene geeignete, je nach Voraussetzungen. Aber man muss eben von vorn herein wissen, dass z.B. die MeGUI weniger die eigentliche Mediendatei als "Videoquelle" verwaltet, sondern eher die Indexdatei, die eine Mediendatei zum Laden mit dem passenden Plugin vorbereitet. Die Indexdatei hilft ja insbesondere, an beliebiger Stelle im Video decodieren zu können.

    Ich habe letztens die Erfahrung machen müssen, dass das sogar für AVIs zutrifft: Wenn der Index fehlt, dann wird der Zugriff immer langsamer, je weiter die Position fortschreitet, weil AviSynth ohne Index die Position immer wieder vom Dateianfang suchen muss. In AVIs ist der Index in der Datei enthalten. MPEG4-AVC (H.264) gehört aber nicht in AVIs, sondern in modernere Kontainerformate. Da sind zusätzliche Indexdateien noch wichtiger, passend zum gewünschten Decoder-Plugin, weil nur allein ein Keyframe-Index (wie auch in MP4 oder MKV enthalten) nicht mehr zum schnellen Positionieren und Decodieren reicht. Entsprechend ist der MeGUI File Indexer der eigentlich wichtigste Programmpunkt.

  • Danke erstmal für alle Anworten!

    hdst
    Funktioniert!

    LigH
    Hatte mich nicht verrechnet, sondern vertippt: ich meinte natürlich ca. 100MB/Minute und das ist nach wie vor definitiv zu viel!

    Ich habe jetzt eine Reihe von Tests mit dem x264 BD5 1080p24 - 720p24 Profil (bei 3500 kb/s) gemacht und bin soweit mit Qualität und Größe eigentlich ganz zufrieden.
    Probleme bereitet mir die Tonspur. Am Anfang sind beiden Spuren noch synchron, mit der Zeit steigt der Delay jedoch an (Audio früher). Ich vermute, dass es an der variablen Framerate (laut Mediainfo) des Quellvideos liegt. Die Framerate des Zielvideos liegt bei konstant 28.571fps. Vermutlich wurde die Audiospur nicht entsprechend angepaßt.

    Was meint bzw. welches weitere Vorgehen empfehlt ihr?

  • Zitat

    Was meint bzw. welches weitere Vorgehen empfehlt ihr?


    Falls der Decoder den Du verwendest keine zusätzlichen Frames beim Encoden einfügt (was er nicht tut so wie es sich anhört) und falls mp4 oder mkv der Outputcontainer ist könnte man die TimeCodes auslesen und sie nach dem Reencoden wieder einfügen. Hierbei würde man als Output vfr beibehalten.
    Will man kein vfr beibehalten könnte man einfach einen Decoder nehmen, der Frames hinzufügt beim Decodieren.
    Da Du so wie es aussieht, Avisynth verwendest, müsste man dort einen anderen Decoder verwenden. (die Avisynth versierten User hier im Board können da sicher sagen, welche Decoder da aktuell am sinnigsten sind)

    Cu Selur

    Ps.: Falls Du ein kleines Sample hast mit Ton, bei dem man das Phänomen nachstellen wäre es super wenn Du das z.B. bei MultiUpload hochladen könntest.

  • Input- und Outputcontainer sind beide mp4.
    Beim Decoder bin ich mir nicht ganz sicher. Verwende wie gesagt MeGUI. Ich öffne wie von hdst vorgeschlagen die Datei über den File Indexer (FFMSIndex). Anschliessend wird automatisch der AviSynth script creator gestartet; an den Einstellungen ändere ich nichts. Danach wähle ich das x264 BD5 1080p24 - 720p24 Profil und passe die Bitrate an. Als Audio-Input nehme ich einfach das mp4-Input-File. Offenbar erkennt meGUI, dass ich mich an der Stelle nur für die Tonspur interessiere. Ich hatte sie auch mal mit yamb selber gedemuxt; hat aber auch nichts verändert! Grundsätzlich würde ich die Tonspur ohnehin nicht nochmal kodieren wollen, ist ja schon AAC, aber dazu vielleicht später...
    Das ist soweit eigentlich alles was ich an Einstellungen vornehme. Nur noch auf "Auto Encode", "No Target Size" aktivieren und fertig.

    Hier mal das Sample:
    Input:
    http://www.multiupload.com/PUOO4056FU
    http://www.mediafire.com/?xoq19mx60kdy026
    Output:
    http://www.multiupload.com/N5ASGEZ6G2
    http://www.mediafire.com/?8yw4px8njjqeuvc

    PS: Ach ja, wie man sieht, wird die Länge des (Ziel-)Videos nicht mehr korrekt angezeigt, angeblich ist es ca. doppelt so lang!

    Einmal editiert, zuletzt von hakua (24. Februar 2011 um 12:38)

  • Wenn du die MP4-Datei über den FFMSIndexer öffnest, dann verwendet AviSynth den FFmpegSource-Decoder. Der dürfte das Video "Bild für Bild" behandeln.

    Als Decoder, die VFR in CFR konvertieren, kenne ich bisher nur DirectShowSource... ich würde aber nicht behaupten, dass das damit auch hochwertig passiert. Wahrscheinlich ruckelt es da ab und zu. Besser würde es wahrscheinlich mit Funktionen wie in den MVTools funktionieren, aber da wäre mir nicht bekannt, dass die Framerate-Statistiken nutzen könnten.

    x264 selber kann ja nun auch VFR (Variable Frame Rate) encodieren, um das zu unterstützen, wurde ja extra die CRF-Berechnung (Constant Rate Factor) angepasst. Ich weiß allerdings noch nicht, wie man dafür (via "--tcfile-in") ein zusätzliches Timecode-Protokoll einzupflegen hat...

  • Versuch es alternative ohne die Autoencode-Funktion so:
    Tools/File Indexer/Avisynth script creator/save/Input/File Format auf RAWAVC/Enqueue/Queue/Job anklicken/Start (Kodierung läuft). Zwischenzeitlich den Ton mit Yamb extrahieren. Nach Beendigung der Kodierung:
    Tools/Muxer/MP4 Muxer/Video+Audio hinzufügen/Queue/Queue/Start (Muxen von RAWAVC und AAC)

  • Hab glaub ich nen recht einfachen Weg gefunden. :)
    Wenn man x264 selber (genauer ffms) als Decoder verwendet (und --force-cfr) aktiviert kriegt man folgendes: http://www.multiupload.com/F9M7DFH6BM
    sieht zumindest auf den ersten Blick synchron aus,.. :)

    Was ich gerade merkwürdiges festgestellt habe:
    Wenn ich das Video mit mkvmerge (mmg) öffne und als mkv speichere und dieses Analysiere, sagt MediaInfo:
    1. Frame rate sei 30.303fps
    und
    2. nichts mehr von vfr
    wenn ich dann das .mp4 mit mplayer analysiere erhalte ich folgende Info:

    beim .mp4 Input sagt MediaInfo noch:

    Cu Selur

  • Mit Mencoder könnte man die Videos sicherlich auch recht einfach encodieren man muß nur einen festen wert für die Framerate angeben z.B. -ofps 25.
    Sollten gelegentlich kleine ruckler im encodierten Video auftreten gibt es sicherlich noch einiges optimierungspotenzial an der Kommandozeile.
    Soweit ich es mal probiert hatte braucht man sich dann auch nicht mit der syncronytät des Audio rumärgern.

  • Wunderbar, das siehts sehr gut aus :D
    Wie hast du das jetzt genau gemacht? Würde auch die Variante ohne mencoder bevorzugen. Und am liebsten ist mir ohnehin eine skriptbare Variante, da ich das dann ja in Zukunft mit allen aufgezeichneten Videos machen möchte...

    Vielen Dank schonmal!!

  • Den Clip hab ich mit Hybrid encoded.
    1. Video geladen: Main->Inptu File,
    2. Audio Durchschleifen: Main->AudioHandling->Passthrough all
    3. CFR erzwingen durch x264: x264->Misc->Time codes->Force constant frame rate output
    3.1. alle möglichen anderen x264 Einstellungen geändert
    4. Output gesetzt: Main->Output File
    5. Job in die Queue hinzugefügt: Main->Add to Queue
    6. Job gestartet: Jobs->Start
    7. warten bis Hybrid fertig ist
    Hybrid ist nicht skriptbar (kann aber Batchprocessing).
    Wenn Du unter Jobs->JobHandling->Minimize job command lines deaktivierst siehst Du welche Befehle verwendet werden und die könntest Du dann natürlich der Reihe nach auch in irgendein Skript packen.

    Cu Selur

  • Zitat

    Die Force constant frame rate output Option ist bei mir nicht aktivierbar (ausgegraut).


    mist ist, ein kleiner bug in der GUI,
    deaktiviere und aktiviere mal x264->Misc->Adjustments->Adjustments->Use internal decoder if possible
    dann sollte es wieder gehen. ;)

    Cu Selur

Jetzt mitmachen!

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