如何使用 FFmpeg 将视频放在叠加层之上?

How to put video on top of overlay using FFmpeg?

如何合并视频和图像(或黑色叠加层)以使视频位于顶部?

输入视频已经为此准备好(其最大 width/height 为 1920x1080)并且需要保持原始大小。

它应该是这样的:

橙色是 overlay/image (1920x1080px), 粉红色是它上面的视频(居中)

迄今为止我拍到的最好照片:

ffplay -vf "pad=1920:1080:(ow-iw)/2:(oh-ih)/2" input.mp4

这很可能有效,但我无法保存图像以供检查。

但这对视频没有任何作用:

ffmpeg -i input.mp4 -vf "pad=1920:1080:(ow-iw)/2:(oh-ih)/2" output.mp4

如果您知道如何放置图像而不是黑色叠加层,则可加分。 谢谢!

命令的完整日志(输出视频保持与输入相同的分辨率):

ffmpeg -i input.mp4 -vf "pad=1920:1080:(ow-iw)/2:(oh-ih)/2" output.mp4

ffmpeg version git-2020-07-21-b5f1e05 Copyright (c) 2000-2020 the FFmpeg developers
  built with Apple clang version 11.0.0 (clang-1100.0.33.17)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/HEAD-b5f1e05_2 --enable-shared --cc=clang --host-cflags= --host-ldflags= --enable-gpl --enable-libaom --enable-libdav1d --enable-libmp3lame --enable-libopus --enable-libsnappy --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-libfontconfig --enable-libfreetype --enable-frei0r --enable-libass --enable-demuxer=dash --disable-libjack --disable-indev=jack --enable-opencl --enable-videotoolbox --disable-htmlpages --enable-libbs2b --enable-libcaca --enable-libfdk-aac --enable-libgsm --enable-libmodplug --enable-libopenh264 --enable-libopenjpeg --enable-librav1e --enable-librsvg --enable-librtmp --enable-librubberband --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libssh --enable-libtesseract --enable-libtwolame --enable-libvidstab --enable-libvmaf --enable-libwavpack --enable-libwebp --enable-libxml2 --enable-libxvid --enable-libzimg --enable-libzmq --enable-openssl --enable-nonfree --enable-decklink --extra-cflags=-I/usr/local/include --extra-ldflags=-L/usr/local/include --enable-version3 --enable-libopencore-amrnb --enable-libopencore-amrwb
  libavutil      56. 55.100 / 56. 55.100
  libavcodec     58. 97.100 / 58. 97.100
  libavformat    58. 49.100 / 58. 49.100
  libavdevice    58. 11.101 / 58. 11.101
  libavfilter     7. 87.100 /  7. 87.100
  libswscale      5.  8.100 /  5.  8.100
  libswresample   3.  8.100 /  3.  8.100
  libpostproc    55.  8.100 / 55.  8.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'input.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf58.49.100
  Duration: 00:00:20.70, start: 0.000000, bitrate: 1068 kb/s
    Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1920x1080 [SAR 9:20 DAR 4:5], 1051 kb/s, 30 fps, 30 tbr, 15360 tbn, 60 tbc (default)
    Metadata:
      handler_name    : Bento4 Video Handler
    Stream #0:1(und): Audio: mp3 (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 128 kb/s (default)
    Metadata:
      handler_name    : SoundHandler
File 'output.mp4' already exists. Overwrite? [y/N] y
Stream mapping:
  Stream #0:0 -> #0:0 (h264 (native) -> h264 (libx264))
  Stream #0:1 -> #0:1 (mp3 (mp3float) -> aac (native))
Press [q] to stop, [?] for help
[libx264 @ 0x7fee16819000] using SAR=9/20
[libx264 @ 0x7fee16819000] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2
[libx264 @ 0x7fee16819000] profile High, level 4.0, 4:2:0, 8-bit
[libx264 @ 0x7fee16819000] 264 - core 160 r3011 cde9a93 - H.264/MPEG-4 AVC codec - Copyleft 2003-2020 - 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
Output #0, mp4, to 'output.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf58.49.100
    Stream #0:0(und): Video: h264 (libx264) (avc1 / 0x31637661), yuv420p, 1920x1080 [SAR 9:20 DAR 4:5], q=-1--1, 30 fps, 15360 tbn, 30 tbc (default)
    Metadata:
      handler_name    : Bento4 Video Handler
      encoder         : Lavc58.97.100 libx264
    Side data:
      cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: N/A
    Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 128 kb/s (default)
    Metadata:
      handler_name    : SoundHandler
      encoder         : Lavc58.97.100 aac
frame=  621 fps= 38 q=-1.0 Lsize=    7148kB time=00:00:20.60 bitrate=2842.6kbits/s speed=1.26x    
video:7138kB audio:1kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.139421%
[libx264 @ 0x7fee16819000] frame I:5     Avg QP:20.79  size: 38334
[libx264 @ 0x7fee16819000] frame P:255   Avg QP:23.03  size: 19776
[libx264 @ 0x7fee16819000] frame B:361   Avg QP:25.79  size:  5745
[libx264 @ 0x7fee16819000] consecutive B-frames:  5.3% 48.6%  8.7% 37.4%
[libx264 @ 0x7fee16819000] mb I  I16..4: 27.2% 69.6%  3.3%
[libx264 @ 0x7fee16819000] mb P  I16..4: 10.6% 19.1%  0.4%  P16..4: 36.9%  4.7%  1.3%  0.0%  0.0%    skip:26.9%
[libx264 @ 0x7fee16819000] mb B  I16..4:  0.9%  1.6%  0.0%  B16..8: 22.5%  1.9%  0.2%  direct: 0.5%  skip:72.4%  L0:46.0% L1:51.5% BI: 2.5%
[libx264 @ 0x7fee16819000] 8x8 transform intra:63.7% inter:94.6%
[libx264 @ 0x7fee16819000] coded y,uvDC,uvAC intra: 28.2% 36.6% 1.0% inter: 5.6% 6.3% 0.0%
[libx264 @ 0x7fee16819000] i16 v,h,dc,p:  7% 31%  6% 56%
[libx264 @ 0x7fee16819000] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 21% 37% 22%  2%  4%  2%  7%  1%  3%
[libx264 @ 0x7fee16819000] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 21% 38% 13%  2%  8%  4% 10%  2%  2%
[libx264 @ 0x7fee16819000] i8c dc,h,v,p: 70% 20%  8%  3%
[libx264 @ 0x7fee16819000] Weighted P-Frames: Y:0.4% UV:0.0%
[libx264 @ 0x7fee16819000] ref P L0: 58.3%  7.7% 26.8%  7.3%  0.0%
[libx264 @ 0x7fee16819000] ref B L0: 85.5% 12.3%  2.1%
[libx264 @ 0x7fee16819000] ref B L1: 97.8%  2.2%
[libx264 @ 0x7fee16819000] kb/s:2824.45
[aac @ 0x7fee1681a800] Qavg: 65536.000

我认为这与纵横比有关。我设法让它工作使用:

ffmpeg -y -i input.mp4 -vf "scale=1920:1080:force_original_aspect_ratio=1,pad=1920:1080:(ow-iw)/2:(oh-ih)/2" output.mp4

使用此命令,所有输入视频都将转换为相同大小,以后可以连接起来。