Поиск размеров видео онлайн-видео без загрузки

Я хочу убедиться, что онлайн-видео на странице example.com/video.mp4 не было загружено на смартфон и будет иметь размеры видео, близкие к 1920 x 1080.

Легко получить размеры с загруженным видео,

import cv2
vcap = cv2.VideoCapture('video.mp4') # 0=camera
width = vcap.get(cv2.cv.CV_CAP_PROP_FRAME_WIDTH)
height = vcap.get(cv2.cv.CV_CAP_PROP_FRAME_HEIGHT)

Но я не хочу загружать файл mp4 ПЛЮС, я хочу быстро найти размер файла, чего я не могу сделать, если скачаю файл.


person jonbon    schedule 14.01.2019    source источник
comment
Я полагаю, вы имеете в виду, скачать полный файл? Интересно, будет ли простым решением попробовать одну из этих библиотек на поврежденном, частично загруженном файле?   -  person Mikhail    schedule 14.01.2019
comment
@Mikhail правильно, я хочу скачать как можно меньше или, желательно, получить доступ к некоторым метаданным, которые раскрывают размеры.   -  person jonbon    schedule 14.01.2019
comment
Взгляните на это - stackoverflow.com/questions/4969497 /, а также это - stackoverflow.com/questions/51342429/   -  person Employee    schedule 14.01.2019


Ответы (1)


Мне удалось получить размеры, загрузив фрагмент видеофайла размером 100 КБ:

import cv2
import requests

def get_dimensions(url):
    r = requests.get(url, stream=True)
    with open('output', 'wb') as f:
        for chunk in r.iter_content(chunk_size=100000):
            if chunk:
                f.write(chunk)
                break

    vcap = cv2.VideoCapture('output')
    return int(vcap.get(cv2.CAP_PROP_FRAME_WIDTH)), int(vcap.get(cv2.CAP_PROP_FRAME_HEIGHT))

Я протестировал его на нескольких файлах из Интернета, и вот что у меня получилось:

>> get_dimensions('http://file-examples.com/wp-content/uploads/2017/04/file_example_MP4_1920_18MG.mp4')
(1920, 1080)
>> get_dimensions('http://file-examples.com/wp-content/uploads/2018/04/file_example_AVI_640_800kB.avi')
(640, 360)
>> get_dimensions('https://www.sample-videos.com/video123/mkv/720/big_buck_bunny_720p_1mb.mkv')
(1280, 720)
person Alderven    schedule 21.01.2019
comment
Единственная проблема, которую я сейчас получаю, это [mov, mp4, m4a, 3gp, 3g2, mj2 @ 0x34b1200] заголовок ошибки чтения VIDIOC_REQBUFS: неподходящий ioctl для устройства - person jonbon; 10.02.2019
comment
Можете ли вы поделиться некоторыми из этих файлов? - person Alderven; 10.02.2019