Я уже знаю, как получить продолжительность видеофайла локального :
Код: Выделить всё
import xml.etree.ElementTree as eltt, subprocess as spr
def size_from_fn(file_name):
size = eltt.fromstring(
spr.run(["ffprobe",
"-i", file_name,
"-show_format", "-output_format", "xml"
], stdout = spr.PIPE, stderr = spr.STDOUT).stdout.decode()
).find("format").get("duration")
return size
def size_from_fd(file_descriptor):
size = eltt.fromstring(
spr.run(["ffprobe",
"-i", "pipe:0",
"-show_format", "-output_format", "xml"
], stdin = file_descriptor, stdout = spr.PIPE, stderr = spr.STDOUT).stdout.decode()
).find("format").get("duration")
return size
def size_from_data(file_name):
size = eltt.fromstring(
spr.run(["ffprobe",
"-i", "pipe:0",
"-show_format", "-output_format", "xml"
], input = data, stdout = spr.PIPE, stderr = spr.STDOUT).stdout.decode()
).find("format").get("duration")
return size
< /code>
Все работают отлично < /p>
Также я знаю, как получить HTTP -запрос в качестве дескриптора файла: < /p>
import requests as rq
def url_to_fd(url):
req = rq.get(url, stream = True)
return req.raw
Однако комбинация двух сбоев с помощью сообщения из ffprobe : неверные данные, найденные при обработке ввода
Я понятия не имею, почему я просто знаю возвращенный файл дескриптор из URL. Дескриптор: < /p>
Код: Выделить всё
with open("test.mp4", "rb") as f:
f.seek = None
size_of_fd(f)
Также, что это работает, поэтому я не знаю, что случилось:
Код: Выделить всё
def get_duration(url):
complete_data = url_to_fd(url).read()
return size_of_data(complete_data)
Подробнее здесь: https://stackoverflow.com/questions/795 ... pe-mechani