.3gp mit meGUI - Bild und Ton asynchron

  • Hallo!


    Ich möchte .3gp-Videos für mein Sony Ericsson V600i erstellen. Ich weiß, dass das sehr einfach mit Super geht, aber das möchte ich nicht so gerne verwenden, weil 1. ich gerne genauer wissen möchte, wie das ganze funktioniert und 2. Super nur eine 1-pass Kodierung durchführt und die Videoqualität bei ähnlicher Bitrate immer schlechter ist, als die Qualität z.B. der Videos, die ab Werk auf dem Handy gespeichert waren (z.B. Strezz.3gp - falls das jemand kennt - mit der verrückten Biene).


    Also habe ich AVISynth/meGUI verwendet, um mein Ausgangsvideo (DV-AVI) auf die richtige Größe zu bringen und zu deinterlacen und schließlich das Video in ein Xvid-AVI (also MPEG4-ASP) und das Audio in AAC-LC (mit NDAAC) zu kodieren. Beide Streams habe ich dann mit mp4box/yamb in ein .3gp-Video gemuxed.


    Es hat zwar eine ganze Zeit gebraucht, bis ich herausbekommen habe, dass entweder das .3gp-Format selbst, oder aber mein V600i keine B-Frames im Videostream unterstützt, aber schließlich konnte mein Handy Bild und Ton tatsächlich wiedergeben - Allerdings...


    ...hat das Video zwar eine wirklich gute Qualität, aber Bild und Ton sind überhaupt nicht synchron zueinander. Ich habe den Eindruck, dass der Ton schneller wiedergegeben wird, als das Bild. Besonders bei längeren Videos (z.B. ca. 6 min) beträgt der Versatz schon nach wenigen Minuten mehrere Sekunden.


    Woran kann das liegen und wie kann ich das abstellen? Mit ist aufgefallen, dass die Audiostreams in den mitgelieferten .3gp-Videos (bei denen Bild und Ton synchron sind) eine Samplingfrequenz von 22kHz haben, während meine Audiostreams eine von 48kHz haben. Könnte das der Grund sein? Ich konnte das nicht ausprobieren, weil ich - anders als bei Super - in meGUI unter den Einstellungen für NDAAC keine Einstellmöglichkeit für die Samplingfrequenz gefunden habe...


    Welche Ideen habt Ihr?


    Gruß,
    Indy06

  • Vielen Dank für Deine Antwort!


    Was hast Du den für Einstellungen bei Xvid verwendet?
    Wie hoch ist den Deine Framerate?


    Als Bitrate für den Videostream nehme ich zwischen 200 und 250 kbps. Ich hatte mal gedacht, dass es vielleicht an einer zu hohen Bitrate des Videostreams liegt, aber auch mit nur 144 kbps tritt das Problem auf. Ansonsten verwende ich das meGUI-Profil Xvid: 2-pass Balanced, aber eben ohne B-Frames und mit MP4V als fourCC und deaktiviertem Turbo-Mode. Falls Du das Profil bzw. meGUI nicht kennst, aber auch alle anderen Xvid-Einstellungen wissen möchtest, dann muss ich nachher zu Hause noch mal gucken. Als Framerate wähle ich immer 25 Bilder pro Sekunde (mein Ausgangsmaterial (DV-AVI) hat ja auch 25 fps).


    Gruß,
    Indy

  • Bist Du Dir sicher, dass Dein Handy auch 25fps und die gewählten Einstellungen auch unterstützt?


    Sicher bin ich mir natürlich nicht. Ich hätte auch irgendwie erwartet, dass der Hersteller die *genauen* Spezifikationen für sein unterstütztes Videoformat bekannt gibt (z.B. auf seiner Homepage). Aber bei Sony Ericsson habe ich bis auf das übliche "3GP" oder vielleicht noch "MPEG4-ASP" bla bla nichts gefunden. Ich habe bisher immer G-Spot verwendet, um die Eigenschaften der mitgelieferten .3gp-Videos (die ja funktionieren) auszulesen. Gibt es da vielleicht noch etwas besseres? Ich werde jedenfalls noch mal genauer auf die Framerate der mitgelieferten Videos achten...


    Hab mal vor ner ganzen Weile ne Anleitung für Nokia Communicator geschrieben (http://www.flaskmpeg.info/board/thread.php?threadid=4936) eventuell hilft die weiter.


    Werde ich auf jeden Fall mal reinschauen! Vielen Dank,
    Indy06

  • MediaInfo und Avinaptic wären vermutlich noch einen Versuch wert.


    MediaInfo ist vielleicht tatsächlich hilfreich...


    Inzwischen habe ich endlich die Spezifikation für das K(V)600i unter http://developer.sonyericsson.…a5-4a1d-9190-cd0013abbe30 gefunden. Da steht:


    Code
    1. Video Codec:
    2. H.263 Profile 0 level 10;
    3. H.263 Profile 3 level 10;
    4. MPEG-4 Level 0 Part 2 Visual Simple profile;
    5. MPEG-4 Level 0b Part 2 Visual Simple profile


    Da ist ja wohl einiges durcheinandergeraten, denn es sollte doch wohl eigentlich heißen:


    MPEG-4 Part 2 (= MPEG-4 Visual) Simple@L0 bzw.
    MPEG-4 Part 2 (= MPEG-4 Visual) Simple@L0b,


    wobei ich über letzteres nichts herausgefunden habe. Allerdings würden mich die Unterschiede zwischen Level 0 und Level 0b interessieren.


    Das Problem ist jetzt folgendes: Das Handy kann offenbar auch andere Levels wiedergeben. Ich habe hier ein "Standard-3gp", dass nicht von mir ist, dessen Qualität mich aber schwer beeindruckt. MediaInfo sagt nun, dass es sich dabei um ein MPEG-4 Visual Simple@L1 handelt. Diese Datei hat aber nun 25 fps und eine konstante Bitrate von 96kbps (was aber zu viel für Level 1 ist). Noch bunter wird es, wenn ich versuche mein DV-AVI mit eben diesen Einstellungen zu kodieren. Dann ist die Qualität nämlich extrem viel schlechter, als die des "Standard-3gp". Mit anderen Worten hier passt irgendetwas nicht zusammen: Das Handy kann mglw. auch ganz andere Profiles und Levels wiedergeben und MediaInfo zeigt mglw. nicht die wirklichen Eigenschaften eines .3gp an.


    Alles höchst unbefriedigend.


    Schade ist, dass meine ursprünglichen Versuche (die ja eher dem Advanced Simple Profile entsprachen) im Prinzip sehr gut funktionieren - vom asynchronen Bild und Ton mal abgesehen...


    Witzig ist auch, dass mit Super ebensowenig Level 0-Dateien erzeugt werden. Super wählt nämlich auch 25 fps und eine Bitrate größer als 64 kbps. Die Videos von Super haben nur eben eine schlechtere Qualität als mein "Standard-3gp" aber immerhin eine bessere Qualität als wenn ich meGUI/Xvid mit Simple@L0/L1-Einstellungen (die meGUI-Profile habe ich übrigends aus Deinem Tutorial übernommen) verwende. Kann man denn Super nicht dazu bringen z.B. 2-pass encoding zu machen?


    Gruß,
    Indy06

  • Eine Frage vielleicht noch:


    Welche Einstellung des Xvid-Encoders führt denn dazu, dass MediaInfo


    Code
    1. Modus der Bildwiederholungsrate : variabelBildwiederholungsrate : 14,862 FPSminimale Bildwiederholungsrate : 0,183 FPSmaximale Bildwiederholungsrate : 15,000 FPSoriginale Bildwiederholungsrate : 25,000 FPS


    anzeigt, statt einfach nur


    Code
    1. Modus der Bildwiederholungsrate : konstant
    2. Bildwiederholungsrate : 25,000 FPS


    Das könnte doch auch noch mit dem asynchronen Bild und Ton zusammenhängen, oder?


    Gruß,
    Indy06

  • Was mich etwas wundert ist der "Modus der Bildwiederholungsrate : variabel", da müsstest Du Dir im Forum mal http://forum.gleitz.info/showthread.php?t=30923 durchlesen.
    Der wesentliche Unterschied dürfte aber die wesentlich niedrigere Framerate sein. (Bildwiederholungsrate: 14,862 FPS gegenüber 25,000 FPS) Was ich im Communicator Beitrag mit ChangeFPS(..) erledigt hatte, da dieser kein vfr unterstützt.


    Zitat

    Allerdings würden mich die Unterschiede zwischen Level 0 und Level 0b interessieren.


    level |max. bitrate max. | buffersize max. | decoder rate max. | framesize and framerate (typical)
    SP level 0 | 64 kbps | 160 kbit | 1485 macroblocks/s | QCIF @ 15fps
    SP level 0b| 128 kbps | 320 kbit | 1485 macroblocks/s | QCIF @ 15fps
    siehe: http://www.iis.fraunhofer.de/I…0Software_tcm97-67585.pdf Seite 4
    -> erlaubt höhere Datenraten, aber die Framerate von 25 ist da auch nicht erlaubt :)


    Zitat

    Kann man denn Super nicht dazu bringen z.B. 2-pass encoding zu machen?


    k.A. :)


    Hast Du jetzt eigentlich mal die Communicator Anleitung versucht?


    Cu Selur

  • Hast Du jetzt eigentlich mal die Communicator Anleitung versucht?


    Ja, 'tschuldige wenn das nicht so rauskam. Ich habe mich im Prinzip an Deine Anleitung für meGUI gehalten. Allerdings umgehe ich das d2v und erstelle direkt ein AVISynth-Script für mein DV-AVI (das sollte doch eigentlich kein Unterschied nachen, oder?), dass ich einfach sowohl als Video- als auch als Audio-Input (audio = true) in meGUI verwende. Dann habe ich Deine Simple Profiles importiert und das ganze sowohl mit 12, 15 als auch 25 fps (ChangeFPS() in Avisynth) und Simple@L0 konvertiert und *alle* Varianten (auch die mit 25 fps) funktionieren einwandfrei auf dem V600i. Nur eben die Qualität ist sehr deutlich schlechter, als die "Standard-3gp"-Datei, die ich immer zum Vergleich heranziehe und die ebenfalls 25 fps hat und einwandfrei funktioniert. Diese "Standard-3gp" hat die folgenden Einstellungen


    Code
    1. Modus der Bildwiederholungsrate : konstantBildwiederholungsrate : 25,000 FPS


    während alle mit meGUI/yamb erstellen 3gps so etwas wie


    Code
    1. Modus der Bildwiederholungsrate : variabel
    2. Bildwiederholungsrate : 14,862 FPS
    3. minimale Bildwiederholungsrate : 0,183 FPS
    4. maximale Bildwiederholungsrate : 15,000 FPS
    5. originale Bildwiederholungsrate : 25,000 FPS


    haben. Welcher Schalter in xvid ist denn verantwortlich für variable framerate, bzw. wie kommt diese Einstellung überhaupt zustande? Meine Hoffnung ist, dass ich, wenn ich die Framerate konstant bekomme, dass ich dann höhere Bitraten und andere Features aus höheren Levels oder gleich ASP verwenden kann, und die Videos dann trotzdem auf meinem Handy laufen (auch wenn dass dann natürlich nicht der Spezifikation entspricht, aber es soll ja nur funktionieren!)


    Indy06

  • Zitat

    ..das sollte doch eigentlich kein Unterschied nachen, oder?


    -> ne ist der richtige Weg bei .avi Input


    Zitat

    Welcher Schalter in xvid ist denn verantwortlich für variable framerate, bzw. wie kommt diese Einstellung überhaupt zustande?


    1. wenn Du keine Timecodes verwendest, erzeugt MeGui immer files mit konstanter Framerate. Vermute eher das liegt
    a. am Umpacken nach .3pg (Warum nimmst Du überhaupt .3gp und bleibst nicht bei .mp4, welches MeGui auch beherrschen sollte und soweit ich das lese auch von Deinem handy unterstüzt wird?)
    b. ein Bug im Tool ist mit dem Du die Infos ausliest.
    2. eigentlich würde vfr eher die Chance in sich bergen bessere Qualität zu erzeugen ;)


    Mal die Bitraten verglichen die bei deinen Encodes und dem Sample-3gp File verwendet werden?


    Cu Selur

  • Hallo!


    So, ich habe jetzt noch einmal ein bischen herumexperimentiert und kann sagen, dass Bild und Ton auf dem V600i nur dann nicht synchron laufen, wenn die Bitrate des Videos zu hoch wird. Sprich: 64kbps (Simple@L0) funktioniert, 128kbps (Simple@L0b) funktioniert, 144kbps funktioniert auch noch und ab 200kbps läuft der Ton dem Bild davon. Die Framerate spielt keine Rolle, da funktioniert alles von 12.5 bis 25 fps und auch variable Frameraten funktionieren wohl. Adaptive Quantisierung scheint auch kein Problem. Nur B-Frames darf man auf keinen Fall verwenden, denn dann erkennt das V600i die Videospur im 3gp gar nicht und spielt nur den Ton ab.



    1. wenn Du keine Timecodes verwendest, erzeugt MeGui immer files mit konstanter Framerate. Vermute eher das liegt
    a. am Umpacken nach .3pg (Warum nimmst Du überhaupt .3gp und bleibst nicht bei .mp4, welches MeGui auch beherrschen sollte und soweit ich das lese auch von Deinem handy unterstüzt wird?)


    Ja, das ist auch noch mal eine gute Idee. MP4 wird auf jeden Fall als Container unterstützt.


    Zitat


    b. ein Bug im Tool ist mit dem Du die Infos ausliest.


    Da habe ich auch schon dran gedacht. Vielleicht zeigt MediaInfo einfach auch mal falsche Infos an. 1. Wüsste ich nicht, dass mein Camcorder (Panasonic NV-GS320) überhaupt mit variabler Framerate aufzeichnet. 2. Müsste doch spätestens nach dem ChangeFPS() in Avisynth die Framerate konstant sein, oder nicht?


    Zitat


    Mal die Bitraten verglichen die bei deinen Encodes und dem Sample-3gp File verwendet werden?


    Ja, dass ist ja das erstaunliche: Das Sample-3gp File hat ein konstante Bitrate von 96kbps und dabei trotzdem eine deutlich bessere Bildqualität (ungefähr so, als würde ich mit >144kbps kodieren). Allerdings würde ich denken, dass das natürlich auch vom Ausgangsmaterial abhängt. Mein DV-AVI ist ja interlaced und enthält Szenen von meiner kleinen Tochter mit viel Rasen und anderen Strukturen und schnellen Bewegungen und das Sample-3gp ist eine Sequenz von Pixar (also computeranimiert). Das musste wohl nicht dinterlaced werden und ist vielleicht auch sonst leichter zu komprimieren...


    Was mich jetzt noch interssieren würde: Gibt es nicht eine möglichst vollständige Auflistung der erlaubten Encoder-Einstellungen für die verschiedenen MPEG4-Profile, am besten auch gleich mit Beispielen für die Parameter bestimmter Encoder-Implementierungen (z.B. Xvid)? Ich finde zwar immer irgendwann etwas über Google, aber nie eine vollständige Übersicht. Überhaupt finde ich es sehr schwierig zu diesem Thema zu recherchieren, weil es zu ein und derselben Sachen hunderte Synonyme und Bezeichnungen gibt. Z.B. MPEG part2/visual/ASP mit Level oder @L etc. pp. Und dann findet man ja auch nicht jeden Parameter in jedem Kodierprogramm (Super, meGUI, oder Xvid, ffmpeg etc. Häufig sehr frustrierend...


    Gruß,
    Indy06