24

我有 2 个视频:HEADSHOT.MOV 和 SCREEN.MOV。它们都是大文件,我希望缩小(大小、比特率等)并将这两个并排放置在同一个非常宽的视频帧中。最终结果是,当您播放 output_video.mp4 时,您将拥有一个非常宽的帧,两个视频同步并以相同的速率播放。

这是我正在尝试做的语法错误的版本:

ffmpeg -i HEADSHOT.MOV -t 00:02:00 -acodec libfaac -ab 64k -vcodec libx264 -r 30 -pass 1 -s 374x210 -vf "movie=SCREEN.MOV [small]; [in][small] -an -r 30 -pass 1 -s 374x210 overlay=10:10 -t 00:02:00 [out]" -threads 0 output_movie.mp4

在上面的示例中,我还尝试将测试电影持续时间设置为 2 分钟,这引发了另一个问题,处理 2 部不同长度的电影(如果它们很接近)的最佳方法是什么?

到目前为止,我发现有用的资源是:

多个视频源合二为一

http://ffmpeg.org/ffmpeg.html#overlay-1

非常感谢任何帮助/建议。我在使用 FFMPEG 语法时遇到问题!谢谢!

4

2 回答 2

34

结果可以通过组合使用比例、填充和覆盖过滤器来实现,如下所示:

ffmpeg.exe -i LeftInput.mp4 -vf "[in] scale=iw/2:ih/2, pad=2*iw:ih [left]; 
    movie=RightInput.mp4, scale=iw/3:ih/3, fade=out:300:30:alpha=1 [right]; 
    [left][right] overlay=main_w/2:0 [out]" -b:v 768k Output.mp4

在这里,第一个视频缩小了一半,并填充到其原始大小。第二个视频缩小了三分之二,并覆盖在第一个视频的右半部分(填充区域)上。

较短的视频可以淡出;否则,将显示最后一帧,直到组合视频结束。

结果比特率可以通过-b:v选项设置。此外,可以为填充、缩放和覆盖过滤器以像素为单位指定视频大小和位置。

于 2012-02-15T15:55:20.560 回答
0

为了让一个视频占据输出视频的整个左半部分,另一个视频占据输出视频的整个右半部分并获得正确的音频,我将扩展 @Dmitry Shkuropatsky 的答案。这花了我 5 分钟或更长时间才弄清楚,我使用了 ffmpeg 3.4 版(版权所有 (c) 2000-2017):

>ffmpeg -i left.webm -vf "[in] scale=iw/2:ih/2, pad=2*iw:ih [left]; movie=right.mp4, scale=iw/2:ih/2, fade=alpha=1 [right]; [left][right] overlay=main_w/2:0 [out]" -c:a aac -b:v 3800k output.mp4

>ffmpeg -i output.mp4 -i right.mp4 -c copy -map 0:0 -map 1:1 -shortest output_with_audio.mp4

变化:

  • 没有淡出
    我成功地删除了淡出选项/参数,因为它给我带来了问题。如果您想使用淡出,则可以根据fade=out:300:30:alpha=1您的具体情况更改数字。
  • 左视频填满整个左半部分,右视频填满整个右半部分
    ,而不是右半部分只有三分之二的右视频,我将其更改为右半部分的视频完全填满。
  • 修复了音频问题
    我运行了第二个 FFmpeg 命令,因为第一个(包含所有-vf内容)似乎只使用-i来自movie=. 如果-i是没有音频的视频并且您想使用来自movie=. 第二个 ffmpeg 命令将视频流output.mp4和音频流复制right.mp4output_with_audio.mp4.
于 2021-02-15T21:34:26.480 回答