ffmpeg入门教程之ffmpeg命令行实战------视频滤镜

命令行详解可参考ffmpeg入门教程或者参考官网文档

https://www.jianshu.com/p/042c7847bd8a

实例来源于《FFmpeg从入门到精通》

-filter_complex为视频添加logo

ffmpeg -i C:\Users\Administrator\Desktop\袋熊.mp4 
-i F:\表情包\JB`~O0J_SH{U{VA0U{3%X~I.gif 
-filter_complex "[1:v]scale=300:300[logo];[0:v][logo]overlay=x=0:y=0" 
C:\Users\Administrator\Desktop\filtered_video.mp4
  • 2-i指定2个输入文件
  • -filter_complex复杂滤镜
  • [1:v]scale=300:300[logo]将第2个输入文件的视频流(如果是图片文件,则操作的是图片)缩放成300x300大小,并设置标签[logo]
  • [0:v][logo]overlay=x=0:y=0将第1个输入文件的视频流用[logo]覆盖在(0,0)位置(图片的左上角在视频的0,0位置)
  • 最后是输出文件

在这里插入图片描述

movie为视频添加logo

ffmpeg -y -i C:\Users\cy\Desktop\video.mp4 
-vf "movie=C\\:/Users/cy/Desktop/logo.jpg[logo];[in][logo]overlay=100:100[out]"
 C:\Users\cy\Desktop\video_filtered.mp4

在这里插入图片描述

movie实现视频画中画

ffmpeg -y -i C:\Users\Administrator\Desktop\video.mp4 
-vf "movie=C\\:/Users/Administrator/Desktop/video.mp4,scale=480x320[logo];[in][logo]overlay[out]"
 C:\Users\Administrator\Desktop\video_filter.mp4

在这里插入图片描述
将画中画放置于右下角

ffmpeg -y -i C:\Users\Administrator\Desktop\video.mp4 
-vf "movie=C\\:/Users/Administrator/Desktop/video.mp4,scale=480x320[logo];
[in][logo]overlay=x=main_w-480:y=main_h-320[out]" C:\Users\Administrator\Desktop\video_filter.mp4
  • main_w主视频宽度
  • main_h主视频高度
    在这里插入图片描述

movie实现视频画中画跑马灯

ffmpeg -y -i C:\Users\Administrator\Desktop\video.mp4 
-vf "movie=C\\:/Users/Administrator/Desktop/video.mp4,scale=480x320[logo];
[in][logo]overlay=x='if(gte(t,1),-w+t*400,NAN)':y=0 [out]" 
-vcodec libx264 C:\Users\Administrator\Desktop\video_filtered.flv
  • t 时间,s
  • [in] 指输入视频
  • [out] 指输出视频
  • gte(t,1)如果t>=1,返回1,否则返回0
  • if(gte(t,1),-w+t*400,NAN) 如果gte(t,1)非0,返回-w+t*400,否则返回NAN,非数,即不显示跑马灯视频。
    表示从主视频播放1s后开始显示跑马灯,跑马灯视频左上角x坐标为-w+t*400,w是跑马灯视频宽度
  • -vcodec 指定编解码器

在这里插入图片描述

视频添加中文水印的正确姿势

ffmpeg -y -i C:\Users\cy\Desktop\video.mp4 -vf
 "drawtext=fontsize=100:fontfile=C\\:/Windows/Fonts/simhei.ttf:text='傻逼,你好':
 fontcolor=green:box=1:boxcolor=yellow:x=20:y=20" C:\Users\cy\Desktop\video_filtered.mp4
  • -y强制覆盖输出文件
  • -i指定输入文件
  • -vf -filter:v的别名,为视频流添加滤镜处理
  • drawtext添加文字水印
  • fontsize指定字体大小
  • fontfile指定字体库
  • text指定文字内容
  • fontcolor指定文字颜色
  • box=1表示为水印添加背景色
  • boxcolor指定背景色
  • x=20:y=20指定水印偏移的位置
  • 最后是输出文件

fontfile=C\\:/Windows/Fonts/simhei.ttf指定的字体是黑体
windows系统下,字体在C:\Windows\Fonts下,

注意:指定fontfile路径时,号必须用\\转义,路径不能用\,必须/,否则乱码,因为路径指定有误,ffmpeg无法找到字库

在这里插入图片描述

中文水印乱码

fontfile=C\\:\Windows\Fonts\simhei.ttf
fontfile=C\:\Windows\Fonts\simhei.ttf

在这里插入图片描述

视频添加实时时间水印

ffmpeg -y -i C:\Users\cy\Desktop\video.mp4 -vf 
"drawtext=fontsize=100:text='%{localtime\:%Y-%m-%d %H-%M-%S}':
fontcolor=green:box=1:boxcolor=yellow:x=20:y=20" 
C:\Users\cy\Desktop\video_filtered.mp4

%{localtime\:%Y-%m-%d %H-%M-%S} 注意大小写,否则GG

在这里插入图片描述

视频间隔性添加水印

ffmpeg -y -i C:\Users\cy\Desktop\video.mp4 
-vf "drawtext=fontsize=100:text='helloworld':fontcolor=green:
box=1:boxcolor=yellow:x=20:y=20:enable=lt(mod(t\,2)\,1)" 
C:\Users\cy\Desktop\video_filtered.mp4
  • t 时间,s
  • mod(t\,2) 计算t%2
  • lt(mod(t\,2)\,1) 如果mod(t\,2)<1,返回1,否则返回0
  • enable=lt(mod(t\,2)\,1) 每隔1s显示一次水印,enable=lt(mod(t\,3)\,1) 每隔3s.

注意:逗号需要转义

在这里插入图片描述

视频九宫格

在这里插入图片描述
在这里插入图片描述
图片来源于《FFmpeg从入门到精通》

ffmpeg -y -i C:\Users\Administrator\Desktop\video.mp4 -i C:\Users\Administrator\Desktop\video.mp4 
-i C:\Users\Administrator\Desktop\video.mp4 -i C:\Users\Administrator\Desktop\video.mp4 
-filter_complex "nullsrc=size=640x480[base];
[0:v]scale=320x240[topleft];
[1:v]scale=320x240[topright];
[2:v]scale=320x240[bottomleft];
[3:v]scale=320x240[bottomright];
[base][topleft]overlay=shortest=1[tmp1];
[tmp1][topright]overlay=shortest=1:x=320[tmp2];
[tmp2][bottomleft]overlay=shortest=1:y=240[tmp3];
[tmp3][bottomright]overlay=shortest=1:x=320:y=240" 
-vcodec libx264 C:\Users\Administrator\Desktop\video_filtered.flv
  • nullsrc 创建画布

最短的那条流决定了编码时长

默认情况下,编解码处理是处理完所有媒体流才会结束的,也就是最长的那条流决定处理的时长。可以使用 -shortest参数指定最短的那条流决定处理时长。

比如要合并video.avi 和 audio.mp3,音频audio.mp3时长比视频video的短,现在要处理完音频即退出,如下:

ffmpeg -i video.avi -i audio.mp3 -shortest output.mp4  //添加-shortest参数

此处overlay=shortest=1,表示用作overlay的视频流结束后,停止编码(当然要所有用作overlay的视频流都结束后才会停止编码),如果不指定该参数,编码会永不停止,视频后面会一直黑屏。

在这里插入图片描述

vframes 视频截图

ffmpeg -y -i C:\Users\Administrator\Desktop\video.mp4 -ss 00:00:4 
-vframes 1 C:\Users\Administrator\Desktop\video.png
  • -ss 定位时间
  • -vframes限制输出的视频帧数

在这里插入图片描述

fps滤镜定时截图

ffmpeg -y -i C:\Users\Administrator\Desktop\haibao.mp4 -vf fps=1/2 C:\Users\Administrator\Desktop\haibao%d.png
  • fps frame per seconds 帧率
  • fps=1/2 每2s截图1张 (可理解为1/2张每s)
  • fps=1 每1s截图1张
  • fps=2 每1s截图2张

截取关键帧图片

ffmpeg -y -i C:\Users\Administrator\Desktop\video.mp4 
-vf "select='eq(pict_type,PICT_TYPE_I)'" -vsync vfr C:\Users\Administrator\Desktop\thumb%d.png

setpts视频倍速处理

半速处理

ffmpeg -y -i C:\Users\Administrator\Desktop\video.mp4 -filter_complex "setpts=PTS*2" 
C:\Users\Administrator\Desktop\video_.mp4

输出的视频文件的时长是原来的2 倍,播放速度当然是原来的1/2

  • setpts更改输入帧的PTS(显示时间戳)。
  • PTS*2 原来帧在PTS时 显示,*2让帧延迟到PTS*2时显示

2倍速处理

ffmpeg -y -i C:\Users\Administrator\Desktop\video.mp4 -filter_complex "setpts=PTS/2" 
C:\Users\Administrator\Desktop\video_.mp4

输出的视频文件的时长和原来一样(好奇),播放速度当然是原来的2倍

本文将会持续更新,敬请关注

欢迎联系、指正、批评

Github:https://github.com/AnJiaoDe

CSDN:https://blog.csdn.net/confusing_awakening

OpenCV入门教程:https://blog.csdn.net/confusing_awakening/article/details/113372425

ffmpeg入门教程:https://blog.csdn.net/confusing_awakening/article/details/102007792

微信公众号
这里写图片描述

QQ群

这里写图片描述

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值