获取视频文件的尺寸

37 投票
7 回答
47018 浏览
提问于 2025-04-17 01:47

有没有办法在Python中获取视频文件的尺寸,或者有没有其他库可以做到这一点?就像一个Media Info那样的功能?

7 个回答

17

你可以试试使用 ffmpeg-python 这个工具:

import ffmpeg
probe = ffmpeg.probe(movie_path)
video_streams = [stream for stream in probe["streams"] if stream["codec_type"] == "video"]

它能给你输出一个非常不错的结果,像这样:

>>> import pprint
>>> pprint.pprint(video_streams[0])
{'avg_frame_rate': '30/1',
 'bit_rate': '3291',
 'bits_per_raw_sample': '8',
 'chroma_location': 'left',
 'codec_long_name': 'H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10',
 'codec_name': 'h264',
 'codec_tag': '0x31637661',
 'codec_tag_string': 'avc1',
 'codec_time_base': '1/60',
 'codec_type': 'video',
 'coded_height': 240,
 'coded_width': 320,
 'color_primaries': 'bt709',
 'color_range': 'tv',
 'color_space': 'bt709',
 'color_transfer': 'bt709',
 'display_aspect_ratio': '4:3',
 'disposition': {'attached_pic': 0,
                 'clean_effects': 0,
                 'comment': 0,
                 'default': 1,
                 'dub': 0,
                 'forced': 0,
                 'hearing_impaired': 0,
                 'karaoke': 0,
                 'lyrics': 0,
                 'original': 0,
                 'timed_thumbnails': 0,
                 'visual_impaired': 0},
 'duration': '71.833333',
 'duration_ts': 6465000,
 'field_order': 'progressive',
 'has_b_frames': 1,
 'height': 240,
 'index': 0,
 'is_avc': 'true',
 'level': 13,
 'nal_length_size': '4',
 'pix_fmt': 'yuv420p',
 'profile': 'Main',
 'r_frame_rate': '30/1',
 'refs': 1,
 'sample_aspect_ratio': '1:1',
 'start_pts': 0,
 'start_time': '0.000000',
 'tags': {'creation_time': '2018-10-26T04:25:07.000000Z',
          'handler_name': 'VideoHandler',
          'language': 'und'},
 'time_base': '1/90000',
 'width': 320}

唯一的缺点是需要安装 ffmpeg,但在大多数情况下这并不是个问题。

41

如果我理解得没错,你是说视频的分辨率,比如说768x432。

这可以很简单地通过Python中的opencv来实现。

import cv2
file_path = "./video.avi"  # change to your own video path
vid = cv2.VideoCapture(file_path)
height = vid.get(cv2.CAP_PROP_FRAME_HEIGHT)
width = vid.get(cv2.CAP_PROP_FRAME_WIDTH)
6

在我之前的公司,我们遇到了类似的问题,但我找不到任何可以解决这个问题的Python库。所以我最后选择了使用mediainfo,这个工具可以通过Python来使用。mediainfo还有命令行选项,输出结果也很容易解析。因此,实际上你用mediainfo的Python模块就足够了。它还有一个额外的好处,因为你会发现所有的媒体信息软件并不支持所有的编码格式,所以你可以在后台使用多个软件或库,而只需要一个Python的封装。

撰写回答