我正在尝试使用FFMPEG合并2个mp4文件。其中一个文件同时具有视频和音频(track1.mp4
),而另一个只有音频(track2.mp4
)。这些文件的名称以以下方式列在名为'filesToMerge.txt'
的文本文件中:
file 'track1.mp4'
file 'track2.mp4'
然后执行下面的ffmpeg命令来合并它们。
ffmpeg -f concat -i filesToMerge.txt -c copy output.mp4
但是,生成的连接文件只包含filesToMerge中列出的第一个文件。txt
。也就是说,如果track1。mp4(包含视频和音频)是列表中的第一个文件,然后只有该文件构成输出。mp4(生成的连接文件),反之亦然。
我希望这两个文件都在
output.mp4
中。我正在使用Ubuntu 14.04(如果有帮助的话)。我如何解决这个问题?
当我运行这个命令时,
ffmpeg-I track1。mp4-i轨道2。mp4输出。mp4
我得到以下信息
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
所以如果我理解正确,您希望最终输出的视频文件播放track1.mp4,它将有视频和音频,然后track2.mp4,它将只有音频,什么都不显示?以下答案假设这是您想要的输出。
我尝试了几种解决方案,即从视频中分离音频并首先连接音频,然后重新合并,并生成一个黑色视频以配合track2.mp4。我无法说服任何一个工作。我发现的最终解决方案是ffmpeg wiki的连接页面上的bash脚本。
步骤非常简单。将bash脚本复制到与track1/2位于同一目录下的名为“mmcat”的文件中。mp4。然后跑
chmod +x mmcat && ./mmcat track1.mp4 track2.mp4 final.mp4
你现在应该有你想要的最终文件了。mp4。
请注意,此方法确实涉及一些转码,因此理论上您这样做会失去一些质量。根据我的实验,我认为这是可以避免的,因为只有在编解码器完全匹配的情况下才支持流复制,并且您似乎没有处于这种情况(您的音频文件具有不同的比特率、采样率等)。
另请注意,在轨道2期间,轨道1中视频的最后一帧中的任何内容都将被显示、冻结。如果您希望它变成黑色,您最好确保轨道1中的最后一帧是黑色帧。这样做是作为OP的练习留下的。
null 这是我正在使用的代码,任何提示都将不胜感激! 将每个视频转换为临时文件
我有一个ffmpeg,它可以合并3个mp4视频,然后另一个命令可以将音频从第一个命令添加到输出文件中。命令如下: vid-1。mp4(没有音频流) 有没有在一个命令中执行此操作?我还想将音频添加到在第一个命令中创建的视频中。这可能吗? “ffmpeg-i vid-1.mp4-i vid-2.mp4-i vid-3.mp4-i audio.mp3”的控制台输出
问题内容: 我想使用Xuggler 将无音频的视频文件与音频文件合并。此刻,我已经采取了两个流,并将这些流的视频和音频部分分别合并为画中画。现在,我想将音频和视频文件相互组合。任何建议或提示将不胜感激。我正在使用red5服务器。谢谢。 问题答案: 使用MediaConcatenator。请参见示例代码“连接音频和视频”
我已经使用程序youtube-dl下载了一个YouTube播放列表,我选择了单独下载视频和音频,我现在有一个文件夹充满了视频及其相应的音频,我希望与ffmpeg合并在一起。 我需要使用批处理脚本来执行此操作,但问题是youtube-dl在原始文件的标题之后添加了临时字母,因此视频与其对应的音频没有相同的名称,文件名如下所示: 如何使用windows批处理脚本和ffmpeg合并这些多个视频/音频文件
我想得到两个音频文件作为输入,然后按字节合并它们,并将其保存为单个文件。 在这个代码中,我试图在Java中做到这一点,它工作正常,但我不知道如何在android中做到这一点。 如何在Android系统中做到这一点?
我在尝试连接FFMPEG中的多个文件时遇到了一个问题;我的目标是通过串联不同类型的幻灯片来创建视频演示文稿: (a)图像幻灯片,通过循环帧片刻转换成视频。这些类型的幻灯片没有音频,所以我为它们添加了静音音轨: (b)视频幻灯片,它有一个覆盖的水印,并持续到视频结束。如果文件不包含音频,则添加的方式与前面的情况相同: 因此,一旦我有了所有生成的文件和一个包含所有文件名的。txt文件,我想使用简单的命