Konvertierung AC3 -> AAC mit Gaps

  • Hallo zusammen,

    ich konvertieren gerade 'ne Serie mit deutscher und englischer Tonspur.
    Mediainfo erzählt mir das die FPS: 25 sei, das "Original" aber 23.976 ...
    Ich gehe also mal davon aus das der Videostrom tatsächlich in 23.976 ist, im Container (mkv) aber auf 25 gesetzt wurde damit das Vid synchron zur deutschen Tonspur läuft.
    Spielt man das ganze in VLC ab sind sowohl deutsche als auch englische Tonspur lippensyncron.

    Nun nehme ich aber das Ganze auseinander:

    Code
    C:\Program Files (x86)\Video Tools\eac3to-3.31\eac3to.exe" -demux bet_ng101dlwehd108.mkv

    und bekomme dabei:

    Danach ist die englische (a03) Tonsput total unsynchron ... Selbst nach einem "speedup" von 23.976 auf 25.
    Ich gehe mal davon aus das die vielenm kleinen "gaps" dafür verantwortlich sind ...
    Doch wie korrigert man sowas ???

  • Wenn ich Ton Verhältnis 23.976 zu 25 beschleunige, sollten keine Lücken zwischen den Audio-Frames entstehen. Im Gegenteil: die Audio-Frames sollten sich nun überlappen. Wenn stattdessen Frames verworfen und die entstehenden Lücken mit entsprechenden Timings ausgeglichen wurden, ist das noch unschöner, als eh schon.

    Mit ffmpeg würde man folgendes machen:
    ffmpeg -i "input.mkv" -map 0:1 -af aresample=async=1 "output.wav"
    ffmpeg -i "input.mkv" -map 0:2 -af aresample=async=1 "output.wav"
    (oder komplizierter mit multiple outputs, siehe ffmpeg doc)

    Diese dann ggf. beschleunigen/verlangsamen und encodieren.

    /edit:
    Nein, wenn ich es mir recht überlege, sollte eac3to eigentlich auch nichts anderes machen ("Realizing (E-)AC3 gaps...") als ffmpeg oben. Aber: warum sollte die Tonspur dann nach Extrahieren aynchron sein? Das ergibt für mich irgendwie keinen Sinn. :confused:
    Einzig für mich sinnvolle Erklärung: das Video ist VFR oder Du hast falsch getestet. Wie genau hast Du denn den Sync der mit eac3to extrahierten Spuren getestet?

    6 Mal editiert, zuletzt von sneaker2 (16. März 2017 um 18:09)

  • Zitat

    Einzig für mich sinnvolle Erklärung: das Video ist VFR oder Du hast falsch getestet.


    Wie wäre es mit:
    1. Video ist im Original 23.976fps aber das flag im Container steht auf 25fps
    2. englische Audiospur wird auf Grund eines 'stretch' wertes beim Playback auch beschleunigt
    3. deutsche Tonspur ist von einer anderen Quelle als die englische Tonspur und bereits mit 25fps gesyncht
    (hab ich schon öfters bei Samples von Hybrid Usern gesehen, die sich irgendwelche Serien runterladen,...)
    Wenn man einfach die Tonspuren extrahiert und wieder muxed ist das Ergebnis asynchron. :)

  • 1. laut eac3to-log kein fps-Wert im Bitstream, wird von eac3to beim extrahieren auf 25 fps gesetzt (wobei ich nicht weiß, wie zuverlässig das funktioniert)
    2. Ja, laut Log hat die englische Spur die Gaps.
    3. Ja, der Log impliziert die Gleichmäßigkeit der Timecodes der deutschen Spur.

    Ist halt die Frage, was er jetzt genau getestet hat.

  • zur Analyse: Stretch auslesen aus mkv ist tricky. :) (hab in Hybrid Funktionalität dafür geschrieben, per Hand kann man das vergessen)
    Wenn meine Vermutung richtig ist gäbe es zwei Möglichkeiten das zu fixen:
    a. engl. ac3 extrahieren, nach aac umwandeln, beim Muxen in mkv neu Muxen und den stretch setzen
    b. engl.ac3 extrahieren nach aac umwandeln und dabei einen SpeedUp auf die Tonspur
    => viel Erfolg :)

  • Wäre die Frage, was hier "zu fixen" ist. Denn was überhaupt Zweck der ganzen Übung ist, hat der Themenersteller nicht verraten. Und den Stretch gibt es so nicht bzw. wäre zumindest interessant, über welche Spur wir reden. Dazu "engl.ac3 extrahieren" ... wie bereits von LigH impliziert: da verhalten sich unterschiedliche Programme auch anders, in diesem Fall ein anderes Ergebnis mit eac3to als mit mkvextract.

  • "[a03] Creating silent AC3 frame failed. <WARNING>"
    Den Teil habe ich völlig übersehen. Dann könnte ffmpeg wie in meinem ersten Beitrag dargestellt doch eine Lösung sein (je nach Problem). Muß mir das mal genauer anschauen, was eac3to in solch einem Fall macht....

  • Nun "der Einfachheit wegen" sollte natürlich die englische Tonspur ge-fixed werden - mal abgesehen davon das diese ja Probleme macht.

    Ich kann mir das Ganze nur so erklären:
    Als das Ganze in .mkv gemuxed wurde, wurde dem Video Stream gesagt: "Du bist jetzt 25fps" ... damit du mit der deutschen Tonspur synchon läufst.
    Danach wurde der englische Track hinzugefügt. Damit dieser nun auch synchron lief wurde ihm gesagt: "Du bist jetzt auch 25fps". Da MKVmerge nicht neu codiert hat es wahrscheinlich die Gap's eingefügt damit das ganze von der Spieldauer her wieder passt ...
    Wenn dem so wäre, dann ist die nächste Frage: Wie verhält sich eac3to ? Ignoriert es die Gaps (dropped), füllt es sie mit "Stille" oder "honoriert" es die Gaps und verbiegt es wiederum die Zeitstempel ... ?

    Ich werde es jetzt erst mal mit mkvextract + neuencoden versuchen ... mal sehen was dabei rauskommt

    PS: Ich bin mir eigentlich sehr sicher das die deutsche und die englische Tonspur aus zwei unterschiedlichen Quellen kamen ...

  • Da MKVmerge nicht neu codiert hat es wahrscheinlich die Gap's eingefügt damit das ganze von der Spieldauer her wieder passt ...


    Das macht mkvmerge eigentlich nicht. Was sagen denn MediaInfo/MkvInfo zum Programm, welches die MKV erstellt hat?

    Wenn dem so wäre, dann ist die nächste Frage: Wie verhält sich eac3to ? Ignoriert es die Gaps (dropped), füllt es sie mit "Stille" oder "honoriert" es die Gaps und verbiegt es wiederum die Zeitstempel ... ?


    Eigentlich droppt eac3to Frames bzw. fügt stille Frames ein, so wie es nötig ist. Ich weiß jetzt aber nicht, ob "[a03] Creating silent AC3 frame failed. <WARNING>" uns sagt, daß dies fehlgeschlagen ist.
    Das ließe sich aber eigentlich vermeiden, in dem Du die .wav-Ausgabe wählst. Dann müßte eac3to gar keine AC3-Frames erstellen. Dieses ständige Demuxen ist eh eine Unsitte ... völlig unnötig, teils schädlich.

    Ich werde es jetzt erst mal mit mkvextract + neuencoden versuchen ... mal sehen was dabei rauskommt


    Das sollte scheitern, falls Du die Spur dann ohne Tempoänderung in die Original-MKV zu muxen versuchst. Dann hängt der Ton hinterher.

    Was jetzt genau das Ziel ist, ist mir aber weiterhin unklar.

    2 Mal editiert, zuletzt von sneaker2 (16. März 2017 um 20:31)

  • Nach Test: "[a03] Creating silent AC3 frame failed. <WARNING>" ist kein völliger Beinbruch. Statt Stille kopiert eac3to dann einfach Frames aus dem Stream. Daran sollte das Problem als eigentlich nicht liegen. Dann stellt sich aber natürlich die Frage, was Du da eigentlich genau machst. Oder bei Dir verhält sich eac3to doch wieder anders. Ohne die Datei selbst, kann ich dazu nicht viel sagen.

  • ... es geht immer noch darum das die englische Tonspur nach dem reencode unsynchron zum Bild läuft ... die deutsche aber passt ...

    Mediainfo sagt folgendes (zum Original)

    Code
    GeneralUnique ID                                : 231980533100289115276168921128645109826 (0xAE85D3555CC31005B2FDFCEF36A32842)Complete name                            : Q:\vid\2\test\bet_ng201dlbd108.mkvFormat                                   : MatroskaFormat version                           : Version 4 / Version 2File size                                : 929 MiBDuration                                 : 21 min 59 sOverall bit rate                         : 5 909 kb/sEncoded date                             : UTC 2013-03-26 21:16:43Writing application                      : mkvmerge v6.1.0 ('Old Devil') built on Mar  2 2013 14:32:37Writing library                          : libebml v1.3.0 + libmatroska v1.4.0VideoID                                       : 1Format                                   : AVCFormat/Info                              : Advanced Video CodecFormat profile                           : High@L4.1Format settings, CABAC                   : YesFormat settings, ReFrames                : 4 framesCodec ID                                 : V_MPEG4/ISO/AVCDuration                                 : 21 min 59 sBit rate                                 : 5 268 kb/sWidth                                    : 1 920 pixelsHeight                                   : 1 080 pixelsDisplay aspect ratio                     : 16:9Frame rate mode                          : ConstantFrame rate                               : 25.000 FPSOriginal frame rate                      : 23.976 (24000/1001) FPSColor space                              : YUVChroma subsampling                       : 4:2:0Bit depth                                : 8 bitsScan type                                : ProgressiveBits/(Pixel*Frame)                       : 0.102Stream size                              : 845 MiB (91%)Writing library                          : x264 core 130 r2273 b3065e6Encoding settings                        : cabac=1 / ref=4 / deblock=1:0:0 / analyse=0x3:0x113 / me=umh / subme=8 / psy=1 / psy_rd=1.00:0.00 / mixed_ref=1 / me_range=16 / chroma_me=1 / trellis=1 / 8x8dct=1 / cqm=0 / deadzone=21,11 / fast_pskip=1 / chroma_qp_offset=-2 / threads=12 / lookahead_threads=2 / sliced_threads=0 / nr=0 / decimate=1 / interlaced=0 / bluray_compat=0 / constrained_intra=0 / bframes=3 / b_pyramid=2 / b_adapt=2 / b_bias=0 / direct=3 / weightb=1 / open_gop=0 / weightp=2 / keyint=240 / keyint_min=23 / scenecut=40 / intra_refresh=0 / rc_lookahead=50 / rc=2pass / mbtree=1 / bitrate=5268 / ratetol=1.0 / qcomp=0.60 / qpmin=0 / qpmax=69 / qpstep=4 / cplxblur=20.0 / qblur=0.5 / ip_ratio=1.40 / aq=1:1.00Language                                 : GermanDefault                                  : YesForced                                   : NoAudio #1ID                                       : 2Format                                   : AC-3Format/Info                              : Audio Coding 3Format settings, Endianness              : BigCodec ID                                 : A_AC3Duration                                 : 21 min 59 sBit rate mode                            : ConstantBit rate                                 : 224 kb/sChannel(s)                               : 2 channelsChannel positions                        : Front: L RSampling rate                            : 48.0 kHzFrame rate                               : 31.250 FPS (1536 spf)Bit depth                                : 16 bitsCompression mode                         : LossyStream size                              : 35.2 MiB (4%)Language                                 : GermanService kind                             : Complete MainDefault                                  : YesForced                                   : NoAudio #2ID                                       : 3Format                                   : AC-3Format/Info                              : Audio Coding 3Format settings, Endianness              : BigCodec ID                                 : A_AC3Duration                                 : 21 min 59 sBit rate mode                            : ConstantBit rate                                 : 192 kb/sChannel(s)                               : 6 channelsChannel positions                        : Front: L C R, Side: L R, LFESampling rate                            : 44.1 kHzFrame rate                               : 28.711 FPS (1536 spf)Bit depth                                : 16 bitsCompression mode                         : LossyStream size                              : 30.2 MiB (3%)Language                                 : EnglishService kind                             : Complete MainDefault                                  : NoForced                                   : No

    So, jetzt mal die Theorie beisete !
    Im Grunde wird ja alles demultiplext um neucodiert zu werden. AVC -> HEVC (plus noch 'n bisschen Anime gefiltere) und AC3 -> AAC (via eac3to (als Decoder) + qaac).

    Der Videostrom wird neu codier auf 25 fps.
    Die deutsche Audiospur - demuxed - wird neu codier und passt danach zu den 25 fps
    Die englische Audiospur - demuxed mit gaps - wird neu codier und passt danach nicht zu den 25 fps

    Auch ein Speedup 23.97 -> 25 via MeGUI + Qaac hat den Versatz nur verschlimmert !

    Also hab ich jetzt mal Selur's Idee aufgegriffen und das ganze mit mkvextract (aktuelle Version) auseinandergenommen und wiederum den Audio Anteil nach aac gewandelt:

    Code
    for %%f in (*.ac3) do  "C:\Program Files (x86)\Video Tools\eac3to-3.31\eac3to.exe" "%%f" stdout.wav -normalize| "C:\Program Files (x86)\Video Tools\qaac_2.58\qaac_2.58\x64\qaac64.exe" --ignorelength --no-delay -q 2 -V 91 - -o "%%f.mp4"

    ... wie man sieht, kein Speedup !

    Und siehe da: Beide Tonspuren sind auf einmal synchron zum Video !

    Es liegt also an eac3to ... die Frage ist: Fault or Feature ?

  • Unsynchron ist "asynchron". [Blockierte Grafik: https://cosgan.de/images/smilie/figuren/a045.gif]

    Die Idee mit mkvmerge war eigentlich zuerst meine ;) ... aber das ist schon der Hinweis: eac3to unterstützt die Zeitscheiben-Streckung in MKV nicht, demultiplext also die Streckungen mehr oder weniger mit (oder kommt daran wegen der Timecodes durcheinander). Mit mkvextract kann man aber die ungestreckte Tonspur lückenlos extrahieren und diese dann ohne Probleme mit herkömmlicher Normkonvertierung umrechnen.

  • Wie gesagt: normalerweise behebt eac3to Lücken/Überlappungen beim Demuxen automatisch. Das sagt hier auch der Log ("[a03] Realizing (E-)AC3 gaps..."). Es macht ja auch keinen Sinn, wenn die Ausgabe von mkvextract, welches Lücken/Überlappungen völlig ignoriert, plötzlich synchron ist, obwohl hier alle von Stretching ausgehen. Das paßt nicht zusammen.

    Aber ohne die Datei selbst kann ich nicht sagen, ob und wenn ja welches Programm hier Mist baut.

  • Zum Stretch: Hybrid starte, 'Config->Automation->Extended Checks->Scan mkv for stretched streams' aktivieren, Quelle laden, wenn da was gestretched ist gibt Hybrid das aus.
    Wenn da kein Stretch ist, liegt es vermutlich an timecodes oder etwas anderem was eac3to ins Stolpern bringt. Stimme sneaker2 zu ohne Datei ist es ein reines herum raten.
    -> da may24 jetzt aber ne Lösung für sich gefunden hat ist weiteres drüber nachdenken (ohne Quelle) jedoch unsinnig. :)

Jetzt mitmachen!

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