如何使用正确的时间码生成带有视频缩略图的图块
How to generate tile with video thumbnails with right timecode
我正在使用 FFMPEG 库使用以下命令每 5 秒生成一次带有时间码的视频缩略图:
ffmpeg \
-i 20051210-w50s.flv \
-y \
-frames 1 \
-vf " \
select=not(mod(t\,5)), \
scale=320:-1, \
drawtext=fontfile=/usr/share/fonts/dejavu/DejaVuSans-Bold.ttf: \
timecode='00\:00\:00\:00': r=25: fontcolor=white: x=220: y=220: box=1: boxcolor=black@0.5, \
tile=5x2" \
-vsync 0 \
out.jpg
它会生成正确的缩略图图块,但时间码是错误的。如何解决这个问题?
drawtext 过滤器未引用时间戳。它使用一个简单的计数器来增加每个新帧的时间码。所以,这样做的方法是绘制每个时间码,然后丢帧。
ffmpeg \
-i 20051210-w50s.flv \
-y \
-frames 1 \
-vf " \
scale=320:-1, \
drawtext=fontfile=/usr/share/fonts/dejavu/DejaVuSans-Bold.ttf: \
timecode='00\:00\:00\:00': r=25: fontcolor=white: x=220: y=220: box=1: boxcolor=black@0.5, \
select=not(mod(t\,5)), \
tile=5x2" \
-vsync 0 \
out.jpg
在 select 使用有用的帧之前为每一帧绘制文本可以解决问题,但也会带来性能损失。我做了一个实验,结果证实了我的猜测。
更好的解决方案是先调用“select”并使用 text='%{pts:hms}' 代替时间码。
ffmpeg \
-i 20051210-w50s.flv \
-y \
-frames 1 \
-vf \
"select=not(mod(t\,5)), \
scale=320:-1, \
drawtext=text='%{pts:hms}': fontfile=/usr/share/fonts/dejavu/DejaVuSans-Bold.ttf: \
fontcolor=white: x=220: y=220: box=1: boxcolor=black@0.5, \
tile=5x2" \
-vsync 0 \
out.jpg
我正在使用 FFMPEG 库使用以下命令每 5 秒生成一次带有时间码的视频缩略图:
ffmpeg \
-i 20051210-w50s.flv \
-y \
-frames 1 \
-vf " \
select=not(mod(t\,5)), \
scale=320:-1, \
drawtext=fontfile=/usr/share/fonts/dejavu/DejaVuSans-Bold.ttf: \
timecode='00\:00\:00\:00': r=25: fontcolor=white: x=220: y=220: box=1: boxcolor=black@0.5, \
tile=5x2" \
-vsync 0 \
out.jpg
drawtext 过滤器未引用时间戳。它使用一个简单的计数器来增加每个新帧的时间码。所以,这样做的方法是绘制每个时间码,然后丢帧。
ffmpeg \
-i 20051210-w50s.flv \
-y \
-frames 1 \
-vf " \
scale=320:-1, \
drawtext=fontfile=/usr/share/fonts/dejavu/DejaVuSans-Bold.ttf: \
timecode='00\:00\:00\:00': r=25: fontcolor=white: x=220: y=220: box=1: boxcolor=black@0.5, \
select=not(mod(t\,5)), \
tile=5x2" \
-vsync 0 \
out.jpg
在 select 使用有用的帧之前为每一帧绘制文本可以解决问题,但也会带来性能损失。我做了一个实验,结果证实了我的猜测。
更好的解决方案是先调用“select”并使用 text='%{pts:hms}' 代替时间码。
ffmpeg \
-i 20051210-w50s.flv \
-y \
-frames 1 \
-vf \
"select=not(mod(t\,5)), \
scale=320:-1, \
drawtext=text='%{pts:hms}': fontfile=/usr/share/fonts/dejavu/DejaVuSans-Bold.ttf: \
fontcolor=white: x=220: y=220: box=1: boxcolor=black@0.5, \
tile=5x2" \
-vsync 0 \
out.jpg