使用ffmpeg覆盖黑色线条或为两个并排视频添加边框

时间:2017-09-27 18:38:07

标签: linux video ffmpeg border overlay

我正在使用以下内容生成并排的视频。

ffmpeg -i left.mp4 -i right.mp4 -filter_complex "[0:v]setpts=PTS-STARTPTS, pad=iw*2:ih[bg]; [1:v]setpts=PTS-STARTPTS[fg]; [bg][fg]overlay=w" -y final.mp4

看起来像这样。

http://www.mo-de.net/d/partnerAcrobatics.mp4

我想在中间的右上方放置一条垂直黑线,或者在左侧的视频中添加黑色边框。如果我在左侧视频中添加边框,我希望保留原始视频的原始总和尺寸。此解决方案需要从左视频宽度中减去边框宽度。我会采取任何解决方案。

由于

3 个答案:

答案 0 :(得分:1)

解决方案|解决:如果两个视频都没有音频,请使用此功能。

ffmpeg -i left.mp4 -i right.mp4 -filter_complex "[0:v]crop=639:720, pad=640:720:0:0:black[tmp0]; [1:v]crop=639:720, pad=640:720:1:0:black[tmp1]; [tmp0][tmp1]hstack[v] " -map [v] -y o.mp4

如果两个视频都有音频,请使用以下内容。

ffmpeg -i c2.mov -i c1.mov -filter_complex "[0:v]crop=1279:720, pad=1280:720:0:0:black[tmp0]; [1:v]crop=1279:720, pad=1280:720:1:0:black[tmp1]; [tmp0][tmp1]hstack[v];[0:a][1:a]amerge=inputs=2[a]" -map [v] -map [a] -ac 2 -y o.mp4

两个视频必须具有相同的高度。

crop=1279:720

我使用裁剪从右侧的视频宽度中删除一个像素。它原本是1280像素。

pad=1280:720:0:0:black[tmp0]

我通过声明一个1280像素的新画布大小来填充左边的电影。这将电影向左移动,在右侧留下一个空格像素,其中有彩色"黑色"。

正确的电影我填充并向右移动,露出左边的黑色边框。

pad=1280:720:1:0:black[tmp1]

我对两个视频都这样做,因此如果视频尺寸相同,则影响仍然居中。

答案 1 :(得分:0)

使用

ffmpeg -i left.mp4 -i right.mp4 -filter_complex "[0:v]setpts=PTS-STARTPTS,crop=iw-10:ih:0:0, pad=2*(iw+10):ih[bg]; [1:v]setpts=PTS-STARTPTS[fg]; [bg][fg]overlay=w" -y final.mp4

答案 2 :(得分:0)

由于您已经加入了视频,因此您似乎想用垂直的黑线将它们分开。
由于这条线是静止的(无生命),因此此覆盖图可以是静止图片,例如。 black.png(宽度为10px,与视频高度相同)
如果要使这条线具有动画效果或运动图像,则叠加层可以是其他视频。

如果尚未加入视频,则可以先加入左侧的第二个视频或右侧的第一个视频 例如。 ffmpeg -i 1.mp4 -vf "pad=width=<new width>:height=<same height>:color=black" out.mp4

下面的代码回答了您的问题,中间有一条宽度为10像素的垂直线,将2个视频分开:

ffmpeg -i in.mp4 -i black.png -filter_complex "overlay=(main_w-overlay_w)/2:(main_h-overlay_h)/2" out.mp4