videoAddText.py
import cv2
# 原始文件名
ori_file_name = "demo.mp4" # 原文件名
# 运行后保存的文件名
result_file_name = "demo-result.mp4"
# 读取视频
ori_video = cv2.VideoCapture(ori_file_name) # 原视频
# 获取视频帧数
video_frame_count = ori_video.get(cv2.CAP_PROP_FRAME_COUNT) # 帧数
# 获取视频帧率
video_fps = ori_video.get(cv2.CAP_PROP_FPS) # 帧率
print('原视频帧率' + str(video_fps))
# 获取视频时长
video_duration = video_frame_count / video_fps # 时长
# 获取原视频编码格式
video_fourcc = int(ori_video.get(cv2.CAP_PROP_FOURCC))
video_fourcc_str = "".join([chr((video_fourcc >> 8 * i) & 0xFF) for i in range(4)]) # 将编码格式转换为四个字符的字符串
print('原视频编码格式: ' + video_fourcc_str)
# 设置写入视频的编码格式
out_fourcc = cv2.VideoWriter_fourcc(*"mp4v")
#out_fourcc = cv2.VideoWriter_fourcc(*video_fourcc_str)
# 获取视频宽度
frame_width = int(ori_video.get(cv2.CAP_PROP_FRAME_WIDTH))
# 获取视频高度
frame_height = int(ori_video.get(cv2.CAP_PROP_FRAME_HEIGHT))
#
videoWriter = cv2.VideoWriter(result_file_name, # 文件名
out_fourcc, # 编码格式
video_fps, # 帧率
(frame_width, frame_height)) # (宽,高)
d_y = 25 # 纵向间距
file = open("./demo.txt", "r") # 打开文本文件
text_content = file.read() # 读取文本文件内容
frame_id = 0
while (ori_video.isOpened()):
print(frame_id)
frame_id = frame_id + 1
read_success, frame = ori_video.read() # read_success:布尔值 frame:读到的一帧图像数据
if read_success == True: # 这帧存在
# 文字坐标
word_x = int(frame_width / 40) # 文字x
word_y = int(frame_height / 20) # 文字y
for line in text_content.split("\n"): # 分割文本内容并遍历每一行
cv2.putText(frame, # 帧
line, # 文本内容
(word_x, word_y), # 坐标
cv2.FONT_HERSHEY_SIMPLEX, # 字体类型
1, # 字体大小缩放因子
(55,255,155), # RGB
2) # 线条粗细
# 更新下一行的位置
word_y += d_y
# 写入视频
videoWriter.write(frame)
else:
videoWriter.release()
print(ori_file_name + ' processed successfully')
file.close()
break
#读取视频
out_video = cv2.VideoCapture(result_file_name) # 输出的视频
# 获取视频帧数
out_video_frame_count = out_video.get(cv2.CAP_PROP_FRAME_COUNT) # 帧数
# 获取视频帧率
out_video_fps = out_video.get(cv2.CAP_PROP_FPS) # 帧率
print('输出视频帧率' + str(out_video_fps))
# 获取视频时长
out_video_duration = out_video_frame_count / out_video_fps # 时长
# 获取视频编码格式
out_fourcc = int(out_video.get(cv2.CAP_PROP_FOURCC))
out_fourcc_str = "".join([chr((out_fourcc >> 8 * i) & 0xFF) for i in range(4)]) # 将编码格式转换为四个字符的字符串
print('输出视频编码格式: ' + str(out_fourcc_str))