Modern, hızlı ve kullanıcı dostu video frame ayırma uygulaması
| Özellik | Açıklama |
|---|---|
| 🎬 Tüm Frame'leri Ayır | Videonun her karesini JPEG olarak kaydet |
| ⏰ Zaman Aralığı | Belirli bir zaman dilimindeki frame'leri çıkar |
| 🎭 Sahne Değişimi Algılama | Histogram tabanlı sahne geçişlerini otomatik tespit et |
| ❌ İptal Desteği | İşlem sırasında istediğiniz zaman iptal edin |
- Glassmorphism tasarım - Yarı şeffaf, modern görünüm
- Gradient arka plan - Göz yormayan mor tonları
- Hover animasyonları - Etkileşimli butonlar
- Gerçek zamanlı ilerleme - Frame bazında progress takibi
- Doğrudan seek - Zaman aralığında gereksiz frame okumaz
- Optimized JPEG - %95 kaliteli sıkıştırma
- Unicode yol desteği - Türkçe karakter içeren klasörler sorunsuz çalışır
- Arka plan işleme - UI donmadan çalışır
- Python 3.10 veya üzeri
- Windows 10/11 (macOS ve Linux test edilmedi)
-
Depoyu klonlayın
git clone https://github.com/Yusufygc/FrameExtractor.git cd FrameExtractor -
Sanal ortam oluşturun (önerilen)
# Conda ile conda create -n FrameAyirici python=3.11 conda activate FrameAyirici # veya venv ile python -m venv venv venv\Scripts\activate
-
Bağımlılıkları yükleyin
pip install -r requirements.txt
-
Uygulamayı çalıştırın
python main.py
...butonuna tıklayarak video dosyası seçin- Desteklenen formatlar: MP4, AVI, MOV, MKV
- Boş bırakılırsa:
Masaüstü/[video_adı]_frames/oluşturulur
| Mod | Kullanım Durumu |
|---|---|
| Tüm Frameler | Her kareyi kaydetmek istediğinizde |
| Zaman Aralığı | Belirli bir sahneyi çıkarmak için |
| Sahne Değişimi | Otomatik sahne algılama için |
🚀 İşlemi Başlatbutonuna tıklayın- İlerlemeyi takip edin
- Gerekirse
❌ İptal Etile durdurun
Frame_Ayirici/
├── main.py # Uygulama giriş noktası
├── requirements.txt # Python bağımlılıkları
│
├── core/ # İş mantığı katmanı
│ ├── __init__.py
│ ├── protocols.py # SignalProtocol (DIP)
│ ├── video_processor.py # Ana işleyici
│ └── strategies/ # Strateji deseni
│ ├── __init__.py
│ ├── base.py # Soyut strateji
│ ├── all_frames.py # Tüm frameler
│ ├── time_range.py # Zaman aralığı
│ └── scene_change.py # Sahne algılama
│
├── ui/ # Kullanıcı arayüzü
│ ├── __init__.py
│ └── backend.py # Python-QML köprüsü
│
├── qml/ # QML arayüz dosyaları
│ ├── Main.qml # Ana pencere
│ └── components/ # Yeniden kullanılabilir bileşenler
│ ├── qmldir
│ ├── GlassCard.qml
│ ├── PrimaryButton.qml
│ ├── SecondaryButton.qml
│ ├── StyledTextField.qml
│ ├── StyledRadioButton.qml
│ ├── ProgressBar.qml
│ └── RangeSlider.qml
│
├── threads/ # Arka plan işleme
│ ├── __init__.py
│ └── worker.py # QThread işçisi
│
├── utils/ # Yardımcı fonksiyonlar
│ ├── __init__.py
│ └── formatters.py # Süre, boyut formatlama
│
└── styles/ # Tema yapılandırması
├── __init__.py
└── theme.py # Renk, boyut sabitleri
| Prensip | Uygulama |
|---|---|
| Single Responsibility | Her sınıf tek bir işe odaklı |
| Open/Closed | Yeni stratejiler kolayca eklenebilir |
| Dependency Inversion | SignalProtocol ile bağımlılık tersine çevrildi |
┌─────────────────┐ ┌───────────────────┐
│ QML Frontend │◄───►│ Backend (Python) │
└─────────────────┘ └─────────┬─────────┘
│
┌─────────────┴─────────────┐
│ │
┌─────▼─────┐ ┌──────▼──────┐
│ Worker │ │ VideoProc. │
│ (QThread) │─────────────►│ │
└───────────┘ └──────┬──────┘
│
┌────────────────────┼────────────────────┐
│ │ │
┌──────▼──────┐ ┌───────▼───────┐ ┌───────▼───────┐
│ AllFrames │ │ TimeRange │ │ SceneChange │
│ Strategy │ │ Strategy │ │ Strategy │
└─────────────┘ └───────────────┘ └───────────────┘
core/strategies/altında yeni dosya oluşturunExtractionStrategysınıfından türetinshould_save_frame()metodunu uygulayınvideo_processor.py'dekiSTRATEGIESsözlüğüne ekleyin
# core/strategies/my_strategy.py
from .base import ExtractionStrategy
class MyStrategy(ExtractionStrategy):
@property
def name(self) -> str:
return "My Custom Strategy"
def should_save_frame(self, frame, frame_index) -> bool:
# Özel mantığınız
return frame_index % 10 == 0 # Her 10. kare⭐ Beğendiyseniz yıldız vermeyi unutmayın!
