【问题标题】:write text for each frame from txt file onto video将文本文件中每一帧的文本写入视频
【发布时间】:2020-11-25 16:07:43
【问题描述】:

我有一个 txt 文件,其中包含视频中每一帧的注释(所以 "number of rows" == "number of frames")。现在我想将每一行的文本写入视频中对应的帧(某个角落)——有没有办法使用 ffmpeg(或类似的免费工具)来做到这一点?

【问题讨论】:

  • 生成字幕文件(.srt/.ass)并使用字幕过滤器进行刻录。

标签: video ffmpeg


【解决方案1】:
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()

【讨论】:

    【解决方案2】:

    通过 drawtext,您可以使用 libfreetype 库从视频顶部的指定文件中绘制文本字符串或文本。

    https://ffmpeg.org/ffmpeg-filters.html#drawtext

    【讨论】:

    • 是的,这是问题的简单部分,但问题的复杂部分是每个框架都应该有自己的特定文本。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-09
    • 1970-01-01
    • 2022-11-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多