Alberto Balbo 93deacf418 Rinominato progetto da "Ganimede" a "Converter"
- Rinominato file soluzione da `Ganimede.sln` a `Converter.sln`
- Rinominato file progetto da `Ganimede.csproj` a `Converter.csproj`
- Aggiornato namespace da `Ganimede.Properties` a `Converter.Properties`
- Aggiunte proprietà `DefaultExtractionMode` e `SingleFrameUseSubfolder`
- Aggiunto file `README.md` con documentazione dettagliata
- Mantenuta struttura del progetto con aggiornamenti per il nuovo nome
2025-10-21 10:00:55 +02:00
2025-08-17 17:19:14 +02:00

Ganimede - Estrattore Frame Video

.NET 8 WPF FFmpeg

Ganimede è un'applicazione desktop Windows avanzata per l'estrazione automatica di frame da file video. Progettata con WPF e .NET 8, offre un'interfaccia moderna, gestione coda multi-video e configurazioni personalizzabili per ogni job.


📋 Indice


🚀 Caratteristiche Principali

Funzionalità Core

  • Estrazione batch multi-video con gestione coda intelligente
  • 🎯 Tre modalità di estrazione: Completa, Singolo Frame e Auto (con analisi euristica)
  • 🔧 Configurazione granulare per singolo job o globale
  • 📁 Importazione massiva da cartella con filtri automatici
  • 🖼️ Anteprima thumbnails in tempo reale
  • ⚙️ 6 pattern di naming configurabili con prefissi custom
  • 🔄 Gestione sovrascrittura (Chiedi, Salta, Sovrascrivi)
  • 📐 Ridimensionamento frame con 5 preset (da 320x180 a Full HD)
  • 📊 Monitoraggio avanzato: progressi in tempo reale, statistiche, log dettagliati
  • 🎨 Interfaccia moderna dark-themed con feedback visivi immediati

Modalità di Estrazione Intelligente

🔹 Modalità Completa (Full)

Estrae tutti i frame del video in immagini PNG sequenziali.

  • Ideale per: analisi frame-by-frame, time-lapse, dataset ML, animazioni
  • Output: 1 immagine PNG per ogni frame (es. video 60fps 10s = 600 immagini)

🔹 Modalità Singolo Frame (SingleFrame)

Estrae un unico frame rappresentativo dal centro del video.

  • Ideale per: thumbnails, anteprime, screenshot rapidi
  • Output: 1 singola immagine PNG
  • Ottimizzazione: può evitare la creazione di sottocartelle (configurabile)

🔹 Modalità Auto (Auto)

Analizza il video tramite euristica intelligente e decide automaticamente:

  • Criteri di decisione:
    • ✓ Video ≤ 2 secondi → SingleFrame
    • ✓ Video 3-45s con bitrate basso → SingleFrame (possibile video statico)
    • ✓ Altri casi → Full extraction
  • Ideale per: processamento batch di video eterogenei
  • Feedback: suggerisce la modalità anche se Full è selezionato

💻 Requisiti di Sistema

Software

  • Sistema Operativo: Windows 10/11 (x64)
  • Runtime: .NET 8 Desktop Runtime (Download)
  • FFmpeg: Versione 4.4+ (binari ffmpeg.exe e ffprobe.exe)

Hardware Minimo

  • CPU: Dual-core 2.0 GHz
  • RAM: 4 GB
  • Spazio Disco: 100 MB (applicazione) + spazio per frame estratti

Formati Video Supportati

MP4, AVI, MOV, MKV, WMV, FLV, WEBM


📦 Installazione

1. Installare .NET 8 Runtime

# Verifica versione installata
dotnet --list-runtimes

# Se non installato, scarica da:
# https://dotnet.microsoft.com/download/dotnet/8.0

2. Installare FFmpeg

Opzione A: Installazione Manuale

  1. Scarica FFmpeg da ffmpeg.org o gyan.dev
  2. Estrai l'archivio (es. in C:\ffmpeg\)
  3. Copia i binari da bin\:
    • ffmpeg.exe
    • ffprobe.exe
  4. Configura il percorso in Ganimede → ⚙ ImpostazioniConfigurazione FFmpeg

Opzione B: Installazione con Chocolatey

choco install ffmpeg

Opzione C: Variabile PATH (Opzionale)

Aggiungi la cartella bin di FFmpeg alla variabile d'ambiente PATH per il rilevamento automatico.

3. Avviare Ganimede

# Dalla directory di build
cd Ganimede\bin\Release\net8.0-windows
.\Ganimede.exe

🎯 Guida Rapida

Workflow Base (5 minuti)

  1. Seleziona cartella output

    Toolbar → 🗂 Seleziona Cartella Output → Scegli destinazione
    
  2. Aggiungi video

    Toolbar →  Aggiungi Video → Seleziona uno o più file
    

    Oppure:

    Toolbar → 📁 Importa Cartella → Importa tutti i video dalla cartella
    
  3. Avvia elaborazione

    Toolbar → ▶ Avvia Coda
    
  4. Monitora progressi

    • Barra di avanzamento per ogni job
    • Statistiche in tempo reale nella barra di stato
    • Anteprima thumbnails nel pannello destro

Workflow Avanzato

  1. Seleziona video (checkbox nei job)
  2. Configura selezionati
    Toolbar → ⚙ Configura Selezionati → Imposta parametri custom
    
  3. Avvia coda e monitora l'elaborazione differenziata

🖥️ Interfaccia Utente

Toolbar Principale

Pulsante Funzione Shortcut
Aggiungi Video Apre dialog selezione file multipli -
📁 Importa Cartella Importa tutti i video da una cartella -
🗂 Seleziona Cartella Output Imposta cartella destinazione globale -
⚙ Configura Selezionati Apre finestra configurazione job selezionati Solo se ≥1 selezionato
▶ Avvia Coda Inizia elaborazione job in stato "Pending" Disabilitato durante elaborazione
⏹ Ferma Interrompe elaborazione corrente Solo durante elaborazione
🧹 Pulisci Completati Rimuove job completati/falliti/cancellati -
🗑 Pulisci Tutto Svuota l'intera coda (conferma richiesta) -
⚙ Impostazioni Apre finestra impostazioni globali -

Pannello Coda Job

Ogni job mostra:

  • ☑️ Checkbox: Selezione per configurazione batch
  • 📹 Nome video + percentuale progresso
  • 📊 Barra di avanzamento: Progresso in tempo reale
  • 📝 Stato: Messaggio dettagliato operazione corrente
  • 📋 Configurazione:
    • 📁 Cartella output (Default o custom)
    • 📐 Dimensione frame (Original, 320x180, etc.)
    • 🔄 Modalità sovrascrittura (Ask, Skip, Overwrite)
    • 🏷 Pattern naming (VideoNameProgressive, etc.)
    • 🎯 Modalità estrazione (Full, SingleFrame, Auto)
  • Rimuovi: Elimina job dalla coda

Pannello Laterale Destro

Impostazioni Globali

  • Cartella Output: Path globale per nuovi job (modificabile)
  • Anteprima Thumbnails:
    • Mostra fino a 60 frame dell'ultimo video completato
    • Scroll verticale per navigare
    • Dimensioni: 90x52px per thumbnail

Barra di Stato

Informazioni in tempo reale:

Pronto | Job: In attesa: 3 | In corso: 1 | Completati: 5 | Falliti: 0

🎯 Modalità di Estrazione

Comparazione Modalità

Caratteristica Full SingleFrame Auto
Frame estratti Tutti 1 (centrale) Variabile
Analisi preliminare
Tempo elaborazione Alto Minimo Variabile
Uso disco Alto Minimo Variabile
Sottocartelle Sempre* Opzionale* Automatico
Caso d'uso Analisi dettagliata Thumbnails Batch misti

*Configurabile nelle impostazioni globali

Algoritmo Euristica Modalità Auto

1. Analizza metadata video (FFProbe)
   ├─ Durata
   ├─ Framerate
   ├─ Bitrate
   └─ Risoluzione

2. Applica regole euristiche:
   ├─ SE durata ≤ 2s 
   │  └─> SUGGERIMENTO: SingleFrame
   ├─ SE 3s < durata < 45s AND bitrate < (pixels * 0.3)
   │  └─> SUGGERIMENTO: SingleFrame (video statico probabile)
   └─ ALTRIMENTI
      └─> SUGGERIMENTO: Full

3. Applica suggerimento e processa

Configurazione Sottocartelle (SingleFrame)

Comportamento predefinito:

  • Full/Auto→Full: Crea sempre sottocartella OutputFolder\VideoName\
  • SingleFrame: Opzionale (impostazione SingleFrameUseSubfolder)

Esempio Output:

✓ Full extraction (CreateSubfolder=true):
  C:\Output\Video1\frame_000001.png
  C:\Output\Video1\frame_000002.png
  ...

✓ Single Frame (SingleFrameUseSubfolder=false):
  C:\Output\Video1_000001.png

✓ Single Frame (SingleFrameUseSubfolder=true):
  C:\Output\Video1\Video1_000001.png

⚙️ Configurazione Avanzata dei Job

Finestra "Configura Selezionati"

Accessibile tramite ⚙ Configura Selezionati dopo aver selezionato ≥1 job.

Sezione 1: Cartella di Output (Override)

  • ☑️ Usa cartella di output personalizzata
    • Sovrascrive la cartella globale per i job selezionati
    • Include pulsante Sfoglia per selezione visuale
  • ☑️ Crea sottocartella per ogni video
    • Se abilitato: OutputFolder\VideoName\frames...
    • Se disabilitato: OutputFolder\frames... (rischio collisione!)

Sezione 2: Modalità di Estrazione

○ Completa    → Estrae tutti i frame
○ Singolo Frame → Estrae solo frame centrale
○ Auto        → Decide automaticamente via euristica

Sezione 3: Pattern Nome File (Override)

  • ☑️ Usa pattern di naming personalizzato
  • Dropdown pattern: 6 opzioni disponibili (vedi Pattern di Naming)
  • Prefisso Custom: Campo testo per CustomProgressive pattern
  • Anteprima Live: Mostra esempio filename in tempo reale

Sezione 4: Modalità Sovrascrittura (Override)

  • ☑️ Usa comportamento di sovrascrittura personalizzato
  • Opzioni:
    • Chiedi: Dialog conferma per ogni job con file esistenti
    • Salta: Ignora frame già esistenti (velocizza re-run)
    • Sovrascrivi: Forza sovrascrittura senza chiedere

Sezione 5: Ridimensionamento Frame (Override)

  • ☑️ Usa dimensione frame personalizzata
  • Preset disponibili:
    • Risoluzione Originale (default)
    • 320x180 (Veloce, ~56KB/frame)
    • 640x360 (Media, ~150KB/frame)
    • 1280x720 (HD, ~400KB/frame)
    • 1920x1080 (Full HD, ~800KB/frame)

Nota: Ridimensionamenti maggiori aumentano tempo elaborazione e uso CPU.


🏷️ Pattern di Naming

Pattern Disponibili

1. VideoNameProgressive (Default)

Formato: {NomeVideo}_{Progressivo6Cifre}.png
Esempio: Video1_000001.png, Video1_000002.png, ...
Uso: Sequenze ordinate identificabili

2. FrameProgressive

Formato: frame_{Progressivo6Cifre}.png
Esempio: frame_000001.png, frame_000002.png, ...
Uso: Naming generico, compatibilità universal

3. VideoNameTimestamp

Formato: {NomeVideo}_{TimestampMs}.png
Esempio: Video1_000000ms.png, Video1_033ms.png, ...
Uso: Ricostruzione timeline esatta, sincronizzazione

4. CustomProgressive

Formato: {PrefissoCustom}_{Progressivo6Cifre}.png
Esempio: dataset_000001.png, train_000001.png, ...
Uso: Organizzazione dataset ML, batch naming

5. TimestampOnly

Formato: {Ore}h{Minuti}m{Secondi}s{Millisecondi}ms.png
Esempio: 00h00m00s000ms.png, 00h12m34s567ms.png, ...
Uso: Timeline pura, analisi temporale

6. VideoNameFrameProgressive

Formato: {NomeVideo}_frame_{Progressivo6Cifre}.png
Esempio: Video1_frame_000001.png, Video1_frame_000002.png, ...
Uso: Massima chiarezza, identificazione immediata

Configurazione Prefisso Custom

Nel pattern CustomProgressive, il prefisso si configura:

  • Globale: Impostazioni → Naming File → Prefisso Custom Predefinito
  • Per Job: Configura Selezionati → Pattern Nome File → Prefisso

Caratteri validi: a-z A-Z 0-9 _ -


🌐 Impostazioni Globali

Accesso: ⚙ Impostazioni (Toolbar)

Sezione: Configurazione FFmpeg

Cartella Binari FFmpeg

  • Path: Percorso assoluto alla cartella contenente ffmpeg.exe e ffprobe.exe
  • Validazione: Controllo esistenza binari in tempo reale
  • Fallback: Se path vuoto, cerca FFmpeg nel PATH di sistema
  • Status Indicator:
    • Verde: Binari trovati e validi
    • Rosso: Binari mancanti o non validi

Esempio path validi:

C:\ffmpeg\bin
C:\Program Files\FFmpeg\bin
D:\Tools\ffmpeg-6.0\bin

Sezione: Output

Crea sottocartella per ogni video

  • Default: Abilitato
  • Comportamento:
    • ON: C:\Output\Video1\frames...
    • OFF: C:\Output\frames... (tutti i video nella stessa cartella)
  • Nota: Disabilitare aumenta rischio collisione nomi file

Cartella Output Predefinita

  • Path: Cartella globale per nuovi job aggiunti
  • Persistenza: Salvata in Settings.Default.LastOutputFolder
  • Override: Configurabile per job singoli

Sezione: Impostazioni di Elaborazione

Dimensione Frame Predefinita

  • Preset: 5 opzioni (vedi Ridimensionamento)
  • Default: Dimensione Originale
  • Impatto performance:
    • Original: 0% overhead
    • 320x180: +10% tempo
    • 1920x1080: +40% tempo (resize algoritmico)

Comportamento Sovrascrittura Predefinito

  • Opzioni: Chiedi | Salta | Sovrascrivi
  • Default: Chiedi
  • Uso consigliato:
    • Chiedi: Primo run, prudenza
    • Salta: Re-run incrementali, resume jobs
    • Sovrascrivi: Ri-elaborazione forzata, pulizia output

Modalità di Estrazione Predefinita

  • Opzioni: Completa | Singolo Frame | Auto
  • Default: Completa
  • Impatto: Si applica a tutti i nuovi job aggiunti

Singolo Frame: salvataggio

  • ☑️ Crea sottocartella anche per job a singolo frame
  • Default: Disabilitato (salva diretto in cartella output)
  • Se abilitato: Crea OutputFolder\VideoName\frame.png anche per SingleFrame

Sezione: Naming File

Pattern di Naming Predefinito

  • Dropdown: 6 pattern disponibili
  • Preview Live: Mostra esempio aggiornato in tempo reale
  • Apply: Si applica a tutti i nuovi job (job esistenti invariati)

Prefisso Custom Predefinito

  • Campo testo: Stringa alfanumerica (default: custom)
  • Uso: Pattern CustomProgressive
  • Anteprima dinamica: Aggiornamento preview pattern istantaneo

Esempio Anteprima:

Pattern: CustomProgressive
Prefisso: dataset
Preview: dataset_000001.png

📊 Gestione della Coda

Stati Job

Stato Icona Descrizione Azioni Disponibili
Pending In attesa di elaborazione Configura, Rimuovi, Avvia
Processing ▶️ Elaborazione in corso Ferma (cancel)
Completed Completato con successo Rimuovi, Pulisci
Failed Errore durante elaborazione Rimuovi, Pulisci
Cancelled Annullato dall'utente Rimuovi, Pulisci

Operazioni sulla Coda

▶ Avvia Coda

  • Elabora sequenzialmente tutti i job in stato Pending
  • Disabilita pulsante durante elaborazione
  • Continua finché coda vuota o Ferma premuto

⏹ Ferma

  • Cancella job corrente dopo il frame in elaborazione
  • Non interrompe immediatamente (attende completamento frame)
  • Job corrente passa in stato Cancelled

🧹 Pulisci Completati

  • Rimuove job in stato: Completed, Failed, Cancelled
  • Mantiene job Pending e Processing
  • Operazione istantanea senza conferma

🗑 Pulisci Tutto

  • Se nessun job in elaborazione:
    • Conferma → Svuota coda completamente
  • Se job in elaborazione:
    • Dialog tri-opzione:
      • : Ferma tutto e svuota
      • No: Rimuovi solo job non in elaborazione
      • Annulla: Annulla operazione

⚙ Configura Selezionati

  • Disponibile solo con ≥1 job selezionato (checkbox)
  • Applica configurazioni custom in batch
  • Job non selezionati rimangono invariati

Statistiche Coda (Barra di Stato)

Job: In attesa: 3 | In corso: 1 | Completati: 5 | Falliti: 0
  • In attesa: Count job Pending
  • In corso: Count job Processing (max 1)
  • Completati: Count job Completed
  • Falliti: Count job Failed

💡 Casi d'Uso Comuni

1. Creazione Dataset Machine Learning

Obiettivo: Estrarre 10.000 frame da 50 video per training CNN.

1. Importa Cartella → Seleziona cartella video
2. Configura Selezionati (seleziona tutti):
   - Modalità: Completa
   - Dimensione: 640x360 (Media)
   - Naming: CustomProgressive
   - Prefisso: train
   - Sovrascrittura: Sovrascrivi
3. Avvia Coda
4. Output: train_000001.png ... train_010000.png

Risultato: Dataset uniforme pronto per ingestion.

Obiettivo: Generare 1 thumbnail per ogni video in una libreria di 200 video.

1. Importa Cartella → Seleziona libreria video
2. Impostazioni → Modalità Estrazione: Singolo Frame
3. Impostazioni → Singolo Frame: Disabilita sottocartelle
4. Impostazioni → Dimensione: 320x180
5. Impostazioni → Naming: VideoNameProgressive
6. Avvia Coda
7. Output: Video1_000001.png, Video2_000001.png, ...

Risultato: 200 thumbnails in cartella unica, pronti per web gallery.

3. Time-Lapse Frame Extraction

Obiettivo: Estrarre tutti i frame da video timelapse per post-processing.

1. Aggiungi Video → Seleziona timelapse.mp4
2. Configura Selezionato:
   - Modalità: Completa
   - Dimensione: Original
   - Naming: VideoNameFrameProgressive
   - Sovrascrittura: Chiedi
3. Avvia Coda
4. Post-processing: import in DaVinci Resolve / After Effects

Risultato: Sequenza frame originali per grading/compositing.

4. Batch Eterogeneo (Screenshot + Sequenze)

Obiettivo: 10 video misti (documentari + clip brevi) → estrazione intelligente.

1. Importa Cartella → Seleziona 10 video
2. Configura Selezionati (seleziona tutti):
   - Modalità: Auto
   - Dimensione: 1280x720
   - Naming: VideoNameProgressive
3. Avvia Coda
4. Sistema analizza ogni video e:
   - Clip 3s staticità → 1 frame
   - Documentari 30min → full extraction

Risultato: Ottimizzazione automatica tempo/spazio.

5. Resume Job Interrotto

Obiettivo: Riprendere estrazione interrotta senza ri-elaborare frame esistenti.

1. (Job precedente interrotto, 1500/5000 frame estratti)
2. Configura Job:
   - Sovrascrittura: Salta
3. Avvia Coda
4. Sistema salta frame 1-1500, riprende da 1501

Risultato: Risparmio tempo, nessuna duplicazione.

6. Multi-Resolution Export

Obiettivo: Estrarre stessi frame in 3 risoluzioni (thumbnails, web, archivio).

1. Aggiungi Video → video.mp4 (3 volte nella coda)
2. Configura Job 1:
   - Output: C:\Output\thumbnails\
   - Dimensione: 320x180
3. Configura Job 2:
   - Output: C:\Output\web\
   - Dimensione: 1280x720
4. Configura Job 3:
   - Output: C:\Output\archive\
   - Dimensione: Original
5. Avvia Coda

Risultato: 3 set di frame ottimizzati per uso specifico.


🔧 Risoluzione Problemi

Problema: "FFmpeg not found"

Sintomi: Errore all'avvio elaborazione, log "FFmpeg binary not found".

Soluzioni:

  1. Verifica installazione:
    ffmpeg -version
    ffprobe -version
    
  2. Configura path manualmente:
    • Impostazioni → Configurazione FFmpeg → Sfoglia → Seleziona cartella bin
  3. Reinstalla FFmpeg:
    • Scarica build completa da gyan.dev
    • Estrai e configura path in Ganimede

Problema: Elaborazione lentissima

Cause comuni:

  • Ridimensionamento attivo (1920x1080 → overhead +40%)
  • Video ad altissima risoluzione (4K+)
  • HDD lento (frame scritti su disco meccanico)
  • CPU sottodimensionata

Soluzioni:

  • Usa dimensione frame 640x360 o inferiore
  • Salva output su SSD
  • Processa pochi video alla volta (ridurre I/O concorrente)
  • Modalità Auto o SingleFrame per video brevi

Problema: "Access Denied" durante salvataggio frame

Cause:

  • Cartella output in directory protetta (C:\Program Files, etc.)
  • File aperti in altro programma (viewer immagini, etc.)
  • Permessi insufficienti

Soluzioni:

  • Seleziona cartella output in Documents o Desktop
  • Chiudi programmi che potrebbero bloccare file
  • Esegui Ganimede come amministratore (click destro → Esegui come amministratore)

Problema: Frame estratti sono neri/corrotti

Cause:

  • Codec video non supportato da FFmpeg build
  • Video corrotto nel filesystem
  • Timestamp seeking errato

Soluzioni:

  • Aggiorna FFmpeg all'ultima versione
  • Verifica integrità video (riproduci in VLC)
  • Prova pattern naming VideoNameTimestamp (seeking alternativo)

Problema: Applicazione crash all'avvio

Cause:

  • .NET 8 Runtime non installato
  • File di configurazione corrotti
  • Dipendenze mancanti

Soluzioni:

  1. Verifica .NET:
    dotnet --list-runtimes
    # Cerca "Microsoft.WindowsDesktop.App 8.0.x"
    
  2. Reset configurazione:
    # Elimina file settings (path utente)
    del %LOCALAPPDATA%\Ganimede\user.config
    
  3. Reinstalla applicazione

Problema: Thumbnails non vengono mostrati

Causa: Limite 60 thumbnails, o cartella output vuota.

Verifica:

  • Controlla che job sia in stato Completed
  • Verifica esistenza file PNG in cartella output
  • Thumbnails mostrano ultimi 60 frame del job completato

🏗️ Architettura Tecnica

Stack Tecnologico

Frontend:   WPF (Windows Presentation Foundation)
Runtime:    .NET 8 (Windows Desktop)
UI Pattern: MVVM (Model-View-ViewModel)
Encoding:   FFMpegCore (wrapper .NET per FFmpeg)
Storage:    Settings.settings (ApplicationSettings)

Componenti Principali

1. MainWindow.xaml / MainWindow.xaml.cs

  • Controller principale UI
  • Gestione toolbar, coda visuale, thumbnails
  • Event handlers per interazioni utente
  • Binding a VideoProcessingService via ObservableCollection

2. VideoProcessingService.cs

  • Core business logic
  • Gestione coda asincrona (async/await)
  • Processamento sequenziale job con SemaphoreSlim
  • Eventi: JobCompleted, JobFailed, ProcessingStarted, ProcessingStopped
  • Integrazione FFMpegCore per extraction

3. VideoJob.cs (Model)

  • Entità dati job
  • Implementa INotifyPropertyChanged per binding real-time
  • Proprietà:
    • Config base: VideoPath, OutputFolder, Status, Progress
    • Custom overrides: CustomOutputFolder, CustomFrameSize, etc.
    • Modalità: ExtractionMode, SuggestedExtractionMode
  • Display properties per UI (OutputFolderDisplay, FrameSizeDisplay, etc.)

4. NamingHelper.cs

  • Utility statica per generazione nomi file
  • Implementazione 6 pattern naming
  • Metodi helper: GetPatternDescription(), GetPatternExample()

5. JobConfigWindow.xaml / JobConfigWindow.xaml.cs

  • Dialog configurazione batch job selezionati
  • Validazione input real-time
  • Preview pattern naming dinamica

6. SettingsWindow.xaml / SettingsWindow.xaml.cs

  • Gestione impostazioni globali persistenti
  • Integrazione Properties.Settings (.NET Settings Framework)
  • Validazione path FFmpeg

7. StatusColorConverter.cs

  • Value converter XAML per colori stati job
  • Mapping: Pending→Grigio, Processing→Blu, Completed→Verde, etc.

Flusso Elaborazione

[MainWindow] Utente preme "Avvia Coda"
     ↓
[VideoProcessingService] StartProcessingAsync()
     ↓
[Loop] GetNextPendingJob()
     ↓
[ProcessJobAsync] Per ogni job:
     ├─ FFProbe.AnalyseAsync() → Metadata video
     ├─ Euristica Auto (se ExtractionMode = Auto)
     ├─ Directory.CreateDirectory() → Crea output folder
     ├─ SE SingleFrame:
     │    └─ ExtractFrameAsync() → 1 frame centrale
     ├─ SE Full:
     │    └─ Loop ExtractFrameAsync() → Tutti i frame
     ├─ Aggiornamento Progress ogni 10 frame
     └─ JobCompleted/JobFailed event
     ↓
[MainWindow] Riceve evento → Aggiorna UI, carica thumbnails

Threading & Async

  • UI Thread: WPF Dispatcher per binding updates
  • Background Thread: Task.Run / async/await per FFmpeg calls
  • Sincronizzazione: SemaphoreSlim(1,1) per processing seriale
  • Cancellation: CancellationTokenSource per stop graceful

Persistenza Dati

// Settings salvate in ApplicationData utente
Settings.Default.LastOutputFolder      // string
Settings.Default.LastVideoPath          // string
Settings.Default.FFmpegBinFolder        // string
Settings.Default.FrameSize              // string (es. "1280,720")
Settings.Default.DefaultOverwriteMode   // string (enum serializzato)
Settings.Default.DefaultNamingPattern   // string (enum serializzato)
Settings.Default.DefaultExtractionMode  // string (enum serializzato)
Settings.Default.CreateSubfolder        // bool
Settings.Default.SingleFrameUseSubfolder // bool
Settings.Default.DefaultCustomPrefix    // string

// Percorso file (Windows):
%LOCALAPPDATA%\Ganimede\user.config

Dipendenze NuGet

<PackageReference Include="FFMpegCore" Version="5.x" />
<PackageReference Include="System.Windows.Forms" Version="8.x" />

📄 Licenza

Questo progetto è distribuito con licenza MIT. Consulta il file LICENSE per i dettagli completi.


👤 Autore

Ganimede Team
📧 Contatto: [Inserire email/GitHub]


🙏 Ringraziamenti

  • FFmpeg Team per il potente framework multimediale open-source
  • FFMpegCore per il wrapper .NET elegante e performante
  • Community .NET per supporto e feedback

🔄 Versioni e Changelog

v1.0.0 (2025-01-XX)

  • Release iniziale
  • 3 modalità di estrazione (Full, SingleFrame, Auto)
  • 6 pattern naming configurabili
  • Configurazione granulare per job
  • UI dark-themed moderna
  • Sistema coda con stati avanzati
  • Thumbnails preview real-time

🚀 Buon Lavoro con Ganimede!

Per segnalazioni bug, richieste feature o contributi, apri una issue nel repository GitHub del progetto.

Description
Programma per generare fotogrammi da uno o più file video dati in input
Readme 314 MiB
1.0.0.0 Latest
2025-12-08 18:55:49 +01:00
Languages
C# 100%