【发布时间】:2020-11-25 16:07:43
【问题描述】:
我有一个 txt 文件,其中包含视频中每一帧的注释(所以 "number of rows" == "number of frames")。现在我想将每一行的文本写入视频中对应的帧(某个角落)——有没有办法使用 ffmpeg(或类似的免费工具)来做到这一点?
【问题讨论】:
-
生成字幕文件(.srt/.ass)并使用字幕过滤器进行刻录。
我有一个 txt 文件,其中包含视频中每一帧的注释(所以 "number of rows" == "number of frames")。现在我想将每一行的文本写入视频中对应的帧(某个角落)——有没有办法使用 ffmpeg(或类似的免费工具)来做到这一点?
【问题讨论】:
import cv2
# reading text file with text. each line index is frame pos
with open('frames.txt') as f:
frames = {k: v for k, v in enumerate(f.readlines())}
cap = cv2.VideoCapture('sample.mp4')
fps = cap.get(cv2.CAP_PROP_FPS)
w = cap.get(cv2.CAP_PROP_FRAME_WIDTH)
h = cap.get(cv2.CAP_PROP_FRAME_HEIGHT)
fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter('output.avi', fourcc, fps, (int(w), int(h)))
font = cv2.FONT_HERSHEY_SIMPLEX
while cap.isOpened():
ret, frame = cap.read()
if ret:
frame_no = cap.get(cv2.CAP_PROP_POS_FRAMES)
if frame_no in frames:
cv2.putText(frame, frames[frame_no], (10, 500), font, 4, (255, 255, 255), 2, cv2.LINE_AA)
out.write(frame)
else:
break
cap.release()
out.release()
cv2.destroyAllWindows()
【讨论】:
通过 drawtext,您可以使用 libfreetype 库从视频顶部的指定文件中绘制文本字符串或文本。
【讨论】: