[英]How to crop a video into equal parts with python
不完全优雅,但那样就可以了。
只是使用 open-cv 将框架切割成类似框架的网格的一种非常天真的方法。 伪代码:对于每一帧,按网格拆分帧并将“块”保存到列表中。 当你完成为每个列表创建一个 mp4(你可以尝试 cv2.VideoWriter_fourcc 或上面建议的 ffmpeg)。
import wizzi_utils as wu # pip install wizzi_utils
import cv2
def main():
video_path = './wizzi_utils_playground/videos/Input/woman_yoga.mp4'
cap = cv2.VideoCapture(video_path)
if cap.isOpened():
out_dims = wu.cvt.get_dims_from_cap(cap)
w, h = out_dims
total_frames = wu.cvt.get_frames_from_cap(cap)
print('video {}: frames={}, dims={}'.format(video_path.split('/')[-1], total_frames, out_dims))
for i in range(total_frames):
success, frame = cap.read()
wu.cvt.display_open_cv_image(frame, ms=1, title='origFrame({})'.format(frame.shape), loc='top_left')
# let assume 2x2 grid - you need to write a function that does this in a loop
chunk_1 = frame[0:int(h / 2), 0:int(w / 2), :]
wu.cvt.display_open_cv_image(chunk_1, ms=1, title='chunk_1({})'.format(chunk_1.shape), loc=(0, 400))
chunk_2 = frame[0:int(h / 2), int(w / 2):w, :]
wu.cvt.display_open_cv_image(chunk_2, ms=1, title='chunk_2({})'.format(chunk_2.shape), loc=(330, 400))
chunk_3 = frame[int(h / 2):h, 0:int(w / 2), :]
wu.cvt.display_open_cv_image(chunk_3, ms=1, title='chunk_3({})'.format(chunk_3.shape), loc=(0, 620))
chunk_4 = frame[int(h / 2):h, int(w / 2):w, :]
wu.cvt.display_open_cv_image(chunk_4, ms=0, title='chunk_4({})'.format(chunk_4.shape), loc=(330, 620))
# save each chunk in a different list - finish with 4 lists
break # just the first frame for this example
# create a video from each list
return
if __name__ == '__main__':
main()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.