ffmpeg 给视频画圆圈

ffmpeg本身可以给视频画方框,要画圈就麻烦一些,这里采用遮罩的方式实现视频画圈的功能。

  1. 准备遮罩

这里用opecv制作遮罩图像

cpp 复制代码
width=cap.get(cv::CAP_PROP_FRAME_WIDTH);
height=cap.get(cv::CAP_PROP_FRAME_HEIGHT);
cv::Mat mask = cv::Mat::zeros(cv::Size(width,height), CV_8UC4);  //
mask.setTo(cv::Scalar(0, 0, 0, 0));
cv::circle(mask, cv::Point(x,y), r, cv::Scalar(0,0,255,255),3);
cv::imwrite("mask.png",mask);

其中cap为目标视频,x,y,r分别对应圆圈的中心坐标和半径,cv::Scalar(0,0,255,255),这里表示使用后红色的圆圈。

遮罩图像保存为png格式,示例图像如下:

mask.png

  1. 应用遮罩

ffmpeg -i input.mp4 -i mask.png -filter_complex "[1:v]scale=1920:1080[logo];[0:v][logo]overlay=0:0" output.mp4

上述命令中 input.mp4为输入的视频,output.mp4为输出视频,值得注意的是scale=1920:1080要求为视频的宽和高。

  1. 部分视频的画圈

如果只想给部分视频画圈,那么仅需加上时间段即可。

ffmpeg -i input.mp4 -i mask.png -filter_complex "[1:v]scale=1920:1080[logo];[0:v][logo]overlay=0:0" -ss 00:01:00 -to 00:02:00 output.mp4

其中-ss 00:01:00为开始时间,-to 00:02:00为结束时间。

  1. 硬件加速

如果系统有显卡支持,还可以进行加速以节省时间。

ffmpeg -i input.mp4 -i mask.png -filter_complex "[1:v]scale=1920:1080[logo];[0:v][logo]overlay=0:0" -ss 00:01:00 -to 00:02:00 -c:v h264_nvenc -preset fast output.mp4

相关推荐
REDcker7 天前
WebCodecs VideoDecoder 的 hardwareAcceleration 使用
前端·音视频·实时音视频·直播·webcodecs·videodecoder
gihigo19987 天前
基于TCP协议实现视频采集与通信
网络协议·tcp/ip·音视频
山河君7 天前
四麦克风声源定位实战:基于 GCC-PHAT + 最小二乘法实现 DOA
算法·音视频·语音识别·信号处理·最小二乘法·tdoa
音视频牛哥7 天前
Android平台RTMP/RTSP超低延迟直播播放器开发详解——基于SmartMediaKit深度实践
android·人工智能·计算机视觉·音视频·rtmp播放器·安卓rtmp播放器·rtmp直播播放器
qq_416276427 天前
通用音频表征的对比学习
学习·音视频
美狐美颜sdk7 天前
Android全局美颜sdk实现方案详解
人工智能·音视频·美颜sdk·视频美颜sdk·美狐美颜sdk
EasyDSS7 天前
私有化部署EasyDSS视频点播能力:全链路视频技术赋能,打造企业级视听新体验
音视频·hls·m3u8·点播技术·智能转码
qq_416276427 天前
DeLoRes——一种通用的音频表征学习新方法(DeLoRes(基于 Barlow Twins 的冗余最小化方法)
学习·音视频
Q_4582838687 天前
从定位到视频:808 + 1078 在各行业的落地实践
音视频
山顶望月川7 天前
实测MiniMax-Hailuo-02:当“开工大吉“变成“无字天书“,国产AI视频模型的能与之不能
人工智能·音视频