看到这个需求,第一个想到的就是用ffmpeg去转换,百度了一番,基本上都是类似与下面这条命令:
ffmpeg -i 20201124023926196.mp4 -vf "drawtext=expansion=strftime:basetime=$(date +%s -d '2020-11-24 16:27:50')000000 :text='%Y-%m-%d %H\\:%M\\:%S':fontsize=18:fontcolor=white:box=1:x=100:y=100:[email protected]:" -strict -2 -y out.mp4
执行后,可以发现时间戳并不是银散腊从指定的"2020-11-24 16:27:50"基准时间开始的,这是什么原因呢?于是又从git上查找相关的资料,发现是basetime格式的问题, basetime是int(64)类型的,精确到微秒, 一定要注意这一点。
其它参数说明:
-i: 指定输入文件,这里使用的视频编码是H264, 音频编码是AAC
-vf: 视频滤镜,使用了drawtext滤镜,basetime是视频时间戳的初始值,text是显示时间的格式,fontsize后面一串是关于水印的颜色、字体、背景等设置
-strict -2:AAC的解码在2.x版本是试验性功能,需要加这个参数
锋滑-y: 覆盖已经存在的输出文件
x处谨宽做个if判断就行,显示5秒就往闭晌拿后延5秒,3分25秒换算秒数就是205秒,那结束时间就是210秒就好了给你的代码完善一下你试一下
ffplay tmp.mp4.mp4 -vf drawtext="fontfile=arial.ttf:x='if(gte(t,205),if(lte(t,210),w-tw,NAN),NAN)':fontcolor=white:fontsize=30:text='%{localtime\:%H\\\:%M\\\:%S}':enable=lt(mod(t\,3)\,1)"
if(gte(t,205),if(lte(t,210),w-tw,NAN),NAN)意思就是大于205秒和小于210秒时显示,大于210秒时消失
但这样只会在3分25秒处显示水印5秒钟,:enable=lt(mod(t\轿搭,3)\,1)这段代码没什么用,去掉吧
本文只列出自己工作中所使用到的视频处理相关指令,若想更全面的了解,可查询官网: http://ffmpeg.org/ffmpeg-all.html
ffmpeg -ss $beginTime -t $lengthTime -accurate_seek -i $srcFileName -codec copy -avoid_negative_ts 1 $dstFileName
ffmpeg -ss $beginTime -t $lengthTime -i $srcFileName -c:v libx264 -c:a aac -strict experimental -b:a 98k $dstFileName
其中:$beginTime——分割起始时间$lengthTime——分割视频拦汪时间长度;$srcFileName——原始视频文件;$dstFileName——分割生成的目标视频文件名
ffmpeg -f concat -safe 0 -i $srcFileList -c copy $dstFileName >/dev/null 2>&1
其中:$srcFileList——需要拼接的原始视频文件列简物仔表;$dstFileName——拼接生成的目标视频文件
ffmpeg -i $hlsHttpAddr -c copy $dstFileName
其中: $hlsHttpAddr——hls视频流对应的http地址; $dstFileName——目标视频文件
ffmpeg -i $srcFileName -f wav -ar 16000 -ac 1 $dstFileName
其中:$srcFileName——原始视频文件蚂升; $dstFileName——生成的音频文件;且生成的音频为单通道
ffmpeg -filter_complex 'color=c=red' -t 5 out.mkv
ffmpeg -i main.mp4 -vf 'movie=effect.mp4 [f][in][f] overlay=0:0 [out]' out.mp4
ffmpeg -f lavfi -t 80 -i color=c=red:s=1920x1080 -i SHXERD100805.mp4 -filter_complex "overlay[out]" -map "[out]" output_backgroud.mkv
其中:-t为指定生成视频文件的时长,若不指定则生成视频时长会一直累加,直到退出程序,因而需提前计算出叠加视频的时间,计算视频时长可使用如下命令:
ffmpeg -i $srcFileName 2>&1 | grep 'Duration' | cut -d ' ' -f 4 | sed s/,//
ffmpeg -i input.mp4 -i image1.png -i image2.jpg -filter_complex 'overlay=x=W-w:y=H-h,overlay=x=0:y=0' output.mp4
ffmpeg -i input.mp4 -vf "drawtext=fontfile=simhei.ttf: text='my video':x=10:y=10:fontsize=24:fontcolor=white:shadowy=2" output.mp4
如果需要在一条命令中添加多个文字,可参考如下命令:
ffmpeg -i input.mp4 -vf "drawtext=fontfile='msyh.ttf':text='my video':x=20:y=20:fontsize=40:[email protected],drawtext=fontfile='msyh.ttf':text='我的视频':x=100:y=100:fontsize=40:[email protected]" output.mp4 -y
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)