Merging von mp4-files/Audio asynchron

  • So die beiden filmchen sind jetzt aufm server.

    http://rapidshare.com/files/9952531/merging_testfile2.mp4
    http://rapidshare.com/files/9962004/merging_testfile3.mp4

    das merging_testfile3.mp4, ist doppelt so lange wie testfile2, was mich dabei wundert, und weshalb ich auch beide upgeloadet habe ist, dass nach der gleichen abgelaufenen zeit (bspw. 3min) file3 viel asynchroner vom ton ist. Das kann ich mir nicht erklären, müsste das nicht gleich sein???

    bond: Also ich würde sagen das der delay sprunghaft ansteigt.

  • Also die Aufnahmen stammen von einer DV-Cam, das Material wurde dann in Premiere geschnitten und als unkomprimiertes AVI gespeichert. Dieses habe ich dann durch VirtualDub gejagt (im ZIP-Archiv findest du die Settings).
    Von den Einstellungen für XVID habe ich ein paar Screenshots gemacht, liegen auch in der ZIP-Datei.
    Der Sound ist mit 44.1kHz und 128kbit/s stereo (lame) codiert.

    WORKAROUND:

    1. ffmpeg >> AVI

    Code
    ffmpeg -y -i input1.avi -aspect 4:3 -s 320x240 -r 25 -vcodec h264 -level 13 -b 300k -flags +loop -flags2 +mixed_refs -me_method 2 -subq 6 -trellis 2 -refs 3 -coder 0 -me_range 16 -g 250 -qmin 10 -qmax 51 -qdiff 4 -acodec aac -ac 2 -ar 44100 -ab 80 output1.avi


    Für die restlichen files input2, 3, 4, ... genauso

    (In der "ffmpeg_log.rtf" im ZIP-Archiv, steht was ffmpeg bei mir anzeigt. Seitdem ffmpeg bei mir geupdated wurde, bekomme ich diese "bits_left" Zeilen ausgegeben, ist das ein Problem?)

    2. Avimerge

    Code
    avimerge -o merging_output.avi -i output1.avi output2.avi output3.avi  output4.avi output5.avi -c

    3. MP4Box >> Demuxen

    Code
    MP4Box -aviraw video merging_output.avi


    (erzeugt merging_output_video.h264)

    Code
    MP4Box -aviraw audio merging_output.avi


    (erzeugt merging_output_audio.raw)
    Das "merging_output_audio.raw" benenne ich in *.aac um.

    4. MP4BOX >> Remuxen in MP4

    Code
    MP4Box -add merging_output_video.h264:fps=25 -add merging_output_audio.aac merging_final.mp4
  • Danke zwiebel_sondermann, ich schau mir das mal an...

    BITTE Verzeih mir das ich jetzt nochmal nachfrage, Deine AVIs unter 1. ffmpeg >> AVI, sind alle 768x576?

    Und Du machst also so:
    DV-Cam > Premiere schneiden uncompressed > VDub compressed nach Xvid & MP3 > ffmpeg h264 & aac > avimerge joinen > MP4Box Demuxen > MP4Box Remuxen.

    Und das soll dann syncron werden?

  • Ja, die inputs haben 768x576. Und der Worflow ist so wie du ihn beschriebst.

    Am liebsten wäre mir eine Lösung: ffmpeg >> mp4 und das joinen der mp4's direkt über MP4Box, das führte aber auch zu Asynchronität. Der Workaround allerdings auch:-(

  • Nö. Die beste Lösung währe nach DV-Cam > Premiere schneiden uncompressed > ffmpeg encode nach Final MP4. Und das uncompressed, liegt als gesammt Clip vor.

    Fragen:
    * das machst Du alles unter Linux?
    * Premiere funktioniert unter Linux?
    * schneidet Du nur unter Premiere? Also Start / Ende oder sind dort noch andere verarbeitungen drin ( Animationen, Filter etc) ?

  • Leider geht das so nicht, der Clip aus Premiere ist ein Einzelclip, der dann per FTP upgeloadet wird, deswegen sollte dieser auch komprimiert sein. Danach wird dieser erst mit anderen Clips gejoint. Anders geht es leider nicht.

    Das schneiden und in XVID (768x576) codieren passiert auf einem Windows Rechner, Premiere gibt es nicht für Linux, das encoden in MP4 und Joinen läuft auf einem Linux-Server.

    Haupsächlich wird in Premiere nur geschnitten, warum ist das wichtig?

  • Leider geht das so nicht, der Clip aus Premiere ist ein Einzelclip, der dann per FTP upgeloadet wird, deswegen sollte dieser auch komprimiert sein. Danach wird dieser erst mit anderen Clips gejoint. Anders geht es leider nicht.

    Das schneiden und in XVID (768x576) codieren passiert auf einem Windows Rechner, Premiere gibt es nicht für Linux, das encoden in MP4 und Joinen läuft auf einem Linux-Server.

    Haupsächlich wird in Premiere nur geschnitten, warum ist das wichtig?

    Ich teste das jetzt mal genauso wie Du, jedoch arbeite ich ausschließlich unter Windows. Deshalb dauerts ein Stückle...

    Und es tut mir immer noch leid, das ich es noch nicht 100% verstehe. Halte mich doch mal für dumm und erkläre es GENAU!

    • Du hast ein Video Film von der DV-Kamera (EIN VIDEO STÜCK).
    • Das wird dann in Premiere geschnitten und Exportiert ( VIELE VIDEO STÜCKE)
    • Diese Video Stücke werden einzeln in VDub geladen und nach XviD und Variables MP3 gewandelt.
    • Dieses XviD Stücke werden dann mit dem AVIMerke Teil in ein Großes XviDAvi zusammengeklebt.
    • Dieses Geklebte mit ffmpeg in einen AVI Container gepackt, aber mit H264 und AAC
    • Dieses H264+AAC.avi getrennt und wieder als als MP4 FinalClip ausgegeben.

    Wenn Du das wirklich so machst, ist das nicht nur doppelt und dreifach falsch, sondern auch noch hoch tausend umständlich.

    * das DV Video kann man auch in VDub laden und gleich schneiden.
    * und wenn Du schon Windows nutzt, nimmt man gleich AVISynth.
    * oder warum lädst Du nicht die einzel Clips von Premiere nicht gleich in VDub und Encodetst Du es als ein Clip in Xvid?

    Ich kann im Moment wirklich nur den Kopfschütteln. Aber wie gesagt, ich machs gerade selber mal. Aber das dauert, weil doppelt und Dreifach encodet werden muß. Was ich überhaupt nicht versteh. naja...

  • Okay ich versuche mal die Verwirrung etwas zu entwirren:-)

    Also, gehe davon aus das es sich um mehrere Windows-Arbeitsplätze handelt, an denen Leute arbeiten die nichts mit Avisynth, schneiden mit VDub etc. zu tun haben wollen.
    An diesen Arbeitsplätzen wird eingehendes Videomaterial, die von einem einheitlichen Gerät kommen, zu einem Videobeitrag geschnitten (dies findet definitiv in Premiere statt).
    Die einzelnen Videostücke können an verschiedenen Arbeitsplätzen entstehen, und welche Stücke später aneinander gehängt werden, steht nicht direkt fest sondern passiert dynamisch. Das heißt lokal kann das nicht passieren, sondern auf einem zentralen Server.
    Auf diesem werden die XVID/AVIs aus VDub hochgeladen und idealerweise sollten sie dort per ffmpeg in h264/aac encodiert und dann gemerged werden (per mp4box). der umweg über avimerge, hat ja leider auch zu keinem synchronen ergebnis geführt. eine nicht so umständliche lösung wäre mir da auch lieber.

  • OK, also hat man als Source, mehrere XviD Videos "PUNKT"

    Code
    FILE_NAME                      TEST001.aviVIDEO_BITRATE                  1424VIDEO_CODEC_TYPE               xvidVIDEO_DURATION                 1:06.734VIDEO_FRAME_COUNT              10677888VIDEO_FRAMES_PER_SEC           29.970VIDEO_MPEG4                    MPEG-4VIDEO_MPEG4_BVOP               B-VOPVIDEO_MPEG4_GMC                GMCVIDEO_MPEG4_QPEL               QPelVIDEO_PAR                      1.000VIDEO_PICS_PER_SEC             29.970VIDEO_QF                       0.180VIDEO_SIZE_X                   688VIDEO_SIZE_Y                   384AUDIO_BITRATE                  128AUDIO_BITRATE_TYPE             CBRAUDIO_CHANNEL_COUNT            2AUDIO_CODEC                    0x0055 MPEG-1 Layer 3AUDIO_SAMPLE_RATE              44100
    Code
    FILE_NAME                      TEST002.aviVIDEO_BITRATE                  1333VIDEO_CODEC_TYPE               xvidVIDEO_DURATION                 1:06.734VIDEO_FRAME_COUNT              10681360VIDEO_FRAMES_PER_SEC           29.970VIDEO_MPEG4                    MPEG-4VIDEO_MPEG4_BVOP               B-VOPVIDEO_MPEG4_GMC                GMCVIDEO_MPEG4_QPEL               QPelVIDEO_PAR                      1.000VIDEO_PICS_PER_SEC             29.970VIDEO_QF                       0.168VIDEO_SIZE_X                   688VIDEO_SIZE_Y                   384AUDIO_BITRATE                  128AUDIO_BITRATE_TYPE             CBRAUDIO_CHANNEL_COUNT            2AUDIO_CODEC                    0x0055 MPEG-1 Layer 3AUDIO_SAMPLE_RATE              44100
    Code
    FILE_NAME                      TEST003.aviVIDEO_BITRATE                  1492VIDEO_CODEC_TYPE               xvidVIDEO_DURATION                 1:06.734VIDEO_FRAME_COUNT              11575776VIDEO_FRAMES_PER_SEC           29.970VIDEO_MPEG4                    MPEG-4VIDEO_MPEG4_BVOP               B-VOPVIDEO_MPEG4_GMC                GMCVIDEO_MPEG4_QPEL               QPelVIDEO_PAR                      1.000VIDEO_PICS_PER_SEC             29.970VIDEO_QF                       0.188VIDEO_SIZE_X                   688VIDEO_SIZE_Y                   384AUDIO_BITRATE                  128AUDIO_BITRATE_TYPE             CBRAUDIO_CHANNEL_COUNT            2AUDIO_CODEC                    0x0055 MPEG-1 Layer 3AUDIO_SAMPLE_RATE              44100
    Code
    FILE_NAME                      TEST004.aviVIDEO_BITRATE                  1477VIDEO_CODEC_TYPE               xvidVIDEO_DURATION                 1:06.734VIDEO_FRAME_COUNT              11213864VIDEO_FRAMES_PER_SEC           29.970VIDEO_MPEG4                    MPEG-4VIDEO_MPEG4_BVOP               B-VOPVIDEO_MPEG4_GMC                GMCVIDEO_MPEG4_QPEL               QPelVIDEO_PAR                      1.000VIDEO_PICS_PER_SEC             29.970VIDEO_QF                       0.187VIDEO_SIZE_X                   688VIDEO_SIZE_Y                   384AUDIO_BITRATE                  128AUDIO_BITRATE_TYPE             CBRAUDIO_CHANNEL_COUNT            2AUDIO_CODEC                    0x0055 MPEG-1 Layer 3AUDIO_SAMPLE_RATE              44100

    diese habe ich jeweils auch mit Controll-Rand+Sound gemacht. siehe Anhang.

    ------------------------------------------------


    Leider finde ich keine Windows Version von AVIMerge :( Deshalb nehme ich VDub um alle meine XviD.avis zu einem großen Clip zusammen zu kleben.

    Code
    FILE_NAME                      TEST001_TEST004.aviVIDEO_BITRATE                  1432VIDEO_CODEC_TYPE               xvidVIDEO_DURATION                 4:26.936VIDEO_FRAME_COUNT              11213896VIDEO_FRAMES_PER_SEC           29.970VIDEO_MPEG4                    MPEG-4VIDEO_MPEG4_BVOP               B-VOPVIDEO_MPEG4_GMC                GMCVIDEO_MPEG4_QPEL               QPelVIDEO_PAR                      1.000VIDEO_PICS_PER_SEC             29.970VIDEO_QF                       0.181VIDEO_SIZE_X                   688VIDEO_SIZE_Y                   384AUDIO_BITRATE                  128AUDIO_BITRATE_TYPE             CBRAUDIO_CHANNEL_COUNT            2AUDIO_CODEC                    0x0055 MPEG-1 Layer 3AUDIO_SAMPLE_RATE              44100

    ------------------------------------------------

    Encodiert mit ffmpeg:

    Code
    ffmpeg -i TEST001_TEST004.avi -s 320x180 -padcolor FFFFFF -padtop 30 -padbottom 30 -vcodec h264 -level 13 -b 300k -flags +loop -flags2 +mixed_refs -me_method 2 -subq 6 -trellis 2 -refs 3 -coder 0 -me_range 16 -g 250 -qmin 10 -qmax 51 -qdiff 4 -acodec aac -ac 2 -ar 44100 -ab 80 EXPORT_ORI.mp4  libavutil version: 49.0.0  libavcodec version: 51.9.0  libavformat version: 50.4.0  built on May 15 2006 01:55:21, gcc: 4.0.3Input #0, avi, from 'TEST001_TEST004.avi':  Duration: 00:04:26.9, start: 0.000000, bitrate: 1568 kb/s  Stream #0.0, 29.97 fps(r): Video: mpeg4, yuv420p, 688x384  Stream #0.1: Audio: mp3, 44100 Hz, stereo, 128 kb/sOutput #0, mp4, to 'EXPORT_ORI.mp4':  Stream #0.0, 29.97 fps(c): Video: h264, yuv420p, 320x240, q=10-51, 300 kb/s  Stream #0.1: Audio: aac, 44100 Hz, stereo, 80 kb/sStream mapping:  Stream #0.0 -> #0.0  Stream #0.1 -> #0.1[h264 @ 008D6E28]using SAR=129/128[h264 @ 008D6E28]using cpu capabilities MMX MMXEXT SSE SSE2frame= 8000 q=26.0 Lsize=   14351kB time=266.6 bitrate= 440.9kbits/svideo:11594kB audio:2603kB global headers:0kB muxing overhead 1.077543%[h264 @ 008D6E28]slice I:32    Avg QP:20.75  size:  5977[h264 @ 008D6E28]slice P:7968  Avg QP:22.71  size:  1466[h264 @ 008D6E28]mb I  I16..4: 58.9%  0.0% 41.1%[h264 @ 008D6E28]mb P  I16..4:  6.0%  0.0%  0.0%  P16..4: 36.5%  0.0%  0.0%  0.0%  0.0%    skip:57.5%[h264 @ 008D6E28]final ratefactor: 24.53[h264 @ 008D6E28]ref P  88.6%  6.7%  4.8%[h264 @ 008D6E28]kb/s:355.8

    ------------------------------------------------


    Ergebnis: SYNCRON!

    ------------------------------------------------

    auch habe ich mal nach 25fps Encodet, dies war auch syncron.

    entweder es liegt jetzt am VBR MP3 oder an diesem AVIMerge....

    Edit FinalClip: http://rapidshare.com/files/10063963/EXPORT_ORI.mp4.html

  • So die beiden filmchen sind jetzt aufm server.

    http://rapidshare.com/files/9952531/merging_testfile2.mp4
    http://rapidshare.com/files/9962004/merging_testfile3.mp4

    das merging_testfile3.mp4, ist doppelt so lange wie testfile2, was mich dabei wundert, und weshalb ich auch beide upgeloadet habe ist, dass nach der gleichen abgelaufenen zeit (bspw. 3min) file3 viel asynchroner vom ton ist. Das kann ich mir nicht erklären, müsste das nicht gleich sein???

    bond: Also ich würde sagen das der delay sprunghaft ansteigt.

    wenn man das mp4 analysiert sieht man, dass alle 1536 samples eine reihe von sehr kleinen samples kommt.

    das ist vermutlich durch eines der folgenden drei dinge verursacht:
    1) durch delay nullen in avi am anfang, falls ein delay in avi gesetzt wurde
    2) das audio in avi ist kürzer als das video und mp4box hängt einfach den folgenden audio stream direkt an das ende des letzten
    3) beides :D

    nimm einmal einen avi teil und sieh mal nach ob der audio stream kürzer als der video stream is in avi (ich denke das geht mit virtualdub

    demux auch das audio mp3 nach .mp3, remux nach avi und schau ob audio und video immer noch in sync sind

    Ich weiß, daß ich nichts weiß (Sokrates)

  • Leider ist der Arbeitsablauf nicht korrekt, es soll erst encodiert werden in h264/aac und dann erst gemerged.


    Was denn nun ? Erst vorher , dann nachher , jetzt wieder vorher? Außerdem schreibst doch selber das die XviD AVIs hochgeladen werden und diese dann nach mp4 encodet werden.

    Fakt ist: Das Euer (Dein) Arbeitsablauf nicht korrekt ist. Oder besser gesagt, weit wech von Qualität und Quantität.

    Und überhaupt: Wenn div. Leute jeder an seinem Premiere schneidet und es als uncompressed AVI wieder ausgibt. Wo bitte ist dieses dann zu finden und wer bitte Encodet dies dann in XviD AVI ( und dann noch Falsch, es gehört am Anfang ein I-Frame und wenn MP3 dann bitte CBR320kb)?

    Also das ganze ist doch sehr verworren. Vorallem, weil man ja gleich aus Premiere heraus in XviD Encoden könnte oder evt. sogar gleich in MP4. Könnt ich Wetten.

    Und dann ? Wer bitte soll sich diese per Zufall verbunden Stücken dann anschaun?

    --------------------------------------------------------

    wie ich schon vermutete, es liegt am ungleichen Video/Audio. Und sowas kann man mit NICHT syncron verbinden ( naja mal sehn, hab ja hier noch sehr teure Software, wo ich Quicktime Zeuch bearbeiten kann)

  • In jedem Ablauf den ich beschrieben hab findet das encodiernen von XVID/AVI in h264/AVI bzw. h264/mp4 vor dem zusammenfügen statt.

    Das encodieren von unkomprimierten AVI nach XVID/AVI passiert auf dem lokalen Arbeitsplatzrechner, der Zuständige muss einfach das VDub-Setting laden und ein Knöpfchen drücken, das wars, also nichts schwieriges. Das Problem an Premiere ist, das zwar XVID funktioniert aber kein mp3.
    Das unkomprimierte AVI ist nur ein Zwischenformat und wird im Anschluss gelöscht.
    Zur Info, es wird auf dem Server nicht nur in MP4 codiert, sondern auch in diverse andere Formate.
    Die Videos werden nicht per Zufall zusammengebastelt, sondern auf eine konkrete Anfrage.

    Warum genau CBR320kb?

  • also ich habe jetzt mehrere Authoring Software getestet um die einzelnen MP4s zu joinen. Als eigenständiger Film und Ohne ReEncode wirds leider nicht syncron (MP4 Container).

    Lustig: Wenns man es auf einem QuicktimePlayer abspielt, ist es dann syncron, weil MOV Container.

    Ergo Bleibt nur der Weg: von mehreren XviD-AVIs ein großes MP4 nach Kundenwunsch zu encoden... Welches bei mir 100% funktioniert.

    Jetzt erstelle ich mal VBR MP3s und suche nach einem CommandLine Joiner, der sauber AVIs verbinden kann.

    PS: verabschiede Dich von dem Gedanken, mehrere MP4s zu einem MP4 Syncron zu verbinden. Es sei, es baut dir einer Extra ein Programm, welches sowas Syncron machen kann.


    ------------------------------------------------------------------
    Edit: Deshalb CBR!!!! und 320 wegen der Quali!

    Ich brauch wirklich einen AVI Joiner, der auch VBR MP3s verbinden kann.
    VDubMod: Cannot append segment "H:\Doom9\zwiebel\TEST001\TEST002_VBR.avi": The audio streams have different data formats.

    Edit2 Erwartungsgemäß Syncon:

    Code
    v1=AVISource("H:\Doom9\zwiebel\TEST001\TEST001_VBR.avi")v2=AVISource("H:\Doom9\zwiebel\TEST001\TEST002_VBR.avi")v3=AVISource("H:\Doom9\zwiebel\TEST001\TEST003_VBR.avi")v4=AVISource("H:\Doom9\zwiebel\TEST001\TEST004_VBR.avi")AlignedSplice(v1,v2,v3,v4)AssumeFrameBased()

    ------------------------------------------------------------------
    Edit3: Suche nach einen VBR-AVI Joiner abgebrochen. Es gibt keinen der das Syncron kann.

    IM CBR Modus funktionierts und im AVISynth so oder so.

  • nimm einmal einen avi teil und sieh mal nach ob der audio stream kürzer als der video stream is in avi (ich denke das geht mit virtualdub

    Tatsächlich ist der Audiostream des AVI (xvid/mp3) 0.07s kürzer, das Problem liegt anscheinend am mp3 Codec, wenn ich ein unkomprimiertes, synchrones AVI in AVI xvid/mp3 encodiere (mit VDub) bekomme ich einen Delay.

    Mit meiner ffmpeg-Zeile und dem unkomprimierten AVI (synchron) als Input bekomme ich auch ein Video mit einer Tonspur die 0.06s kürzer ist.

    Hab dann mal die ffmpeg Parameter -vsync und -async ausprobiert, leider hat das bei mir nix gebracht. Weiß jemand was für Werte da sinnvoll sind?

    Gibt es eine Möglichkeit bei ffmpeg am Ende des Video ein paar ms abzuschneiden? Vielleicht krieg ich dann ein synchrones File???

  • Beides, einmal auf dem lokalen Arbeitsrechner von unkomprimierten AVI in AVI xvid/mp3 (dort bekomme ich einen delay) und dann ja nochmal auf dem Server von AVI xvid/mp3 in diverse andere Formate wie z.B. mp4 h264/aac (dort habe ich dann wieder ein delay problem) deshalb muss das mit CBR doch sicher an beiden Stellen berücksichtigt werden.

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!