2016-07-03 11 views
1

Ich versuche, 2 MP4-Dateien mit FFMPEG zusammenführen. Eine dieser Dateien hat sowohl Video als auch Audio (track1.mp4), während die andere nur Audio hat (track2.mp4). Die Namen dieser Dateien werden in einer Textdatei aufgeführt 'filesToMerge.txt' in der folgenden Weise genannt:FFMPEG - Verketten 2 MP4-Dateien, eine hat Video und Audio und die andere hat nur Audio

file 'track1.mp4' 
file 'track2.mp4' 

ich dann führen Sie den folgenden Befehl ffmpeg ihnen zu verschmelzen.

ffmpeg -f concat -i filesToMerge.txt -c copy output.mp4 

jedoch die verkettete Datei, die erzeugt wird, besteht nur aus der ersten Datei, die in filesToMerge.txt aufgeführt ist. Das heißt, wenn track1.mp4 (die sowohl Video als auch Audio hat) die erste Datei in der Liste ist, dann bildet nur diese Datei output.mp4 (die verkettete Datei erzeugt) und umgekehrt.

Ich möchte für beide Dateien in output.mp4 sein. Ich benutze Ubuntu 14.04 (wenn das hilft). Wie kann ich dieses Problem lösen?

Wenn ich diesen Befehl ffmpeg -i track1.mp4 -i track2.mp4 output.mp4 ich die folgende

ffmpeg version N-76944-g15206ff Copyright (c) 2000-2015 the FFmpeg developers 
     built with gcc 4.8 (Ubuntu 4.8.4-2ubuntu1~14.04) 
     configuration: --extra-libs=-ldl --prefix=/opt/ffmpeg --enable-avresample --disable-debug --enable-nonfree --enable-gpl --enable-version3 --enable-libopencore-amrnb --enable-libopencore-amrwb --disable-decoder=amrnb --disable-decoder=amrwb --enable-libpulse --enable-libdcadec --enable-libfreetype --enable-libx264 --enable-libx265 --enable-libfdk-aac --enable-libvorbis --enable-libmp3lame --enable-libopus --enable-libvpx --enable-libspeex --enable-libass --enable-avisynth --enable-libsoxr --enable-libxvid --enable-libvo-aacenc --enable-libvidstab 
     libavutil  55. 9.100/55. 9.100 
     libavcodec  57. 16.101/57. 16.101 
     libavformat 57. 19.100/57. 19.100 
     libavdevice 57. 0.100/57. 0.100 
     libavfilter  6. 17.100/6. 17.100 
     libavresample 3. 0. 0/3. 0. 0 
     libswscale  4. 0.100/4. 0.100 
     libswresample 2. 0.101/2. 0.101 
     libpostproc 54. 0.100/54. 0.100 
    Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'track1.mp4': 
     Metadata: 
     major_brand  : isom 
     minor_version : 512 
     compatible_brands: isomiso2avc1mp41 
     encoder   : Lavf56.40.101 
     Duration: 00:00:10.76, start: 0.023220, bitrate: 351 kb/s 
     Stream #0:0(und): Video: h264 (High) (avc1/0x31637661), yuv420p, 800x400 [SAR 400:533 DAR 800:533], 181 kb/s, 25 fps, 25 tbr, 12800 tbn, 50 tbc (default) 
     Metadata: 
      handler_name : VideoHandler 
     Stream #0:1(und): Audio: aac (LC) (mp4a/0x6134706D), 44100 Hz, stereo, fltp, 194 kb/s (default) 
     Metadata: 
      handler_name : SoundHandler 
    Input #1, mov,mp4,m4a,3gp,3g2,mj2, from 'track2.mp4': 
     Metadata: 
     major_brand  : isom 
     minor_version : 512 
     compatible_brands: isomiso2mp41 
     creation_time : 1970-01-01 00:00:00 
     encoder   : Lavf52.32.0 
     Duration: 00:00:32.21, start: 0.000000, bitrate: 46 kb/s 
     Stream #1:0(eng): Audio: aac (LC) (mp4a/0x6134706D), 48000 Hz, stereo, fltp, 43 kb/s (default) 
     Metadata: 
      creation_time : 1970-01-01 00:00:00 
      handler_name : SoundHandler 
    [libx264 @ 0x3950ce0] using SAR=400/533 
    [libx264 @ 0x3950ce0] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX AVX2 FMA3 LZCNT BMI2 
    [libx264 @ 0x3950ce0] profile High, level 3.0 
    [libx264 @ 0x3950ce0] 264 - core 142 r2491 24e4fed - H.264/MPEG-4 AVC codec - Copyleft 2003-2014 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 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=1 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=crf mbtree=1 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00 
    Output #0, mp4, to 'output.mp4': 
     Metadata: 
     major_brand  : isom 
     minor_version : 512 
     compatible_brands: isomiso2avc1mp41 
     encoder   : Lavf57.19.100 
     Stream #0:0(und): Video: h264 (libx264) ([33][0][0][0]/0x0021), yuv420p, 800x400 [SAR 400:533 DAR 800:533], q=-1--1, 25 fps, 12800 tbn, 25 tbc (default) 
     Metadata: 
      handler_name : VideoHandler 
      encoder   : Lavc57.16.101 libx264 
     Stream #0:1(und): Audio: aac (libfdk_aac) ([64][0][0][0]/0x0040), 44100 Hz, stereo, s16, 128 kb/s (default) 
     Metadata: 
      handler_name : SoundHandler 
      encoder   : Lavc57.16.101 libfdk_aac 
    Stream mapping: 
     Stream #0:0 -> #0:0 (h264 (native) -> h264 (libx264)) 
     Stream #0:1 -> #0:1 (aac (native) -> aac (libfdk_aac)) 
    Press [q] to stop, [?] for help 
    frame= 270 fps= 99 q=28.0 Lsize=  382kB time=00:00:10.72 bitrate= 291.9kbits/s dup=1 drop=0  
    video:230kB audio:143kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 2.482656% 
    [libx264 @ 0x3950ce0] frame I:2  Avg QP:18.87 size:109452 
    [libx264 @ 0x3950ce0] frame P:68 Avg QP:15.09 size: 171 
    [libx264 @ 0x3950ce0] frame B:200 Avg QP:23.33 size: 23 
    [libx264 @ 0x3950ce0] consecutive B-frames: 1.1% 0.0% 1.1% 97.8% 
    [libx264 @ 0x3950ce0] mb I I16..4: 11.0% 39.6% 49.5% 
    [libx264 @ 0x3950ce0] mb P I16..4: 0.0% 0.0% 0.0% P16..4: 5.9% 0.1% 0.0% 0.0% 0.0% skip:93.9% 
    [libx264 @ 0x3950ce0] mb B I16..4: 0.0% 0.0% 0.0% B16..8: 0.3% 0.0% 0.0% direct: 0.0% skip:99.7% L0:21.8% L1:78.2% BI: 0.0% 
    [libx264 @ 0x3950ce0] 8x8 transform intra:39.7% inter:92.8% 
    [libx264 @ 0x3950ce0] coded y,uvDC,uvAC intra: 92.0% 95.0% 73.2% inter: 0.1% 1.4% 0.0% 
    [libx264 @ 0x3950ce0] i16 v,h,dc,p: 1% 30% 4% 66% 
    [libx264 @ 0x3950ce0] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 6% 55% 16% 2% 4% 2% 8% 2% 6% 
    [libx264 @ 0x3950ce0] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 17% 18% 13% 7% 9% 7% 12% 6% 11% 
    [libx264 @ 0x3950ce0] i8c dc,h,v,p: 44% 35% 10% 11% 
    [libx264 @ 0x3950ce0] Weighted P-Frames: Y:0.0% UV:0.0% 
    [libx264 @ 0x3950ce0] ref P L0: 98.1% 0.2% 1.1% 0.5% 
    [libx264 @ 0x3950ce0] ref B L0: 85.1% 13.2% 1.7% 
    [libx264 @ 0x3950ce0] ref B L1: 93.6% 6.4% 
    [libx264 @ 0x3950ce0] kb/s:174.10 

Antwort

1

Also, wenn ich das richtig zu verstehen bin, können Sie die letzte ausgegebene Videodatei wollen track1.mp4 spielen, die Video- und Audio haben und dann track2.mp4, die nur Audio haben und nichts anzeigen? Die folgende Antwort geht davon aus, dass dies Ihre gewünschte Ausgabe ist.

Ich habe mehrere Lösungen versucht, nämlich das Audio vom Video zu trennen und die Audios zuerst zu verketten, dann erneut zu verschmelzen und ein schwarzes Video zu erzeugen, um mit dem Track2.mp4 zu gehen. Ich konnte nicht überzeugen zu arbeiten. Die letzte Lösung, die ich fand, dass DID gut funktioniert, ist eine Bash script auf der ffmpeg Wiki Concatenate Seite.

Die Schritte sind sehr einfach. Kopieren Sie das Bash-Skript in eine Datei namens "mmcat" im gleichen Verzeichnis wie track1/2.mp4. Führen Sie dann

chmod +x mmcat && ./mmcat track1.mp4 track2.mp4 final.mp4 

Sie sollten jetzt Ihre gewünschte Datei in final.mp4 haben.

Beachten Sie, dass diese Methode einige Transcodierung beinhaltet, so dass Sie theoretisch einige Qualität verlieren werden. Basierend auf meinen Experimenten glaube ich nicht, dass dies vermeidbar ist, da Stream-Kopieren nur unterstützt wird, wenn die Codecs genau übereinstimmen und Sie nicht in dieser Situation zu sein scheinen (Ihre Audiodateien haben unterschiedliche Bitraten, Abtastraten usw.).

Beachten Sie auch, dass das, was sich im letzten Frame des Videos von Track1 befindet, für die Dauer von Track2 als eingefroren angezeigt wird. Wenn Sie möchten, dass es schwarz wird, sollten Sie sicherstellen, dass Ihr letzter Frame in Track1 ein schwarzer Frame ist. Dies wurde als Übung für das OP übrig gelassen.

+0

Zuerst, danke für die Auferstehung meiner Post. Ich folgte Ihrem Rat und bekam den folgenden Fehler: "/ tmp/mcs_v_all: Operation nicht erlaubt." Ich habe dann die Protokollierung eingeschaltet und folgende Fehler in den Protokolldateien gefunden: "Konnte Schreibkopf für Ausgabedatei # 0 nicht schreiben (falsche Codec-Parameter?): Ungültige Daten bei der Verarbeitung der Eingabe" UND "Die Ausgabedatei # 0 enthält keine Stream " – Avi

+1

Ich bin mir nicht sicher über die Fehler in der Logdatei. Sie könnten für das Skript normal sein, da ich zumindest weiß, dass es mehrere Methoden versucht. Der erste Fehler scheint dadurch zu entstehen, dass Sie keinen Zugriff auf/tmp haben. Suchen Sie die Zeile im Skript mit der Bezeichnung "TMP =/tmp" und ändern Sie/tmp in ein Verzeichnis, auf das Sie zugreifen können.Wenn Sie Root-Zugriff haben, versuchen Sie alternativ "sudo chmod 777/tmp". – lpreams

+0

Ipreams, ich konnte ein Mischvideo mit "ffmpeg -i track1.mp4 -i track2.mp4 output.mp4" erstellen. Allerdings wird track2, das nur Audio enthält, zur Hintergrundmusik für track1. Daher scheint es, dass beide gleichzeitig spielen. Hast du eine Idee für eine Lösung? – Avi

Verwandte Themen