我正在使用 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
因此,您当然必须程序化地生成命令以仅在特定时间内显示特定字符串。
另一个想法是将字幕刻录到视频中来自预先生成的字幕文件。