Update app.py
Browse files
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
|
| 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 |
-
|
| 92 |
-
|
| 93 |
-
|
| 94 |
-
|
| 95 |
-
|
| 96 |
-
|
| 97 |
-
|
| 98 |
-
|
| 99 |
-
|
| 100 |
-
|
| 101 |
-
|
| 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
|
| 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
|
| 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()
|