@Ridalit

Почему openCV генерирует неоткрывающееся видео?

У меня есть вот такой код
import telcom
import telebot
import ffmpeg
import cv2
import time
from platform import release
from moviepy.editor import *
from moviepy.video.tools.subtitles import SubtitlesClip
from moviepy.video.io.VideoFileClip import VideoFileClip
import os
token="token"
bot = telebot.TeleBot(token)
bol=0



def send():

    def face_capture():
        cascade_path = "C:\\Users\\Ridalit\\PycharmProjects\\teleDistortion\\haarcascades\\haarcascade_frontalface_default.xml"
        clf = cv2.CascadeClassifier(cascade_path)
        camera = cv2.VideoCapture('test.mp4')
        vid = cv2.VideoCapture('test.mp4')
        out = cv2.VideoWriter('fin.mp4', -1, 20.0, (384, 384))

        while True:
            _, frame = camera.read()
            gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

            faces = clf.detectMultiScale(
                gray,
                scaleFactor=1.1,
                minNeighbors=6,
                minSize=(30, 30),
                flags=cv2.CASCADE_SCALE_IMAGE
            )

            for (x, y, width, height) in faces:
                cv2.rectangle(frame, (x, y), (x + width, y + height), (0, 0, 0), 5)

            out.write(frame)
            cv2.imshow('Super Faces', frame)

            if cv2.waitKey(1) == ord('h'):
                break
        out.release()
        camera.release()
        cv2.destroyAllWindows()

    def main():
        face_capture()

    if __name__ == '__main__':
        main()


@bot.message_handler(content_types=['video_note'])
def download_image(message):
    fileID = message.video_note.file_id
    file_info = bot.get_file(fileID)
    downloaded_file = bot.download_file(file_info.file_path)
    with open("test.mp4", 'wb') as new_file:
        new_file.write(downloaded_file)
        send()

bot.polling()


Если просто вызвать функцию send(), то все ок, но если вызывать ее там где она сейчас (download_image), то выходит видео, которое не открывается. При том его вес ~1.92мб (зависит от длительности). Никак не могу понять в чем дело
  • Вопрос задан
  • 72 просмотра
Пригласить эксперта
Ответы на вопрос 1
@o5a
with open("test.mp4", 'wb') as new_file:
    new_file.write(downloaded_file)
    send()

У Вас send() вызывается внутри блока работы с файлом (with). Т.е. вы открыли файл на запись, записали в него информацию, но еще не закрыв, пытаетесь считать данные. Для send() этот файл еще пустой. Сначала закончите запись в файл, затем уже читайте из него:
with open("test.mp4", 'wb') as new_file:
    new_file.write(downloaded_file)
send()

Возможно помимо этого и другие ошибки есть, но это первая заметная.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы