代码细节:1、视频帧率取决不同opencv版本 2、从VideoCapture读出来的文件,没有了还能读!!所以最后一帧是None,用frame_s.pop()弹出3、注意内存各种占满所以对Moviepy的视频做.close()。对opencv()做.release()和cv2.destroyAllWindows()
4、代码设计,video ---> frame; frame ---> visual; video ---->audio; visual + audio ---> video.
from moviepy.editor import *
import xml.etree.ElementTree as ET
import os
import cv2
import glob
import shutil
import pdb
def draw_redNose_in_video(correspond_video, xml_root, probe):
replaced = os.path.dirname(os.path.dirname(os.path.dirname(video_dst_multip)))
print(correspond_video.replace(replaced, ''))
index_s = []
point_s = []
# pdb.set_trace()
src = glob.glob(correspond_video+'*')[0]
# decoding xml
for index, type_tag in enumerate(xml_root.findall(probe)):
point = type_tag.find('point').text
if index == len(xml_root.findall(probe)) - 1:
frame_index = int(type_tag.find('frameIndex').text) # The last frame may be out of the range.
else:
frame_index = int(type_tag.find('frameIndex').text) + 1
index_s.append(frame_index)
point_xy = point.split(',')
point_s.append(point_xy)
vidcap = cv2.VideoCapture(src)
# Find OpenCV version
(major_ver, minor_ver, subminor_ver) = (c