Eluza133 commited on
Commit
1a59ce9
·
verified ·
1 Parent(s): 7ff6fd1

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +18 -21
app.py CHANGED
@@ -4,12 +4,12 @@ import os
4
  import logging
5
  import threading
6
  import time
 
 
7
  from datetime import datetime
8
  from huggingface_hub import HfApi, hf_hub_download
9
  from werkzeug.utils import secure_filename
10
- import cv2
11
- import numpy as np
12
- import uuid
13
 
14
  app = Flask(__name__)
15
  app.secret_key = 'supersecretkey' # Замените на безопасный ключ в продакшене
@@ -88,21 +88,18 @@ def periodic_backup():
88
  # Генерация случайного кадра из видео
89
  def generate_thumbnail(video_path):
90
  try:
91
- cap = cv2.VideoCapture(video_path)
92
- if not cap.isOpened():
93
- raise Exception("Не удалось открыть видео")
94
-
95
- frame_count = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
96
- random_frame = np.random.randint(0, frame_count)
97
- cap.set(cv2.CAP_PROP_POS_FRAMES, random_frame)
98
-
99
- ret, frame = cap.read()
100
- if not ret:
101
- raise Exception("Не удалось извлечь кадр")
102
-
103
- thumbnail_path = video_path.replace('.mp4', '_thumb.jpg') # Предполагаем, что видео в формате .mp4
104
- cv2.imwrite(thumbnail_path, frame)
105
- cap.release()
106
  return thumbnail_path
107
  except Exception as e:
108
  logging.error(f"Ошибка генерации превью: {e}")
@@ -298,7 +295,7 @@ def video_feed():
298
  <div class="video-grid">
299
  {% for video in videos %}
300
  <a href="{{ url_for('video_page', video_id=video['id']) }}" class="video-item">
301
- <img src="https://huggingface.co/datasets/{{ repo_id }}/resolve/main/thumbnails/{{ video['thumbnail'] }}" alt="{{ video['title'] }}">
302
  <h2>{{ video['title'] }}</h2>
303
  <p>{{ video['description'] }}</p>
304
  <p>Загрузил: {{ video['uploader'] }} | {{ video['upload_date'] }}</p>
@@ -457,7 +454,7 @@ def profile():
457
  {% if user_videos %}
458
  {% for video in user_videos %}
459
  <div class="video-item">
460
- <img src="https://huggingface.co/datasets/{{ repo_id }}/resolve/main/thumbnails/{{ video['thumbnail'] }}" alt="{{ video['title'] }}">
461
  <h3>{{ video['title'] }}</h3>
462
  <p>{{ video['description'] }}</p>
463
  <p>{{ video['upload_date'] }}</p>
@@ -518,7 +515,7 @@ def upload_video():
518
  )
519
  os.remove(thumbnail_path)
520
  else:
521
- thumbnail_filename = "default_thumb.jpg" # Запасной вариант, если превью не удалось создать
522
 
523
  # Загрузка видео на Hugging Face
524
  api = HfApi()
 
4
  import logging
5
  import threading
6
  import time
7
+ import uuid
8
+ import random
9
  from datetime import datetime
10
  from huggingface_hub import HfApi, hf_hub_download
11
  from werkzeug.utils import secure_filename
12
+ import ffmpeg
 
 
13
 
14
  app = Flask(__name__)
15
  app.secret_key = 'supersecretkey' # Замените на безопасный ключ в продакшене
 
88
  # Генерация случайного кадра из видео
89
  def generate_thumbnail(video_path):
90
  try:
91
+ probe = ffmpeg.probe(video_path)
92
+ duration = float(probe['format']['duration'])
93
+ random_time = random.uniform(0, duration) # Случайное время в пределах длительности видео
94
+ thumbnail_filename = f"{uuid.uuid4()}.jpg"
95
+ thumbnail_path = os.path.join('uploads', thumbnail_filename)
96
+ (
97
+ ffmpeg
98
+ .input(video_path, ss=random_time)
99
+ .output(thumbnail_path, vframes=1, format='image2', q:v=2)
100
+ .overwrite_output()
101
+ .run(quiet=True)
102
+ )
 
 
 
103
  return thumbnail_path
104
  except Exception as e:
105
  logging.error(f"Ошибка генерации превью: {e}")
 
295
  <div class="video-grid">
296
  {% for video in videos %}
297
  <a href="{{ url_for('video_page', video_id=video['id']) }}" class="video-item">
298
+ <img src="https://huggingface.co/datasets/{{ repo_id }}/resolve/main/thumbnails/{{ video.get('thumbnail', 'default_thumb.jpg') }}" alt="{{ video['title'] }}">
299
  <h2>{{ video['title'] }}</h2>
300
  <p>{{ video['description'] }}</p>
301
  <p>Загрузил: {{ video['uploader'] }} | {{ video['upload_date'] }}</p>
 
454
  {% if user_videos %}
455
  {% for video in user_videos %}
456
  <div class="video-item">
457
+ <img src="https://huggingface.co/datasets/{{ repo_id }}/resolve/main/thumbnails/{{ video.get('thumbnail', 'default_thumb.jpg') }}" alt="{{ video['title'] }}">
458
  <h3>{{ video['title'] }}</h3>
459
  <p>{{ video['description'] }}</p>
460
  <p>{{ video['upload_date'] }}</p>
 
515
  )
516
  os.remove(thumbnail_path)
517
  else:
518
+ thumbnail_filename = "default_thumb.jpg" # Запасной вариант
519
 
520
  # Загрузка видео на Hugging Face
521
  api = HfApi()