ffmpeg添加动态时间戳的问题

ffmpeg添加动态时间戳的问题,第1张

最近项目有个需求——给录制的视频按照基准时间添加动态掘改时间戳。

看到这个需求,第一个想到的就是用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


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11985088.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存