Confronta due file video per scoprire quale ha la migliore qualità


30

Supponiamo di avere lo stesso materiale video codificato in due (o più) file. Vorrei eseguire alcune utilità su di loro che hanno chiaramente sottolineato quale file è "migliore" in termini di qualità. "Fondamentalmente" significa che vorrei ottenere un rapporto che confronta diversi aspetti (ad esempio risoluzione video, bitrate video, frequenza di campionamento audio, bitrate audio, ecc. Ecc.) Uno per uno, quindi un punteggio integrale che rappresenta tutti di loro.

Riguarda la funzionalità, ma affinché tale utilità sia effettivamente utilizzabile, dovrebbe essere open source e da riga di comando.


Per iniziare a raccogliere alcune informazioni correlate (non proprio una soluzione per criteri sopra), c'è repo.or.cz/w/mplayer.git/blob/HEAD:/TOOLS/psnr-video.sh Ecco roba "like a pro": la compressione .ru / video / quality_measure /… . Ma non è open-source e confronta "originale" e "copia", non solo 2 file imparziali.
pfalcon,

Risposte:


88

Lavoro nella ricerca sulla qualità dei video ed è difficile dare una risposta semplice alla tua domanda. Quello che vuoi è un programma che ti dia un punteggio medio di opinione (MOS) di un video, cioè un numero compreso tra 1 e 5 o tra 0 e 100, che corrisponde alla qualità percepita da un essere umano.

Perché non puoi semplicemente confrontare bitrate / risoluzione / ecc.

Il solo confronto della risoluzione video non dirà nulla della qualità. In effetti, potrebbe essere completamente fuorviante. Un filmato a 1080p con dimensioni di 700 MB potrebbe apparire peggiore di un video a 720p a 700 MB, perché per il primo il bitrate è troppo basso, il che introduce tutti i tipi di artefatti da compressione.

Lo stesso vale per il confronto di bitrate con frame frame simili, dato che encoder diversi possono effettivamente offrire una qualità migliore a bitrate inferiore, o viceversa. Ad esempio, un rip da 720 MB da 700 MB prodotto con XviD avrà un aspetto peggiore di uno strappo da 700 MB prodotto con x264, poiché quest'ultimo è molto più efficiente.

Dovresti anche definire come un "punteggio integrale" finale (il MOS) è composto dai singoli fattori di qualità. Questo dipende fortemente da diverse cose, tra cui ma non limitato a:

  • il tipo di video che stai confrontando (cartoni animati, film, notizie, ecc.)
  • la loro lunghezza
  • il loro pubblico di visualizzazione
  • la loro dimensione del telaio originale
  • la loro "qualità" originale prima che venissero codificati

Non stiamo nemmeno parlando di come gli umani percepirebbero i video. Supponiamo che tu abbia un amico che sta guardando film perché gode di dettagli nitidi e alta risoluzione di movimento. Sarebbero molto più critici quando vedono uno squarcio di bassa qualità rispetto a un amico che sta solo guardando film per il loro contenuto . Probabilmente non gli interesserebbe così tanto la qualità, purché il film sia divertente o divertente.

Esistono diversi tipi di metriche sulla qualità del video!

Consentitemi di darvi un elenco di ciò che penso sia più comunemente usato per la valutazione di base della qualità video oggi. Esistono diverse metriche sulla qualità del video, che possono essere classificate in base al tipo di informazioni utilizzate per determinare la qualità. In linea di principio e molto semplicemente, si distingue tra i seguenti:

  • Metriche senza riferimento : hanno solo un video come input e producono un punteggio di qualità. Nel tuo caso stai cercando una metrica senza riferimento , perché spesso non hai nemmeno il video originale. Tale metrica prenderà un video e produrrà un punteggio di qualità. Ecco alcuni esempi di problemi rilevati da una metrica NR (ad es. Sfocatura).

  • Metriche a riferimento completo : hanno due input, uno è il video di input originale e l'altro è il video codificato. Ad esempio, potresti prendere un film in DVD, quindi creare due strappi da esso e utilizzare una metrica di riferimento completo per stimare la perdita di qualità tra il film in DVD originale (ovvero il video MPEG-2 sul disco) e i tuoi strappi. Questo richiederà molto tempo per essere calcolato, ma è più preciso.

Le metriche di cui sopra esaminano la qualità della codifica video, ma ci sono anche metriche che incorporano problemi come i tempi di caricamento iniziale e gli eventi di stallo durante lo streaming video (ad es. ITU-T P.1203 ).

Quale software posso usare?

Ecco un elenco di strumenti pronti all'uso che è possibile utilizzare per testare alcune metriche (alcune sono solo per Windows):

Ora quali metriche ci sono?

PSNR, PSNR-HVS e PSNR-HVS-M

Per i principianti, il PSNR (Peak Signal-to-Noise Ratio) è un metodo molto semplice da usare ma un po 'scarso per valutare la qualità del video. Funziona relativamente bene anche se per la maggior parte delle applicazioni, ma non fornisce una buona stima di come gli umani percepirebbero la qualità.

Il PSNR può essere calcolato fotogramma per fotogramma, quindi ad esempio si dovrebbe calcolare la media del PSNR di un'intera sequenza video per ottenere il punteggio finale. PSNR superiore è meglio.

PSNR-HVS e PSNR-HVS-M sono estensioni di PSNR che cercano di emulare la percezione visiva umana, quindi dovrebbero essere più precisi. VQMT e MSU possono calcolare PSNR, PSNR-HVS e PSNR-HVS-M tra due video.

SSIM, MS-SSIM

La somiglianza strutturale (SSIM) è facile da calcolare quanto la PSNR e offre risultati più accurati, ma comunque fotogramma per fotogramma. Alcune implementazioni sono disponibili nel collegamento Wikipedia oppure è possibile utilizzare VQMT o MSU . Questi strumenti includono anche MS-SSIM, che offre risultati migliori (cioè più rappresentativi) rispetto a SSIM, nonché alcuni altri derivati.

I risultati dovrebbero essere simili al PSNR. Ancora una volta, è necessario confrontare un riferimento a un video elaborato affinché funzioni, ed entrambi i video dovrebbero avere le stesse dimensioni.

VMAF

Valutazione multi-metodo video Fusion di Netflix è un insieme di strumenti per calcolare la qualità del video in base ad alcune metriche esistenti, che vengono poi fuse dai metodi di apprendimento automatico in un punteggio finale compreso tra 0 e 100. Netflix ha spiegato tutto qui :

[VMAF] prevede la qualità soggettiva combinando più metriche di qualità elementare. La logica di base è che ogni metrica elementare può avere i suoi punti di forza e di debolezza rispetto alle caratteristiche del contenuto sorgente, al tipo di artefatti e al grado di distorsione. Unendo le metriche elementari in una metrica finale utilizzando un algoritmo di apprendimento automatico - nel nostro caso, un regressore Support Vector Machine (SVM) - che assegna pesi a ciascuna metrica elementare, la metrica finale potrebbe preservare tutti i punti di forza delle singole metriche e fornire un punteggio finale più accurato.

È inoltre possibile utilizzare ffmpegper calcolare i punteggi VMAF .

VQM

La metrica della qualità video è stata convalidata nel gruppo di esperti di qualità video (VQEG) ed è un ottimo algoritmo di riferimento completo. Puoi scaricare VQM gratuitamente o utilizzare l'implementazione da MSU.

Quando ti registri e scarichi, desideri utilizzare il modello generale NTIA o il modello di qualità video con ritardo fotogramma variabile .

Altre metriche

  • PEVQ è una metrica di riferimento completo standardizzata secondo ITU-T J.246. Mira a segnali multimediali, ma non a video HD.
  • VQuad-HD è un'altra metrica a riferimento completo standardizzata come ITU-T J.341. Dal momento che è più recente, è più adatto per i video HD.

Entrambe sono soluzioni commerciali e non troverai un software da scaricare per loro.

Esistono anche alcuni standard ITU su metriche senza riferimento, come ITU-T P.1201 e ITU-T P.1202 , che funzionano con i parametri del flusso di bit per lo streaming IPTV. ITU-T P.1203 può essere utilizzato per casi di streaming adattivo.


Sommario

Se cerchi solo di confrontare semplici criteri oggettivamente misurabili come:

  • Dimensione della cornice
  • Bit rate
  • Fotogrammi al secondo
  • Risoluzione video

... una semplice chiamata a ffmpeg -idovrebbe darti tutti i dettagli di cui hai bisogno all'inizio. Dai anche un'occhiata -vstatsall'opzione. È quindi possibile riassumere questo in un foglio di calcolo. Si noti che quando si codificano i video, x264ad esempio, si registrano elementi come PSNR direttamente su un file, se necessario, quindi è possibile utilizzare questi valori in un secondo momento.

Per quanto riguarda il modo in cui valutare questi criteri, dovresti probabilmente enfatizzare il bit rate, ma solo se sai che il codec è lo stesso. Si potrebbe generalmente dire che quando entrambi i video usano x264, quello con bitrate più alto è migliore. Ancora più in generale, dovresti scegliere una risoluzione inferiore quando hai due video con lo stesso bitrate, poiché il degrado dovuto all'upscaling non è così grave come il degrado dovuto al bitrate basso.

Non è possibile confrontare diversi codec in base alla loro velocità in bit a meno che non si sappia di più sul contenuto e sulle singole impostazioni di codifica. Anche la frequenza dei fotogrammi è una cosa molto soggettiva e dovrebbe essere conteggiata nelle misurazioni se è ben al di sotto di 25 Hz.

Per riassumere, enfatizza fortemente il bitrate se è l'unica cosa che hai. Non dimenticare di usare anche i tuoi occhi :)


Prima di tutto, come autore originale della domanda, mi dispiace non aver commentato prima. Il post è davvero fantastico e molto apprezzato. Sfortunatamente, non posso accettarlo come risposta alla mia domanda originale. Il motivo è: ho deliberatamente pubblicato la domanda qui e non su StackOverflow, perché volevo suggerire uno strumento esistente e pronto per l'uso. Sia una domanda su come scrivere tale strumento, la tua risposta sarebbe il vincitore assoluto. Ma scusa, non posso scrivere tutto ciò di cui ho bisogno da zero, quindi lascia che l'utente in me faccia domande e aspetti risposte (forse non ieri o oggi, forse in futuro ;-)
pfalcon,

1
Ottima risposta informativa. Anche se non è una risposta diretta, mi piace vedere le persone prendersi il loro tempo per scrivere questo materiale informativo. +1
SuperDuck,

1

Non sono a conoscenza di alcuno strumento che ti dia una raccomandazione o un punteggio finale, ma usando FFmpeg , puoi generare tutti i dettagli che hai elencato nella domanda.

Sulla riga di comando, ffmpeg -i elencherà le informazioni dal video. Da lì, puoi scrivere uno script per analizzare le informazioni e ponderarle come ritieni opportuno.


Grazie, sì, è quello che stavo facendo da un paio d'ore prima di decidere di chiedere se esiste uno strumento "magico" migliore ;-)
pfalcon,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.