Linux下使用PHP给视频加水印

65 次浏览 6 分钟阅读 0 个喜欢

效果图

333.png图片暂时无法加载

444.png图片暂时无法加载

 1、首先升级yum

sudo yum install epel-release -y
sudo yum update -y 

2、安装Nux Dextop Yum 源
sudo rpm --import http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro
sudo rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-5.el7.nux.noarch.rpm

3、安装FFmpeg 和 FFmpeg开发包

sudo yum install ffmpeg ffmpeg-devel -y

4、测试
ffmpeg 最后没报错说明安装成功
5、执行

# 该命令执行的效果:在 01.mp4 文件上添加 01.png 水印 并将新生成的视频文件保存为 02.mp4
ffmpeg -i 01.mp4 -i 01.png -filter_complex overlay 02.mp4

6、php 控制 Linux 命令

$cmd = 'ffmpeg -i 01.mp4 -i 01.png -filter_complex overlay 03.mp4'; exec($cmd); 

7、相关ffmpeg命令
1.实现每隔10秒交替出现logo

ffmpeg -y -t 60 -i input.mp4 -i logo1.png -i logo2.png -filter_complex "overlay=x=if(lt(mod(t\,20)\,10)\,10\,NAN ):y=10,overlay=x=if(gt(mod(t\,20)\,10)\,W-w-10\,NAN ) :y=10" output.mp4

60 编辑视频时长,如果填写只会处理并输出前60秒的视频,不填写会处理整个视频 x 水印的左上角的x坐标 y 水印的左上角的y坐标 input.mp4 输入的视频文件(需要处理的) output.mp4 输出的视频文件(已经处理完成的) if(gt(mod(t,20),10),W-w-10,NAN )中第二个10说logo出现的时长,即是说水印会显示10秒
2.实现跑马灯
ffmpeg -i input1 -i input2 -vcodec libx264 -an -filter_complex "overlay=x='if(gte(t,2), -w+(t-2)*20, NAN)':y=0" -s 320x240 output.mp4 input1 放在底部的视频 input2 放在上面的视频 320x240 输出视频的宽高 3.实现2秒后logo从左到右移动

ffmpeg -i input.mp4 -vf "movie=logo.png[logo];[in][logo]overlay=x='if(gte(t\,2)\,((t-2)*80)-w\,NAN)'" output.mp4

80 移动的距离,单位像素
4.实现gif格式的logo循环命令

ffmpeg -i video.mpg -ignore_loop 0 -i loop.gif -filter_complex  "[0:v][1:v]overlay=10:10:shortest=1" -vcodec mpeg2video out.mpg

5.实现视频添加字幕

ffmpeg  -i  input  -vf  drawtext=fontfile=arial.ttf:text=welcome output

6.实现周期显示输入的文字水印

ffmpeg -i input.mp4 -vf "drawtext=fontfile=/usr/share/fonts/truetype/freefont/FreeSerif.ttf:text='testtest':x=w-100:y=100:enable=lt(mod(t\,3)\,1):fontsize=24:fontcolor=yellow@0.5:shadowy=2" output.mp4

7.编写代码遇到错误

Cannot create buffer sink ret = -12 

修改

AVFilter *buffersrc  = avfilter_get_by_name("buffer");
AVFilter *buffersink = avfilter_get_by_name("buffersink");