背景

以前我们看视频都是通过电脑,或者手机横屏来看,但是目前短视频的平台都是长视频(竖型视频),主流的分辨率是7201280。所以很多人想19201080的宽视频,变成长视频,但是如果不多个视频叠加,那么上下会为空白,很是不好看。为了能让视觉效果更好,一般我们采用上中下三个叠加在一起的办法,那么下面我们就通过ffmpeg来实现这个想法。


准备

我们先去西瓜下载一个1920*1080的李子柒的视频,通过简单的ffmpeg命令截取前10s,方便我们快速合成。


ffmpeg  -t 10 -i liziqi_1080.mp4   -codec copy      liziqi_1080_10s.mp4



不叠加的720*1080的视频

先准备一个720x1280的幕布,让原视频的宽度1920 占满现在的宽度 720,并垂直放在中间


ffmpeg -y -i mubu.png -i liziqi_1080_10s.mp4 -filter_complex [1:v]scale=720:-1[v1];[0:v][v1]overlay=0:(H-h)/2 liziqi_720x1280_single.mp4


scale=720:-1 的意思是 撑满宽度,高度等比缩放

overplay=0:(H-h)/2 x=0 y=(H-h)/2 叠加位置x从0很好理解,y的位置H表示第一个video也就是幕布的高度,h表示第二video也就是被sacle后视频的高度,y应该从什么地方开始才是中间位置那,大家应该都会算了吧。



上中下的三个视频叠加720x1280

幕布仍然不能少

ffmpeg -y -i mubu.png -i liziqi_1080_10s.mp4 -filter_complex [1:v]scale=-1:426[v1];[v1]split=3[a][b][c];[0:v][a]overlay[a1],[a1][b]overlay=0:426[a2],[a2][c]overlay=0:852 liziqi_720x1280.mp4


这里有几个地方要解释一下:


先scale 后 split,保证只scale一次

为什么要用split,如果不用split的话,[v1]是只能被使用一次的,后面我们overlay需要多次用到这个视频流

scale这里我这次是固定了h,h为什么等于426,大家可以自己思考一下。以及后面的overlay 一个地方是426,一个地方是852. 如果scale不是固定的高,而是固定的宽,像上面一样会有什么问题?这里我固定了h为426,又会有什么样子的问题。我想你测试会就会发现。

最后我们来看下效果吧