将 txt 文件中每一帧的文本写入视频
write text for each frame from txt file onto video
我有一个 txt 文件,其中包含视频中每一帧的注释(所以 "number of rows" == "number of frames"
)。现在我想将每一行的文本写入视频中相应的帧(到某个角落)——有没有办法使用 ffmpeg(或类似的免费工具)做到这一点?
借助 drawtext,您可以使用 libfreetype 库在视频顶部绘制文本字符串或来自指定文件的文本。
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()
我有一个 txt 文件,其中包含视频中每一帧的注释(所以 "number of rows" == "number of frames"
)。现在我想将每一行的文本写入视频中相应的帧(到某个角落)——有没有办法使用 ffmpeg(或类似的免费工具)做到这一点?
借助 drawtext,您可以使用 libfreetype 库在视频顶部绘制文本字符串或来自指定文件的文本。
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()