简体   繁体   English

寻找一种通用方法来合并音频和视频文件并使输出具有带有 FFmpeg 的立体声音频

[英]Looking for a general purpose way to merge audio and video file and make an output have stereo audio with FFmpeg

So have have the following FFmpeg command所以有以下FFmpeg命令

ffmpeg -i vidab.mp4 -i recab.webm  -filter_complex "[0:a]volume=0.2,apad[A];[1:a][A]amerge[Aout]" -map 0:v -map [Aout] -y mergeab.mp4

When the input files are played separately their audio is played equally through both headphones.当输入文件单独播放时,它们的音频通过两个耳机同等播放。

But after being merged the audio from the video is on the right side and the audio from the webm file is on the left side.但是合并后,视频中的音频在右侧,而 webm 文件中的音频在左侧。

I see this in the output when I run the cmd当我运行 cmd 时,我在输出中看到了这一点

[Parsed_amerge_2 @ 0x7fa0faf01bc0] No channel layout for input 1
[Parsed_amerge_2 @ 0x7fa0faf01bc0] Input channel layouts overlap: output layout will be determined by the number of distinct input channels

How can I adjust this so that the output file has the audio from both the inputs in equally in the left and right sides?我该如何调整,以便输出文件的左右两侧均具有来自两个输入的音频?

Also is there a generic way to do this such that even different configurations (video has stereo and audio has mono ... or both have stereo) result in the Audio being split evenly.还有一种通用的方法可以做到这一点,即使不同的配置(视频具有立体声,音频具有单声道......或两者都有立体声)也会导致音频被均匀分割。

I tried using the pan filter but there is something I am not understanding about how it works because either nothing happens or I flip left and right.我尝试使用平移过滤器,但我不明白它是如何工作的,因为要么什么也没发生,要么我左右翻转。 But I am not getting even stereo.但我什至没有得到立体声。

fwiw here is the full output. fwiw 这里是完整的输出。

ffmpeg -i vidab.mp4 -i recab.webm  -filter_complex "[0:a]volume=0.2,apad[A];[1:a][A]amerge[Aout]" -map 0:v -map [Aout] -y mergeab.mp4
ffmpeg version 4.2.1 Copyright (c) 2000-2019 the FFmpeg developers
  built with Apple clang version 11.0.0 (clang-1100.0.33.8)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/4.2.1_2 --enable-shared --enable-pthreads --enable-version3 --enable-avresample --cc=clang --host-cflags='-I/Library/Java/JavaVirtualMachines/adoptopenjdk-13.jdk/Contents/Home/include -I/Library/Java/JavaVirtualMachines/adoptopenjdk-13.jdk/Contents/Home/include/darwin -fno-stack-check' --host-ldflags= --enable-ffplay --enable-gnutls --enable-gpl --enable-libaom --enable-libbluray --enable-libmp3lame --enable-libopus --enable-librubberband --enable-libsnappy --enable-libtesseract --enable-libtheora --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-libxvid --enable-lzma --enable-libfontconfig --enable-libfreetype --enable-frei0r --enable-libass --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-librtmp --enable-libspeex --enable-libsoxr --enable-videotoolbox --disable-libjack --disable-indev=jack
  libavutil      56. 31.100 / 56. 31.100
  libavcodec     58. 54.100 / 58. 54.100
  libavformat    58. 29.100 / 58. 29.100
  libavdevice    58.  8.100 / 58.  8.100
  libavfilter     7. 57.100 /  7. 57.100
  libavresample   4.  0.  0 /  4.  0.  0
  libswscale      5.  5.100 /  5.  5.100
  libswresample   3.  5.100 /  3.  5.100
  libpostproc    55.  5.100 / 55.  5.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'vidab.mp4':
  Metadata:
    major_brand     : qt  
    minor_version   : 0
    compatible_brands: qt  
    creation_time   : 2020-02-21T00:35:25.000000Z
  Duration: 00:00:10.65, start: 0.000000, bitrate: 2539 kb/s
    Stream #0:0(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, mono, fltp, 96 kb/s (default)
    Metadata:
      creation_time   : 2020-02-21T00:35:25.000000Z
      handler_name    : Core Media Audio
    Stream #0:1(und): Video: h264 (High) (avc1 / 0x31637661), yuvj420p(pc, bt709), 1280x640, 2436 kb/s, 29.87 fps, 29.97 tbr, 90k tbn, 180k tbc (default)
    Metadata:
      creation_time   : 2020-02-21T00:35:25.000000Z
      handler_name    : Core Media Video
      encoder         : H.264
Input #1, matroska,webm, from 'recab.webm':
  Metadata:
    encoder         : opus-media-recorder
  Duration: N/A, start: 0.000000, bitrate: N/A
    Stream #1:0(eng): Audio: opus, 48000 Hz, mono, fltp (default)
Stream mapping:
  Stream #0:0 (aac) -> volume (graph 0)
  Stream #1:0 (opus) -> amerge:in0 (graph 0)
  Stream #0:1 -> #0:0 (h264 (native) -> h264 (libx264))
  amerge (graph 0) -> Stream #0:1 (aac)
Press [q] to stop, [?] for help
[libx264 @ 0x7fa0fb004000] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2
[libx264 @ 0x7fa0fb004000] profile High, level 3.1
[libx264 @ 0x7fa0fb004000] 264 - core 155 r2917 0a84d98 - H.264/MPEG-4 AVC codec - Copyleft 2003-2018 - 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=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=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
[Parsed_amerge_2 @ 0x7fa0faf01bc0] No channel layout for input 1
[Parsed_amerge_2 @ 0x7fa0faf01bc0] Input channel layouts overlap: output layout will be determined by the number of distinct input channels
Output #0, mp4, to 'mergeab.mp4':
  Metadata:
    major_brand     : qt  
    minor_version   : 0
    compatible_brands: qt  
    encoder         : Lavf58.29.100
    Stream #0:0(und): Video: h264 (libx264) (avc1 / 0x31637661), yuvj420p(pc, progressive), 1280x640, q=-1--1, 29.97 fps, 30k tbn, 29.97 tbc (default)
    Metadata:
      creation_time   : 2020-02-21T00:35:25.000000Z
      handler_name    : Core Media Video
      encoder         : Lavc58.54.100 libx264
    Side data:
      cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: -1
    Stream #0:1: Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 128 kb/s (default)
    Metadata:
      encoder         : Lavc58.54.100 aac
frame=  318 fps=107 q=-1.0 Lsize=    1568kB time=00:00:17.72 bitrate= 724.8kbits/s speed=5.99x    
video:1282kB audio:272kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.902630%
[libx264 @ 0x7fa0fb004000] frame I:2     Avg QP:19.72  size: 51154
[libx264 @ 0x7fa0fb004000] frame P:148   Avg QP:21.28  size:  6644
[libx264 @ 0x7fa0fb004000] frame B:168   Avg QP:25.18  size:  1351
[libx264 @ 0x7fa0fb004000] consecutive B-frames:  1.3% 84.9%  0.0% 13.8%
[libx264 @ 0x7fa0fb004000] mb I  I16..4: 23.2% 49.3% 27.5%
[libx264 @ 0x7fa0fb004000] mb P  I16..4:  2.1%  2.0%  0.2%  P16..4: 29.0%  5.1%  4.8%  0.0%  0.0%    skip:56.8%
[libx264 @ 0x7fa0fb004000] mb B  I16..4:  0.5%  0.3%  0.0%  B16..8: 16.7%  0.8%  0.2%  direct: 6.1%  skip:75.4%  L0:24.8% L1:71.1% BI: 4.1%
[libx264 @ 0x7fa0fb004000] 8x8 transform intra:45.4% inter:74.3%
[libx264 @ 0x7fa0fb004000] coded y,uvDC,uvAC intra: 29.3% 51.4% 11.6% inter: 5.7% 16.6% 0.3%
[libx264 @ 0x7fa0fb004000] i16 v,h,dc,p: 11% 53% 10% 26%
[libx264 @ 0x7fa0fb004000] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 13% 36% 35%  2%  2%  2%  4%  2%  3%
[libx264 @ 0x7fa0fb004000] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 24% 30% 12%  4%  6%  5%  7%  5%  6%
[libx264 @ 0x7fa0fb004000] i8c dc,h,v,p: 47% 33% 17%  4%
[libx264 @ 0x7fa0fb004000] Weighted P-Frames: Y:0.0% UV:0.0%
[libx264 @ 0x7fa0fb004000] ref P L0: 76.6%  7.6% 11.1%  4.7%
[libx264 @ 0x7fa0fb004000] ref B L0: 89.1% 10.3%  0.6%
[libx264 @ 0x7fa0fb004000] ref B L1: 99.7%  0.3%
[libx264 @ 0x7fa0fb004000] kb/s:989.60
[aac @ 0x7fa0fb005800] Qavg: 13376.354

Use amix instead of amerge and resample to stereo using -ac 2 .使用amix而不是amerge并使用-ac 2重新采样到立体声。 Since you're mapping the first video, tell amix to terminate with first input.由于您正在映射第一个视频,因此告诉 amix 以第一个输入终止。

ffmpeg -i vidab.mp4 -i recab.webm -filter_complex "[0:a]volume=0.2[A];[A][1:a]amix=inputs=2:duration=first[Aout]" -map 0:v -map [Aout] -y mergeab.mp4

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM