抖音慢動作原理
在影視以及抖音中厚脉,我們都能看到各種慢動作效果。比如武打片為了動作的特效胶惰,往往會放慢播放速度等等傻工。今天,我們就通過OpenCV來實現(xiàn)其慢動作效果孵滞。
慢動作實現(xiàn)原理:
- 讀取視頻中捆,將視頻分為3部分,第一部分為慢動作前的視頻片段坊饶,第二部分為慢動作視頻片段泄伪,第三部分為慢動作后的視頻片段
- 將這3部分同時保存為視頻,但是前后兩個片段幀率與原視頻相同幼东,慢動作片段將視頻的幀率設置為10
- 最后臂容,將3個短視頻合并科雳,合并時,設置慢動作片段某幀循環(huán)添加幾次脓杉。具體循環(huán)次數(shù)由原視頻幀率除于慢動作幀率的取整數(shù)決定糟秘。
實現(xiàn)慢動作視頻
既然,我們已經(jīng)了解了慢動作視頻的制作原理球散。下面尿赚,我們直接用代碼來實現(xiàn)慢動作的效果,具體代碼如下所示:
# 慢動作實現(xiàn)
#videoFileName需要實現(xiàn)慢動作的原視頻文件名(包括路徑)
#fps_start慢動作的開始幀率
#fps_end慢動作的結束幀率
#fps_slow慢動作視頻的原始幀率
#最后保存視頻的名字(包括路徑)
def video_slow_motion_effect(videoFileName, fps_start, fps_end, fps_slow, outputFileName):
cap = cv2.VideoCapture(videoFileName)
fps = cap.get(cv2.CAP_PROP_FPS)
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
fourcc = cv2.VideoWriter_fourcc(*'MJPG')
videoWriter = cv2.VideoWriter(outputFileName + ".avi", fourcc, fps, (width, height))
video_start_writer = cv2.VideoWriter("video1.avi", fourcc, fps, (width, height))
video_slow_writer = cv2.VideoWriter("video2.avi", fourcc, fps_slow, (width, height))
video_end_writer = cv2.VideoWriter("video3.avi", fourcc, fps, (width, height))
i = 0
while (cap.isOpened()):
ret, frame = cap.read()
if ret:
if i >= fps_start and i <= fps_end:
video_slow_writer.write(frame)
elif i < fps_start:
video_start_writer.write(frame)
elif i > fps_end:
video_end_writer.write(frame)
i += 1
c = cv2.waitKey(1)
if c == 27:
break
else:
break
cap.release()
vc1 = cv2.VideoCapture("video1.avi")
vc2 = cv2.VideoCapture("video2.avi")
vc3 = cv2.VideoCapture("video3.avi")
while vc1.isOpened():
ret, frame = vc1.read()
if ret:
videoWriter.write(frame)
else:
break
while vc2.isOpened():
ret, frame = vc2.read()
if ret:
for i in range(int(fps/vc2.get(cv2.CAP_PROP_FPS))):
videoWriter.write(frame)
else:
break
while vc3.isOpened():
ret, frame = vc3.read()
if ret:
videoWriter.write(frame)
else:
break
vc1.release()
vc2.release()
vc3.release()
videoWriter.release()
if __name__ == "__main__":
video_slow_motion_effect("45.mp4", 20, 50, 5, "output1")
運行之后,慢動作的視頻效果就完全實現(xiàn)了:
1.gif
瑞克走路這段為慢動作片段