企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
[TOC] ## FFmpeg生成画中画 ### 静态画中画 将视频sub.mp4视频文件缩放成宽 480 、高 320 的视频,然后显示在 视频 input.mp4,x坐标为0,y 坐标为0 的位置 ``` ffmpeg -re -i input.mp4 -vf "movie=sub.mp4, scale=480x320[test]; [in][test]overlay [out]" -vcodec libx264 output.flv ``` 显示在画面的右下角,则需要用到 overlay 中x坐标与y坐标的内部变量: ``` ffmpeg -re -i input.mp4 -vf "movie=sub.mp4, scale=480x320[test]; [in][test]overlay=x=main_w-480:y=main_h-320 [out]" -vcodec libx264 output.flv ``` >根据命令行可以分析出,除了显示在 overlay 画面中,子视频将会定位在主画面的 右边减去子视频的宽度,最下边减去子视频的高度的位置 ### 动态画中画 使用 overlay 还可以配合正则表达式 进行跑马灯式画中画处理,动态改变子画面的 x坐标与 y坐标即可 ``` ffmpeg -re -i input.mp4 -vf "movie=sub.mp4, scale=480x320[test]; [in][test]overlay=x='if(gte(t,2), -w+(t-2)*20, NAN)':y=0 [out]" -vcodec libx264 output.flv ``` >命令行执行之后,子视频将会从主视频的左侧开始渐入视频从左向右游动 总结:视频画中画的基本处理至此已介绍完毕,重点为 overlay 滤镜的使用 ## FFmpeg视频多宫格处理 通过 nullsrc 创建一个 overlay 画布,画布的大小为宽 640 像素、高 480 像素, 使用[O:v\]\[l :v \]\[2:v \]\[3 :v ]将输入的 个视频流去除,分别 进行缩放处理,处理为宽 320 、高 240 的视频,然后基于 nullsrc 生成的画布进行视频平铺, ``` ffmpeg -re -i input1.mp4 -re -i input2.mp4 -re -i input3.m2t -re -i input4.mp4 -filter_complex "nullsrc=size=640x480 [base]; [0:v] setpts=PTS-STARTPTS,scale=320x240 [upperleft]; [1:v] setpts=PTS-STARTPTS, scale=320x240 [upperright]; [2:v] setpts=PTS-STARTPTS, scale=320x240 [lowerleft]; [3:v] setpts=PTS-STARTPTS, scale=320x240 [lowerright]; [base][upperleft] overlay=shortest=1[tmp1]; [tmp1][upperright] overlay=shortest=1:x=320 [tmp2]; [tmp2][lowerleft] overlay=shortest=1:y=240 [tmp3]; [tmp3][lowerright] overlay=shortest=1:x=320:y=240" -c:v libx264 out.mp4 ``` >直播视频流的多宫格展现形式将 input 更改为直播流地址即可 简单明了,1.2.3.4.mp4为文件路径,out.MP4为输出文件路径,通过nullsrc创建overlay画布,画布大小640:480, 使用\[0:v\]\[1:v\]\[2:v\]\[3:v\]将输入的4个视频流去除,分别进行缩放处理,然后基于nullsrc生成的画布进行视频平铺,命令中自定义upperleft,upperright,lowerleft,lowerright进行不同位置平铺。