使用 OpenCV2 编写时如何避免视频延迟?
How to avoid Video lag when writing using OpenCV2?
当我尝试使用 OpenCV2 简单地读写视频时,它在视频中引入了 1.033 倍的延迟 - 例如,3:17min 的原始视频在输出中变为 3:24min视频,19:00min 变为 19:38min。我这里有什么地方做错了吗?
FPS (29) 和帧数在输入和输出视频中保持不变。 (我正在尝试进行面部识别,但我正在尝试先找出延迟)
input_movie = cv2.VideoCapture(video_under_analysis)
length = int(input_movie.get(cv2.CAP_PROP_FRAME_COUNT))
width, height = (
int(input_movie.get(cv2.CAP_PROP_FRAME_WIDTH)),
int(input_movie.get(cv2.CAP_PROP_FRAME_HEIGHT))
)
fps = int(input_movie.get(cv2.CAP_PROP_FPS))
fourcc = cv2.VideoWriter_fourcc('m', 'p', '4', 'v')
output_movie = cv2.VideoWriter()
output_file_name = "output.mp4"
# Define the codec and create VideoWriter object
output_movie.open(output_file_name, fourcc, fps, (width, height), True)
frame_number = 0
FRAME_LIMIT = length
while True:
ret, frame = input_movie.read()
frame_number += 1
if not ret or frame_number > FRAME_LIMIT:
break
if frame is not None:
output_movie.write(frame)
update_progress(1)
output_movie.release()
input_movie.release()
cv2.destroyAllWindows()
我认为问题可能出在这一行
fps = int(input_movie.get(cv2.CAP_PROP_FPS))
您正在将 float
值转换为 int
。您的输入视频的 fps 可能是一些 float
,例如 29.9,它被转换为 29。因此,持续滞后。
当我尝试使用 OpenCV2 简单地读写视频时,它在视频中引入了 1.033 倍的延迟 - 例如,3:17min 的原始视频在输出中变为 3:24min视频,19:00min 变为 19:38min。我这里有什么地方做错了吗?
FPS (29) 和帧数在输入和输出视频中保持不变。 (我正在尝试进行面部识别,但我正在尝试先找出延迟)
input_movie = cv2.VideoCapture(video_under_analysis)
length = int(input_movie.get(cv2.CAP_PROP_FRAME_COUNT))
width, height = (
int(input_movie.get(cv2.CAP_PROP_FRAME_WIDTH)),
int(input_movie.get(cv2.CAP_PROP_FRAME_HEIGHT))
)
fps = int(input_movie.get(cv2.CAP_PROP_FPS))
fourcc = cv2.VideoWriter_fourcc('m', 'p', '4', 'v')
output_movie = cv2.VideoWriter()
output_file_name = "output.mp4"
# Define the codec and create VideoWriter object
output_movie.open(output_file_name, fourcc, fps, (width, height), True)
frame_number = 0
FRAME_LIMIT = length
while True:
ret, frame = input_movie.read()
frame_number += 1
if not ret or frame_number > FRAME_LIMIT:
break
if frame is not None:
output_movie.write(frame)
update_progress(1)
output_movie.release()
input_movie.release()
cv2.destroyAllWindows()
我认为问题可能出在这一行
fps = int(input_movie.get(cv2.CAP_PROP_FPS))
您正在将 float
值转换为 int
。您的输入视频的 fps 可能是一些 float
,例如 29.9,它被转换为 29。因此,持续滞后。