我有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部不同长度的电影的最佳方法是什么(如果它们接近的话)?
到目前为止,我发现有用的资源是:
Multiple video sources combined into one和
http://ffmpeg.org/ffmpeg.html#overlay-1
非常感谢任何帮助/建议。我在使用FFMPEG语法时遇到问题!谢谢!
答案 0 :(得分:33)
结果可以通过缩放,填充和叠加滤镜的组合实现,如下所示:
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
选项设置结果比特率。此外,视频大小和位置可以按像素指定,用于打击垫,缩放和叠加滤镜。
答案 1 :(得分: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
中的数字。-vf
内容)似乎只使用 {{ 1}} 而不是 -i
的内容。如果 movie=
是一个没有音频的视频,而您想使用来自 -i
的音频,这将是一个问题。第二个 ffmpeg 命令将来自 movie=
的视频流和来自 output.mp4
的音频流复制到 right.mp4
。