合并2视频文件与他们的音频在一个单一的文件并排



我需要合并两个视频文件以及它们的音频在一个文件中,并排。

我能够在单个文件中合并2个视频文件,但它只使用第一个视频文件的音频,而我需要合并第二个文件的音频。

我是这样做的:

ffmpeg.exe -i input1.webm -vf "[in] scale=iw/2:ih/2, pad=2*iw:ih [left]; movie=input2.webm, scale=iw/2:ih/2 [right]; [left][right] overlay=main_w/2:0 [out]" -b:v 768k ouput.webm

我尝试了各种方法与amerge,但没有成功。由于我是FFMpeg的新手,我不确定如何才能实现这一点。

编辑

下面是FFMpeg命令,我用@occvtech建议合并两个文件,但它仍然没有合并第二个音频流。

ffmpeg.exe -i 3.mp4 -i 4.mp4 -filter_complex "[0:v] scale=iw/2:ih/2,pad=2*iw:ih[left];[1:v]scale=iw/2:ih/2[right];[left][right‌​]overlay=main_w/2:0 [out]" -map [out] -map 0:a -map 1:a -b:v 768k o5.mp4

下面是控制台输出:

ffmpeg version N-72276-gf99fed7 Copyright (c) 2000-2015 the FFmpeg developers
  built with gcc 4.9.2 (GCC)
  configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-av
isynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enab
le-iconv --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --
enable-libdcadec --enable-libfreetype --enable-libgme --enable-libgsm --enable-l
ibilbc --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enab
le-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-librtmp --en
able-libschroedinger --enable-libsoxr --enable-libspeex --enable-libtheora --ena
ble-libtwolame --enable-libvidstab --enable-libvo-aacenc --enable-libvo-amrwbenc
 --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enabl
e-libx264 --enable-libx265 --enable-libxavs --enable-libxvid --enable-lzma --ena
ble-decklink --enable-zlib
  libavutil      54. 23.101 / 54. 23.101
  libavcodec     56. 39.101 / 56. 39.101
  libavformat    56. 33.101 / 56. 33.101
  libavdevice    56.  4.100 / 56.  4.100
  libavfilter     5. 16.101 /  5. 16.101
  libswscale      3.  1.101 /  3.  1.101
  libswresample   1.  1.100 /  1.  1.100
  libpostproc    53.  3.100 / 53.  3.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '3.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf56.23.106
  Duration: 00:00:13.52, start: 0.023220, bitrate: 968 kb/s
    Stream #0:0(und): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yu
v420p, 640x480, 889 kb/s, 10 fps, 10 tbr, 10240 tbn, 20 tbc (default)
    Metadata:
      handler_name    : VideoHandler
    Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, mono, fltp,
 76 kb/s (default)
    Metadata:
      handler_name    : SoundHandler
Input #1, mov,mp4,m4a,3gp,3g2,mj2, from '4.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf56.23.106
  Duration: 00:00:14.92, start: 0.023220, bitrate: 1049 kb/s
    Stream #1:0(und): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yu
v420p, 640x480, 971 kb/s, 10 fps, 10 tbr, 10240 tbn, 20 tbc (default)
    Metadata:
      handler_name    : VideoHandler
    Stream #1:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, mono, fltp,
 75 kb/s (default)
    Metadata:
      handler_name    : SoundHandler
[libx264 @ 040d20e0] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX
[libx264 @ 040d20e0] profile High, level 2.1
[libx264 @ 040d20e0] 264 - core 146 r2538 121396c - H.264/MPEG-4 AVC codec - Cop
yleft 2003-2015 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deb
lock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 m
e_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chro
ma_qp_offset=-2 threads=6 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 i
nterlaced=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=10 scenec
ut=40 intra_refresh=0 rc_lookahead=40 rc=abr mbtree=1 bitrate=768 ratetol=1.0 qc
omp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
Output #0, mp4, to 'o5.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf56.33.101
    Stream #0:0: Video: h264 (libx264) ([33][0][0][0] / 0x0021), yuv420p, 640x24
0, q=-1--1, 768 kb/s, 10 fps, 10240 tbn, 10 tbc (default)
    Metadata:
      encoder         : Lavc56.39.101 libx264
    Stream #0:1(und): Audio: aac (libvo_aacenc) ([64][0][0][0] / 0x0040), 44100
Hz, mono, s16, 128 kb/s (default)
    Metadata:
      handler_name    : SoundHandler
      encoder         : Lavc56.39.101 libvo_aacenc
Stream mapping:
  Stream #0:0 (h264) -> scale (graph 0)
  Stream #1:0 (h264) -> scale (graph 0)
  overlay (graph 0) -> Stream #0:0 (libx264)
  Stream #1:1 -> #0:1 (aac (native) -> aac (libvo_aacenc))
Press [q] to stop, [?] for help
frame=   27 fps= 26 q=0.0 size=       0kB time=00:00:03.00 bitrate=   0.1kbits/s
frame=   46 fps= 28 q=0.0 size=       0kB time=00:00:04.90 bitrate=   0.1kbits/s
frame=   80 fps= 37 q=16.0 size=     303kB time=00:00:08.29 bitrate= 298.8kbits/
frame=  117 fps= 43 q=15.0 size=     717kB time=00:00:11.99 bitrate= 489.9kbits/
Past duration 0.767570 too large
frame=  137 fps= 39 q=-1.0 Lsize=    1488kB time=00:00:14.94 bitrate= 815.8kbits
/s dup=0 drop=12
video:1247kB audio:234kB subtitle:0kB other streams:0kB global headers:0kB muxin
g overhead: 0.504372%
[libx264 @ 040d20e0] frame I:1     Avg QP:10.60  size: 30577
[libx264 @ 040d20e0] frame P:36    Avg QP:10.78  size: 20384
[libx264 @ 040d20e0] frame B:100   Avg QP:15.41  size:  5116
[libx264 @ 040d20e0] consecutive B-frames:  0.7%  0.0% 17.5% 81.8%
[libx264 @ 040d20e0] mb I  I16..4: 13.2% 49.8% 37.0%
[libx264 @ 040d20e0] mb P  I16..4:  0.8% 10.7%  1.9%  P16..4: 17.7% 30.4% 29.0%
 0.0%  0.0%    skip: 9.6%
[libx264 @ 040d20e0] mb B  I16..4:  0.0%  1.1%  0.0%  B16..8: 27.0% 20.2% 10.1%
 direct:15.3%  skip:26.3%  L0:35.6% L1:31.1% BI:33.3%
[libx264 @ 040d20e0] final ratefactor: 13.38
[libx264 @ 040d20e0] 8x8 transform intra:77.9% inter:38.4%
[libx264 @ 040d20e0] coded y,uvDC,uvAC intra: 96.3% 97.8% 97.5% inter: 46.4% 68.
0% 41.1%
[libx264 @ 040d20e0] i16 v,h,dc,p: 44%  4%  7% 44%
[libx264 @ 040d20e0] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 41% 10% 19%  3%  6%  5%  5%
 6%  5%
[libx264 @ 040d20e0] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 25% 16%  9%  5% 12% 10%  9%
 7%  6%
[libx264 @ 040d20e0] i8c dc,h,v,p: 66% 12% 12% 10%
[libx264 @ 040d20e0] Weighted P-Frames: Y:0.0% UV:0.0%
[libx264 @ 040d20e0] ref P L0: 46.3% 12.0% 28.7% 13.0%
[libx264 @ 040d20e0] ref B L0: 81.1% 16.0%  2.9%
[libx264 @ 040d20e0] ref B L1: 93.2%  6.8%
[libx264 @ 040d20e0] kb/s:745.10

您需要添加amerge音频滤波器将两个音频流合并为一个:

ffmpeg -i input0.mp4 -i input1.mp4 -filter_complex 
"[0:v]scale=iw/2:-1,setpts=PTS-STARTPTS[left]; 
 [1:v]scale=iw/2:-1,setpts=PTS-STARTPTS[right]; 
 [left][right​]hstack[v]; 
 [0:a][1:a]amerge=inputs=2[a]" 
-map "[v]" -map "[a]" output
  • 这将使一个立体声输出与音频从input0.mp4在左通道,和音频从input1.mp4在右通道。您没有指定您希望如何安排结果通道,但是如果您喜欢单声道输出,那么在输出文件名之前添加-ac 1

  • hstack可以代替pad + overlayhstack更简单,可能更快。

在我开始之前-知道有很多方法可以在FFmpeg中做同样的事情。

也就是说,在您的情况下,我个人更喜欢使用-filter_complex参数而不是-vf,并且我会使用-i标志指定所有输入文件。我发现以后把它们映射出来更容易。

要回答您的问题,请尝试以下命令:

ffmpeg.exe -i input1.webm -i input2.webm -filter_complex "[0:v]scale=iw/2:ih/2,pad=2*iw:ih[left];[1:v]scale=iw/2:ih/2[right];[left][right]overlay=main_2/2:0[out]" -map [out] -map 0:a -map 1:a -b:v 768k output.webm

我个人也会特别引用我想要的音频和视频编解码器在这里与-c:v-c:a标志。我不喜欢让FFmpeg替我做决定。

注意:我还没有测试上面的命令。我习惯使用overlay=shortest=1:x=...:y=...进行叠加。但是FFmpeg

中有不止一种方法

相关内容

  • 没有找到相关文章

最新更新