video - ffmpeg - 在中心的视频中合成视频

标签 video ffmpeg compositing

我希望使用 ffmpeg 合成视频,无论合成视频的纵横比/大小如何,视频都位于中心。

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

这是我要实现的目标的示例:

这是背景图片:

enter image description here

现在我想在顶部叠加一个视频:

enter image description here

这也应该有效:enter image description here

基本上,无论尺寸如何,我都想确保它始终调整大小以适应 1920x1080,此外还要确保它始终居中。

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

最佳答案

使用

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

关于video - ffmpeg - 在中心的视频中合成视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42519757/

相关文章:

video - Youtube iFrame API 参数

colors - WebGL 中的混合如何与 GLSL ES 片段着色器一起工作?

python - Nuke 访问错误的 Python 版本

svg - 在 SVG 中应用目的地输出合成

javascript - 使用 CORS 通过 Canvas 的 HTML5 视频截图

python - OpenCV-Python : Issue with getting frame rate of video

php - 从视频中获取缩略图图像不适用于 PHP 和 ffmpeg (Ubuntu)

audio - 如何使用 ffmpeg 可靠地同时改变音调和节奏

html - youtube-dl 不适用于所有 YouTube 视频

c - 采样率转换函数无法产生可听声音,但只能产生小段音频