python3.8.3,win10
测试了4个不同方向拍摄的视频,第一个/最后一个视频是正常横/竖向视频
工具一:moviepy1.0.3:https://github.com/Zulko/moviepy,不支持网络视频
class moviepyTest():
__moviepy_editor = __import__('moviepy.editor')
v_paths = [
'D:/video/phone_crosswise.mp4',
'D:/video/phone_inversion_crosswise.mp4',
'D:/video/phone_inversion_vartical.mp4',
'D:/video/phone_vertical.mp4',
]
@classmethod
def test(cls):
for i in range(4):
clip = cls.__moviepy_editor.editor.VideoFileClip(cls.v_paths[i])
print(clip.rotation)
moviepyTest.test()
输出:
0
180
270
90
工具二:scikit-video版本1.1.11,最后一次更新是18年。支持网络视频
依赖包:ffmpeg,下载的是ffmpeg-5.0-full_build.7z
class scikitVideoTest():
'''
scikit-video(1.1.11): https://github.com/scikit-video/scikit-video
依赖ffmppeg: http://ffmpeg.org/download.html
'''
@classmethod
def test(cls):
__skvideo = __import__('skvideo')
__skvideo.setFFmpegPath(r'D:/ffmpeg-5.0-full_build/bin')#必须指定ffmpeg路径
__skvideo_io = __import__('skvideo.io')
v_paths = [
'D:/video/phone_crosswise.mp4',
'D:/video/phone_inversion_crosswise.mp4',
'D:/video/phone_inversion_vartical.mp4',
'D:/video/phone_vertical.mp4',
]
# 取手机视频信息
for i in range(4):
v_path = v_paths[i]
video_metadata = __skvideo_io.io.ffprobe(v_path)['video']
if 'side_data_list' in video_metadata:
side_data_list = video_metadata['side_data_list']
if 'side_data' in side_data_list:
side_data = side_data_list['side_data']
print(side_data.get('@rotation', 'None'))
else: print('Not found side_data')
else: print('Not found side_data_list')
输出:
Not found side_data_list
-180
90
-90
参考:Python下获取视频的旋转角度信息_m_buddy的博客-CSDN博客
工具三:pymediainfo(5.1.0),不支持网络视频
class MediaInfoTest():
@classmethod
def test(cls):
__media_info = __import__('pymediainfo', fromlist=['MediaInfo'])
for i in range(4):
vpath = v_paths[i]
media_info = __media_info.MediaInfo.parse(vpath)
data = media_info.to_data()
rotation = data['tracks'][1].get('rotation', '0') # 取视频旋转角度
print(rotation)
MediaInfoTest.test()
输出:0.000
180.000
270.000
90.000
参考:使用Python借助pymediainfo读取视频文件的详细信息_COCO56的博客-CSDN博客_python 读取视频信息