1、对图片进行裁剪
ffmpeg -i input.jpg -vf crop=iw/3:ih:20:0 caijian.jpg
PS:
crop=100:100:12:34
相同效果:
crop=w=100:h=100:x=12:y=34
2、视频增加文字水印
使用drawtext滤镜进行增加水印
参数 |
类型 |
说明 |
text |
字符串 |
文字 |
textfile |
字符串 |
文字文件 |
box |
布尔 |
文字区域背景框(缺省false) |
boxcolor |
色彩 |
展示字体区域块的颜色 |
font |
字符串 |
字体名称(默认为Sans字体) |
fontsize |
整数 |
显示字体的大小 |
x |
字符串 |
缺省为0 |
y |
字符串 |
缺省为0 |
alpha |
浮点数 |
透明度(默认为1),值从0~1 |
为视频增加一个水印
ffplay -i input.mp4 -vf "drawtext=fontsize=100:fontfile=FreeSerif.ttf:text='hello world':fontcolor=green:box=1:boxcolor=yellow"
增加一个时间做为水印,在使用ffmpeg转码存储到文件时需要加上-re,否则时间不对
ffplay -i input.mp4 -vf "drawtext=fontsize=60:fontfile=FreeSerif.ttf:text='%{localtime\:%Y\-%m\-%d %H-%M-%S}':fontcolor=green:box=1:boxcolor=yellow"
转成视频
ffmpeg -re -i input.mp4 -vf "drawtext=fontsize=60:fontfile=FreeSerif.ttf:text='%{localtime\:%Y\-%m\-%d %H-%M-%S}':fontcolor=green:box=1:boxcolor=yellow" out.mp4
增加一个闪烁的水印,使用drawtext与enable配合即可,例如每3秒钟显示一次文字水印
ffplay -i input.mp4 -vf "drawtext=fontsize=60:fontfile=FreeSerif.ttf:text='test':fontcolor=green:box=1:boxcolor=yellow:enable=lt(mod(t\,3)\,1)"
跑马灯效果
ffplay -i input.mp4 -vf "drawtext=fontsize=100:fontfile=FreeSerif.ttf:text='helloworld':x=mod(100*t\,w):y=abs(sin(t))*h*0.7"
3、视频增加图片水印
为视频添加图片水印可以使用movie滤镜
参数 |
类型 |
说明 |
filename |
字符串 |
输入的文件名,可以是文件,协议,设备 |
format_name, f |
字符串 |
输入的封装格式 |
stream_index, si |
整数 |
输入的流索引编号 |
seek_point, sp |
浮点数 |
Seek输入流的时间位置 |
streams, s |
字符串 |
输入的多个流的流信息 |
loop |
整数 |
循环次数 |
discontinuity |
时间差值 |
支持跳动的时间戳差值 |
为视频增加图片水印
ffplay -i input.mp4 -vf "movie=logo.png[watermark];[in][watermark]overlay=x=10:y=10[out]" -x 500
其中一些参数说明
参数 |
说明 |
main_w |
视频单帧图像宽度 |
main_h |
视频单帧图像高度 |
overlay_w |
水印图片的宽度 |
overlay_h |
水印图片的高度 |
对应地可以将overlay参数设置成如下值来改变水印图片的位置:
水印图片位置 |
overlay值 |
左上角 |
10:10 |
右上角 |
main_w-overlay_w-10:10 |
左下角 |
10:main_h-overlay_h-10 |
右下角 |
main_w-overlay_w-10:main_h-overlay_h-10 |
跑马灯效果
ffplay -i input.mp4 -vf "movie=logo.png[watermark];[in][watermark]overlay=x=mod(50*t\,main_w):y=abs(sin(t))*h*0.7[out]"
4、生成画中画
在FFmpeg中,可以通过overlay将多个视频流、多个多媒体采集设备、多个视频文件合并到一个界面中,生成画中画的效果
参数 |
类型 |
说明 |
x |
字符串 |
X坐标 |
y |
字符串 |
Y坐标 |
eof_action |
整数 |
遇到eof表示时的处理方式,默认为重复
|
shortest |
布尔 |
终止最短的视频时全部终止(默认false) |
format |
整数 |
设置output的像素格式,默认为yuv420
|
从参数列表中可以看到,主要参数并不多,但实际上在overlay滤镜使用中,还有很多组合的参数可以使用,可以使用一些内部变量,例如overlay图层的宽、高、坐标等。
显示画中画
ffplay -i input.mp4 -vf "movie=sub_320x240.mp4[sub];[in][sub]overlay=x=20:y=20[out]"
ffplay -i input.mp4 -vf "movie=sub_320x240.mp4[sub];[in][sub]overlay=x=20:y=20:eof_action=1[out]"
ffplay -i input.mp4 -vf "movie=sub_320x240.mp4[sub];[in][sub]overlay=x=20:y=20:shortest =1[out]"
缩放画面尺寸
ffplay -i input.mp4 -vf "movie=sub_320x240.mp4,scale=640x480[sub];[in][sub]overlay=x=20:y=20[out]"
跑马灯
ffplay -i input.mp4 -vf "movie=sub_320x240.mp4[test];[in][test]overlay= x=mod(50*t\,main_w):y=abs(sin(t))*main_h*0.7[out]"
5、视频多宫格
从前文中可以看出进行视频图像处理时,overlay滤镜为关键画布,可以通过FFmpeg建立一个画布,也可以使用默认的画布。如果想以多宫格的方式展现,则可以自己建立一个足够大的画布,下面就来看一下多宫格展示的例子:
ffmpeg -i 1.mp4 -i 2.mp4 -i 3.mp4 -i 4.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" out.mp4
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进行不同位置平铺。
只叠加左上右上的命令:
ffmpeg -i 1.mp4 -i 2.mp4 -i 3.mp4 -i 4.mp4 -filter_complex "nullsrc=size=640x480[base];[0:v]setpts=PTS-STARTPTS,scale=320x240[upperleft];[1:v]setpts=PTS-STARTPTS,scale=320x240[upperright];[base][upperleft]overlay=shortest=1[tmp1];[tmp1][upperright]overlay=shortest=1:x=320" out2.mp4
多宫格音频合并
ffmpeg -i .\test.mp4 -itsoffset 5 -i .\20.mp4 -filter_complex "[1:v]scale=320:240[v1];[0:v][v1]overlay=10:10;[1]adelay=5000|5000[a1];[0][a1]amix=inputs=2" out.mp4 -y
用到的命令为
[1]adelay=5000|5000[a1];[0][a1]amix=inputs=2
意思是 将第二个文件(0为第一个文件)的音频延迟5秒播放,然后将第一个文件和第二个文件的音频叠加在一起。
后面合并的部分可以根据情况进行参数调整,一下为全部参数的缺省值文章来源:https://www.toymoban.com/news/detail-491992.html
amix=inputs=2:duration=longest:dropout_transition=2:weights='1 1'文章来源地址https://www.toymoban.com/news/detail-491992.html
到了这里,关于ffmpeg学习记录的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!