• Hi,
    ich möchte ein paar Avi-Dateien in MP4-Dateien umwandeln. Damit Quicktime/iTunes diese Dateien aber auch abspielen kann, muss ich die Tonspur von mp3 zu AAC umwandeln. Bisher mache ich das so:

    mp4box -aviraw video ...
    mp4box -aviraw audio ...

    Danach konvertiere ich die mp3 mit afconvert (unter Mac). Das nutzt ja CoreAudio.

    Zum Schluss merge ich dann Audio und Video.

    Zwei Fragen hierzu:
    1) Ich habe leider festgestellt, dass die Tonspur nun eine etwas andere Länge hat als vor dem Umwandeln. Es sind zwar bspw. nur 0.05 Sekunden, aber ist das irgendwie problematisch? Habe bisher keine Asynchronität festgestellt.
    2) Die eben genannte Methode dauert recht lange. Daher habe ich mir überlegt, das Ganze mit ffmpeg (direkt) zu machen (ohne die Spuren zu extrahieren). Allerdings habe ich mal gelesen, dass libfaac auf 160 kbps begrenzt ist (die Ausgangsdatei hat eine 192kbps-mp3-Tonspur) und dass CoreAudio bessere AAC-Dateien erstellt. Ist es daher sinnvoller, die obige Methode weiterhin zu nutzen?

  • 1.) Ja, das ist normal. Bei AAC, MP3, Vorbis, AC3 etc. verlängern sich Prinzipbedingt die Tonspuren am Anfang und Ende etwas. Das am Anfang kann man versuchen wieder wegzuschneiden (vor oder nach dem Encoding) ("encoder delay")
    2.) Mußt Du letztendlich selbst entscheiden, aber bei bisherigen Vergleichen hat der Apple-Encoder tatsächlich sehr gut und die ffmpeg-Teile (gibt verschiedene) eher schlecht abgeschnitten. Unter Windows nutze ich gerne eine Pipe um das Demuxen zu sparen - weiß nicht, welche Möglichkeiten es da auf dem Mac gibt.

  • Angemerkt sei auch, dass neuere qaac Versionen (ab 2.1.2) auch eine Option namens '--no-delay' haben:

    Zitat

    --no-delay will compensate encoder delay (2112 samples) by prepending silence of 960 samples before sending input to encoder, then trimming 3 AAC frames at beginning (2112 + 960 = 3072 = 1024 * 3, where 1024 is the frame length of AAC. So total amount of delay will be exactly equals to length of 3 AAC frames). Note that these numbers are doubled in case of SBR.

    This option is meant for video as a mean to resolve A/V sync issue. The resultant AAC will have exactly zero-delay, but might have pops/clicks at the beginning. Use with care.


    welche den Encoderdelay 'beseitigt'.

    Cu Selur

  • Danke für die Antworten!

    Unter Windows nutze ich gerne eine Pipe um das Demuxen zu sparen - weiß nicht, welche Möglichkeiten es da auf dem Mac gibt.


    Wie genau?

    Angemerkt sei auch, dass neuere qaac Versionen (ab 2.1.2) auch eine Option namens '--no-delay' haben:


    Ach cool, ich kannte qaac gar nicht. Das nutzt ja ebenfalls CoreAudio. Dann muss ich das mal testen, vielen Dank! Habe bei afconvert noch keine solch eine Möglichkeit gefunden.

  • Zitat

    weiß nicht, welche Möglichkeiten es da auf dem Mac gibt.


    Mac kann pipe und named pipes nutzen. (wie unter linux mittels mkfifo)

    zu qaac: Das ist 'Windows only'. afconvert wäre eine alternative dazu auf dem Mac.
    Leider akzeptiert afconvert so weit mir bekannt keinen pipe input. (geht vielleicht mit named pipes; das hab ich noch nie versucht :))
    Falls

  • Also das mit den named pipes habe ich leider nicht hinbekommen. Vermutlich geht das nicht mit afconvert :(

    Entsteht dieser Delay denn in gleichen Teilen am Anfang und am Ende? Habe mir ein kleines Bash-Skript geschrieben, welches die Differenz der Dateien ausrechnet (lese es mit mediainfo aus). An sich könnte ich ja jetzt den gewünschten Teil dann über ffmpeg abschneiden.
    Habe zur Sicherheit nochmal die Dateien in Audacity eingelesen, um es zu vergleichen. Leider zeigt der in der mp3-Datei sogar eine andere Länge an :S

  • Entsteht dieser Delay denn in gleichen Teilen am Anfang und am Ende?

    Nein, die sind unterschiedlicher Natur. Aufgrund der Natur der Audiocodecs (MDCT) entsteht am Anfang eine Verzögerung. Die zusätzliche Länge am Ende ensteht dadurch, daß viele Codecs mit festen Paketlängen arbeiten, also z.B. ist ein Paket immer 20ms lang. Wenn das am Ende nicht zufällig aufgeht, muß halt der Rest von 20ms noch mit Stille aufgefüllt werden. Deshalb kann man das auch nicht einfach anhand der Länge errechnen.

    Manche Encoder erlauben es, das Delay von vorherein auszugleichen, ansonsten muß man Nacharbeiten. Teilweise ist es recht einfach, da einige Encoder immer dasselbe Delay verwenden. Apple AAC-LC z.B. immer 2112 Samples.

  • Zum Verständnis kannst Du mal http://forum.gleitz.info/showthread.php…ht-mit-MKVMerge und die dort verlinken Threads lesen.

    Zitat

    Entsteht dieser Delay denn in gleichen Teilen am Anfang und am Ende?


    Der Delay entsteht am Anfang.

    Zitat

    Habe mir ein kleines Bash-Skript geschrieben, welches die Differenz der Dateien ausrechnet (lese es mit mediainfo aus). An sich könnte ich ja jetzt den gewünschten Teil dann über ffmpeg abschneiden.


    k.A. wie verlässliche MediaInfo da bei der Längenangabe ist,... (vermute nicht besonders, zu bedenken ist, dass man die Länge der RAW Streams ermitteln muss und die Länge die Im Header steht vermutlich nicht stimmt :))

  • Die Länge auszurechnen bringt eh nichts, da:
    Delay + alte Länge + Padding == neue Länge

    Eine Gleichung mit zwei Unbekannten und ohne eindeutige Lösung (bzw. mit unendlichen vielen Lösungen).

  • Die zusätzliche Länge am Ende ensteht dadurch, daß viele Codecs mit festen Paketlängen arbeiten, also z.B. ist ein Paket immer 20ms lang. Wenn das am Ende nicht zufällig aufgeht, muß halt der Rest von 20ms noch mit Stille aufgefüllt werden. Deshalb kann man das auch nicht einfach anhand der Länge errechnen.


    Achso. Dann müsste man sozusagen die einzelnen Pakete analysieren?. Okay, den Aufwand ist es mir nicht wert. Diese 0.05 Sekunden Verzögerung hört ohnehin kein Mensch ;)
    Trotzdem danke.

    Manche Encoder erlauben es, das Delay von vorherein auszugleichen, ansonsten muß man Nacharbeiten. Teilweise ist es recht einfach, da einige Encoder immer dasselbe Delay verwenden. Apple AAC-LC z.B. immer 2112 Samples.


    Hm, afconvert erlaubt es meines Wissens nach nicht, diesen Delay auszugleichen.
    Was bedeutet denn 2112 Samples? Haben die eine bestimmte Länge, die man ausrechnen kann? Mir kam gerade die Überlegung, dass ich ja am Ende gar nichts abschneiden muss, wichtig ist ja nur der Anfang.

    -------------
    Eine andere Frage noch: Das Ausgangsmaterial hat eine CBR von 192kbps. Ist es grundsätzlich besser, eine CBR beizubehalten, oder auf VBR zu wechseln? afconvert bietet hier auch noch die Möglichkeit einer constrained VBR. Soweit ich das verstanden habe, ist es das gleiche wie VBR, nur mit einer maximalen Bitrate, oder? Wäre das besser?

  • Was bedeutet denn 2112 Samples? Haben die eine bestimmte Länge, die man ausrechnen kann?

    Anzahl an Samples / Samplerate = Delay
    z.B.
    2112 Samples / (48000 Samples/Sekunde) = 0,044 s = 44ms

    Mir kam gerade die Überlegung, dass ich ja am Ende gar nichts abschneiden muss, wichtig ist ja nur der Anfang.

    Genau.


    Eine andere Frage noch: Das Ausgangsmaterial hat eine CBR von 192kbps. Ist es grundsätzlich besser, eine CBR beizubehalten, oder auf VBR zu wechseln?

    VBR ist in der Regel zu bevorzugen. Ob CVBR oder "true" VBR ist meist nicht soo entscheident - bei einem Vergleichstest schnitt Apple CVBR ein kleines bißchen besser ab als TVBR.

  • Anzahl an Samples / Samplerate = Delay
    z.B.
    2112 Samples / (48000 Samples/Sekunde) = 0,044 s = 44ms

    Da dies auch in dem anderen Beitrag steht, den Selur verlinkt hat, habe ich dies schon getestet. Ich habe mehrere Dateien getestet und den Delay in Audacity überprüft. Leider betrug er bei einer Datei 33ms, bei einer anderen hingegen 57ms.

  • Ja, beide auf die gleiche Art und Weise konvertiert. Hier der genaue Command:
    afconvert -f m4af -d aac -s 2 -b 192000 audio.mp3 audio.m4a

    Die Ausgangsdateien (und auch die konvertierten Dateien) haben beide 48 KHz

Jetzt mitmachen!

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