先上源码:
# -*- coding: gbk -*-
import os
import sys
from moviepy.editor import VideoFileClip, concatenate_videoclips
video= r'video.mp4'
resultFile= r'video_moviepy.mp4'
video = VideoFileClip(video,audio=False).resize([1080, 1920])
duration = video.duration
video = video.fl_time(lambda t: 1.5*t,
apply_to=['mask','video','audio']
).set_end(duration/1.5)
video.write_videofile(resultFile,bitrate='862k')
其实这应该算是moviepy的一个bug,会旋转竖屏的视频,那么我们让他旋转回来,指定好固定的输出分辨率就好了。
比如原视频分辨率是1920*1080,那么我们指定分辨率为1080*1920,不就完成了旋转!
下面的"resize"就是改变分辨率的参数。
video = VideoFileClip(video).resize([1080, 1920])
当然,也可以更加智能,不需要指定固定分辨率,只需要if来判断下是否被旋转就好了。如果检测到被旋转,则将旋(video.rotation = 0)至设置为零,那么分辨率就自动帮我们输出成了1080*1920了。
if video.rotation in (90, 270):
video = video.resize(video.size[::-1])
video.rotation = 0
参考文献:
Portrait videos converted to landscape on load #586
https://github.com/Zulko/moviepy/issues/586