ffmpeg把宽视频(1920*1080)叠加成长(上中下)视频(1280*720)

背景

以前我们看视频都是通过电脑,或者手机横屏来看,但是目前短视频的平台都是长视频(竖型视频),主流的分辨率是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把宽视频(1920*1080)叠加成长(上中下)视频(1280*720)_第1张图片

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应该从什么地方开始才是中间位置那,大家应该都会算了吧。

ffmpeg把宽视频(1920*1080)叠加成长(上中下)视频(1280*720)_第2张图片

上中下的三个视频叠加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

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

  1. 先scale 后 split,保证只scale一次
  2. 为什么要用split,如果不用split的话,[v1]是只能被使用一次的,后面我们overlay需要多次用到这个视频流
  3. scale这里我这次是固定了h,h为什么等于426,大家可以自己思考一下。以及后面的overlay 一个地方是426,一个地方是852. 如果scale不是固定的高,而是固定的宽,像上面一样会有什么问题?这里我固定了h为426,又会有什么样子的问题。我想你测试会就会发现。

最后我们来看下效果吧
ffmpeg把宽视频(1920*1080)叠加成长(上中下)视频(1280*720)_第3张图片

ffmpeg把宽视频(1920*1080)叠加成长(上中下)视频(1280*720)_第4张图片

总结

这种办法也有的问题你发现了吗?欢迎留言

你可能感兴趣的:(FFmpeg,ffmpeg滤镜,ffmpeg叠加视频,ffmpeg,overlay,ffmpeg,scale)