2017-02-28 33 views
0

我正在寻找将ffmpeg视频合成的视频,无论合成视频的纵横比/大小如何,都将视频置于中心。ffmpeg - 在中心的视频内合成视频

“背景”视频将始终为16:9和1920x1080像素。我不会知道叠加视频的长宽比或大小,因为它将被用户上传,并且可能是任何大小/比率。

这里是我想要达到一个例子:

这是背景图片:

enter image description here

现在我想在上面叠加视频:

enter image description here

这也应该工作: enter image description here

本质上,无论我想要确保它的尺寸是否适合在1920x1080范围内,并且确保它总是居中。

最后,如果上传的视频也是16:9应该简单地覆盖整个视频: enter image description here

回答

1

使用

ffmpeg -i bg.mp4 -i overlay.mp4 
    -filter_complex 
    "[1]scale='if(gt(dar,16/9),1920,iw*sar*1080/ih)':'if(gt(dar,16/9),ih*1920/iw/sar,1080)', 
     setsar=1[ol]; 
     [0][ol]overlay='(W-w)/2':'(H-h)/2':shortest=1[v]" 
    -map "[v]" -map 1:a -c:a copy out.mp4 

我假设你要终止的输出,当叠加结束并且你想保留它的音频(仅)。

由于您不希望BG显示前景是否恰好为16:9,因此事先检查并跳过运行任何ffmpeg命令会更加高效。对于您可以使用,

ffprobe -show_entries stream=display_aspect_ratio -select_streams v -v 0 -of compact=p=0:nk=1 main.mp4 

,这将产生一个线路输出:

16:9