使用 ffmpeg 为视频帧添加自定义时间

使用 ffmpeg 为视频帧添加自定义时间

我正在使用 ffmpeg 将原始像素数据(bgr32)编码为视频文件。

像素数据正在从 java 应用程序发送到 ffmpeg stdin 管道。

我正在寻找一种方法来为编码视频文件中的每个帧添加时间戳覆盖。

看起来有一种方法可以添加当前时间的时间戳。

说明可以在这里找到:http://einar.slaskete.net/2011/09/05/adding-time-stamp-overlay-to-video-stream-using-ffmpeg/

该站点的代码示例如下:

ffmpeg -f video4linux2 -i /dev/video0 -s 640x480 -r 30 -vf \
"drawtext=fontfile=/usr/share/fonts/truetype/ttf-dejavu/DejaVuSans-Bold.ttf: \
text='\%T': [email protected]: x=7: y=460" -vcodec libx264 -vb 2000k \
-preset ultrafast -f mp4 output.mp4

和这个:

ffmpeg -f video4linux2 -input_format mjpeg -s 1280x720 -i /dev/video0 \
-vf "drawtext=fontfile=/usr/share/fonts/dejavu/DejaVuSans-Bold.ttf: \
text='%{localtime\:%T}': [email protected]: x=7: y=700" -vcodec libx264 \
-preset veryfast -f mp4 -pix_fmt yuv420p -y output.mp4

我正在编码的视频文件是几天前拍摄的,我需要为每一帧添加自定义时间。例如 2013 年 12 月 12 日 11:11:45,而不是当前时间。

是否可以使用 ffmpeg 做类似的事情?

答案1

drawtext过滤器使用配置编译时--enable-libfreetype。如果没有这个,你必须自己编译 ffmpeg– 但并不是太复杂。

最简单的语法是:

ffmpeg -i <input> -vf 'drawtext=fontsize=15:fontfile=FreeSerif.ttf:text=LONG_LINE:y=100:x=100' output.mp4

这会将文本定位在距左上角 100 像素的位置。然后您可以使用选项enable要为某个框架指定文本,例如仅为框架显示文本123,您可以使用:

drawtext=enable='eq(n,123)':fontsize=15:fontfile=FreeSerif.ttf:text='I':y=100:x=100

因此,您当然必须程序化地生成命令以仅在特定时间内显示特定字符​​串。


另一个想法是将字幕刻录到视频中来自预先生成的字幕文件。

相关内容