Che cos'è l'opzione "sameq" o "same_quant" in FFmpeg? Significa "stessa qualità"?


29

Spesso sameq, ad esempio , ho visto i comandi FFmpeg usando l' opzione

ffmpeg -i input.mp4 -sameq output.avi

Cosa significa questo? Significa "stessa qualità"? In caso contrario, cosa dovrei usare invece?

Risposte:


57

sameq non significa "stessa qualità"

Diverse risorse sul web promuovono l'uso dell'opzione sameqo same_quant, ma in sostanza sono sbagliate. L'uso sameqnon ti dà un risultato con la stessa qualità dell'input.
Non usarlo mai.

La fonte della confusione era una documentazione scritta male che implicava che l'uso di questa opzione offrisse la stessa qualità. Fortunatamente, l'opzione è stata rimossa.

Ecco cosa diceva la documentazione di FFmpeg :

Si noti che questa NON È STESSA QUALITÀ. Non utilizzare questa opzione se non sai di averne bisogno.

In realtà gli sviluppatori FFmpeg avevano cambiato il nome da sameqper same_quantsolo per assicurarsi che, e poi rimosso sameq/same_quant del tutto; nel senso che questa opzione non esiste negli ultimi FFmpeg, ma questo articolo è ancora utile per coloro che usano build FFmpeg precedenti.


Come funziona la compressione video?

Ora che abbiamo chiarito questo, entriamo in alcuni dettagli tecnici.

Per capire perché non funziona in modo affidabile, dobbiamo capire il concetto di cosa significa "qualità" per un codificatore video comune e cosa influenza la qualità. Perché un video ha un aspetto migliore dell'altro quando viene compresso con bit rate diversi? Cosa rende una conversione con perdita di dati e perché il video è più piccolo dell'originale dopo la codifica?

Quando si codifica il video, i dati di input vengono convertiti in una dimensione diversa applicando prima una trasformazione matematica a blocchi di pixel. Questa trasformazione, principalmente una trasformazione del coseno discreto , produce una matrice di numeri che descrivono, diciamo, un campo di 8 × 8 pixel nel video.

Quindi, i tuoi pixel 8 × 8 e la matrice corrispondente inizialmente apparirebbero così: 1

Immagine originale  

Ma questi sono troppi dati! Se vogliamo comprimere i video, possiamo effettivamente sbarazzarci dei numeri in basso a destra. Non spiegherò perché questo è esattamente, ma diciamo solo che i numeri in alto a sinistra sono più importanti nel descrivere un tale blocco. L'idea generale della trasformazione è sostanzialmente quella di mettere le cose importanti in alto a sinistra.

Per rimuovere i numeri in basso a destra possiamo renderli zero. Se qualcosa è "nulla", o semplicemente si ripete come 0s, non dovremo salvarlo e in questo modo risparmieremo spazio. Matematicamente, dobbiamo quantizzare questa prima matrice applicando un'altra matrice, una "matrice di quantizzazione".

Ciò si tradurrà in una matrice che ora contiene considerevolmente meno numeri e molti zeri:

Immagine compressa  

Il risultato di questo è che abbiamo trasformato la prima matrice di alta qualità con molti numeri in una matrice che ricorda ancora gli stessi pixel 8 × 8, ma con qualità inferiore perché ha meno numeri per descriverli. Se si confronta visivamente il blocco, sono simili, ma non sono più gli stessi.

Qui, la matrice di quantizzazione determina la qualità . Questo è importante. Possiamo usare matrici di quantificazione diverse per qualità diversa. Alcune matrici di quantizzazione lasciano quasi intatta la matrice originale, altre no. Più numeri rimuoviamo, peggiore sarà la qualità, ma più possiamo comprimere il video, perché in pratica possiamo "buttare via" gli zero qui.

Cosa c'entra questo sameq?

Supponiamo che codifichi un video e desideri impostare una determinata qualità. Come abbiamo già appreso, matrici di quantizzazione diverse portano a qualità diverse, quindi quando diciamo al nostro codificatore di usare la qualità x, selezionerà la matrice di quantizzazione appropriata yper ottenere quella qualità, qualunque essa sia. Il risultato è un video che è stato compresso utilizzando la ymatrice. 2

Ed ecco la parte interessante: sameqsignifica "stesso quantizzatore". Non "stessa qualità". Se hai una versione non recente di FFmpeg, puoi comunque trovarla in ffmpeg --help:

ffmpeg --help 2>&1 | grep sameq

Quindi, quando ora prendi quel video convertito e lo codifichi di nuovo, e applichi l' sameqopzione, FFmpeg selezionerà, semplicemente parlando, le stesse matrici di quantizzazione utilizzate per il video di input.

Questo in qualche modo funziona quando si utilizza esattamente lo stesso codec per input e output, ad esempio durante la conversione da un video XviD a un video XviD, ma si otterrà comunque una qualità peggiore. 3 Questo perché codificare qualcosa che è già codificato getterà via ancora più informazioni. Nell'esempio sopra, creeremo ancora più zero nella nostra matrice e il risultato sembrerà peggiore.

Esso non funziona in diversi codec video a tutti. Supponi di convertire un video con codifica XviD con x264. 4 Per questi due codec, le matrici di quantizzazione utilizzate internamente sono diverse: non hanno gli stessi coefficienti. Quindi questa opzione non ha nemmeno senso! Sfortunatamente, FFmpeg ti consente ancora di usarlo.

In conclusione: non utilizzare questa opzione a meno che non si sappia specificamente cosa si sta facendo. Se vuoi codificare il tuo video con un codec diverso, ma mantenere la qualità, dovrai sperimentare e impostare tu stesso la qualità. Verifica se il risultato è soddisfacente e, in caso contrario, imposta una qualità superiore. Questo è tutto ciò che puoi fare.

Infine, se vuoi leggere come mantenere la tua qualità durante la ricodifica, dai un'occhiata a questi post:


1) La matrice non corrisponde all'immagine qui, davvero. Questo è solo un esempio.
2) In realtà, oggigiorno, la maggior parte dei processi di codifica non utilizza solo una matrice. Quando si imposta un determinato bit rate, l'encoder utilizzerà matrici diverse per ottenere un bit rate medio al secondo. Allo stesso modo, quando si imposta una certa qualità, gli encoder moderni impiegano matrici diverse a seconda del contenuto. Questo perché alcuni contenuti sono "più facili" da comprimere rispetto ad altri e richiedono meno quantizzazione per ottenere lo stesso fattore di compressione.
3) Esempio: ffmpeg -i input.avi -sameq -c:v libxvid output.avi. Non usare questo. Per favore.
4) Esempio: ffmpeg -i input.avi -sameq -c:v libx264 output.mp4. Non usare neanche questo. Sono serio.


-sameql'opzione è stata deprecata e quindi rimossa da avconv
AzizSM il
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.