Perché un MP4 non si riproduce, e che cos'è davvero un contenitore
Un MP4 che non si riproduce è raramente corrotto. L'estensione nomina soltanto il contenitore, l'involucro che tiene insieme i flussi e i loro timestamp. Quello che va decodificato è il codec al suo interno, e lo stesso .mp4 può contenere H.264, che si riproduce su un telefono di dieci anni fa, oppure AV1, che un televisore di due anni fa non riesce nemmeno a sfiorare. Ecco perché un MP4 si riproduce e un altro no.
A qualsiasi file video si applicano due domande: in che scatola si trova, e come è compressa l'immagine. Cambiare la scatola di solito è gratis; cambiare la compressione non lo è mai.
Un contenitore è una scatola, un codec è l'immagine
| Contenitore | Codec video | Audio | Supporto |
|---|---|---|---|
| MP4 | H.264, H.265, qualche AV1 | AAC, MP3 | Ovunque |
| WebM | VP8, VP9, AV1 | Opus, Vorbis | Solo browser |
| MKV | Quasi qualsiasi cosa | AC-3, DTS, qualsiasi cosa | Riproduttori desktop, non i browser |
| MOV | H.264, H.265, ProRes | AAC, PCM | Apple, montaggio |
| AVI | DivX, Xvid, MJPEG | MP3, PCM | Vecchi sistemi Windows |
MKV è quello permissivo, ottimo per gli archivi e pessimo per la distribuzione: un MKV valido può contenere una combinazione che nessun browser aprirà. MOV e MP4 condividono gran parte della struttura, quindi passare dall'uno all'altro spesso significa solo riscrivere l'indice. Ispeziona il file:
input.mp4
Stream #0:0 Video h264 (High) 1920x1080 30 fps 4200 kb/s
Stream #0:1 Audio aac (LC) 48000 Hz stereo 128 kb/s
La parola dopo «Video» è quella che conta. La parola «mp4» non ti dice quasi nulla.
Quale codec si riproduce dove
| Codec | Bit a parità di qualità | Licenze | Supporto |
|---|---|---|---|
| H.264 (AVC) | Riferimento, diciamo 100% | Pool di brevetti, con licenza quasi ovunque | Universale |
| H.265 (HEVC) | dal 50 al 65% | Pool concorrenti, costosi, questione irrisolta | Apple sì, browser a macchia di leopardo |
| VP9 | Simile a H.265 | Senza royalty | Chrome, Firefox, Edge, Android |
| AV1 | dal 30 al 50% | Senza royalty | Browser attuali, hardware recente |
H.265 è tecnicamente valido e commercialmente scomodo, quindi il supporto si divide lungo le linee dei produttori più che lungo quelle tecniche. AV1 comprime meglio di tutti e codifica molto più lentamente, a volte di un ordine di grandezza, quindi si adatta ai video codificati una volta e guardati spesso. Per un pubblico sconosciuto, H.264 dentro un MP4 resta la risposta, ed è quello a cui punta Comprimi video.
Bitrate, risoluzione e frequenza dei fotogrammi
Il bitrate è il numero di bit al secondo in uscita, e da solo determina la dimensione del file: moltiplicalo per la durata e hai il file.
1920 x 1080 x 30 fps x 3 bytes = about 186 MB per second raw
delivered at 4 Mb/s = about 0.5 MB per second
Raddoppiare la risoluzione quadruplica il numero di pixel ma non i bit necessari, perché in un fotogramma più grande i pixel vicini si somigliano di più e si comprimono meglio. Aspettati da due a tre volte tanto, quindi dimezzare larghezza e altezza è fra i modi meno costosi di rimpicciolire un file: è quello che fa Ridimensiona video, mentre Ritaglia video butta via i pixel del tutto. La frequenza dei fotogrammi è più mite, e passando da 30 a 60 aggiunge dal 20 al 40% invece del 100%; Cambia velocità video accorcia invece la linea del tempo.
Tre modi per controllare il flusso di bit:
- Il bitrate costante mantiene un unico valore per tutta la durata: le inquadrature statiche sprecano bit, il movimento veloce si sfalda. Si adatta ai collegamenti con un tetto rigido.
- Il bitrate variabile con un obiettivo fa la media, lasciando che le scene si prestino bit a vicenda. La dimensione è prevedibile, quindi usalo quando il risultato deve stare dentro un limite.
- La qualità costante, di solito un valore CRF, fissa la qualità e lascia che il bitrate vada dove serve. La dimensione è imprevedibile, la qualità è uniforme, ed è la scelta predefinita per tutto ciò che viene guardato invece che trasmesso in streaming.
Per H.264 la scala CRF va da 0 a 51, e più basso è meglio: 18 è quasi indistinguibile dalla sorgente, 23 è un valore predefinito ragionevole, oltre 28 il movimento si sfalda. La scala non è la stessa fra codec diversi.
I keyframe, e perché a volte un taglio è gratis
Un fotogramma I, o keyframe, è un'immagine completa che si decodifica da sola. Un fotogramma P memorizza solo ciò che è cambiato rispetto a un fotogramma precedente. Un fotogramma B fa la sua previsione sia da un fotogramma precedente sia da uno successivo, il che comprime meglio di tutto ed è il motivo per cui a volte i decodificatori trattengono i fotogrammi prima di mostrarli.
Un keyframe più i fotogrammi che dipendono da esso formano un gruppo di immagini, e gli encoder per il web ne piazzano uno ogni due secondi circa. Taglia a metà gruppo e i fotogrammi sopravvissuti faranno riferimento a un'immagine che nel file non c'è più, ed è per questo che il taglio ha due modalità. Copiare i flussi è istantaneo e senza perdita, ma cade solo su un keyframe, quindi l'inizio può slittare fino alla lunghezza del gruppo; la ricodifica mette un keyframe dove l'hai chiesto, al costo di tempo e qualità. Taglia video offre entrambe; copia, a meno che non conti il fotogramma esatto.
La ricodifica costa qualità perché ogni passaggio con perdita butta via ciò che il modello considera meno visibile. Codifica di nuovo e il secondo passaggio tratterà gli artefatti del primo come dettaglio reale, conservandoli e aggiungendo i propri, così l'errore si accumula di generazione in generazione. Copia i flussi quando cambia solo il contenitore, e copia l'immagine quando se ne va solo l'audio, che è quello che fa Silenzia video. Ruota video può impostare un flag di rotazione invece di girare i pixel, anche se i riproduttori che lo ignorano mostrano l'orientamento originale. Quando i pixel devono cambiare, cambia tutto in un unico passaggio.
La traccia audio è l'altra metà
L'audio è un flusso separato con il proprio codec, la propria frequenza di campionamento e la propria disposizione dei canali, ed è un motivo frequente per cui un file non si riproduce. Un browser che decodifica senza problemi l'immagine H.264 può non decodificare il surround AC-3 o DTS, lasciando silenzio oppure facendo fallire del tutto il file. I rip da disco in MKV falliscono continuamente in questo modo.
La frequenza di campionamento è quante volte è stata misurata la forma d'onda: 44100 Hz dai CD, 48000 Hz lo standard del video. AAC a 48000 Hz in stereo è la scelta sicura per la distribuzione, intorno a 128 kb/s per il parlato e 192 kb/s per la musica. Estrai audio tira fuori una traccia come MP3, WAV, AAC o Opus.
Trasformare un video in una GIF
GIF è un formato di immagini fisse del 1987 con l'animazione avvitata sopra e senza una vera compensazione del movimento. Ogni fotogramma è compresso in gran parte per conto suo, quindi cinque secondi possono arrivare a diversi megabyte laddove la stessa clip come MP4 muto sta in un paio di centinaia di kilobyte. È limitata a 256 colori per fotogramma, ha un solo bit di trasparenza e non ha audio.
Il limite sui colori è il punto in cui la qualità si vince o si perde. Una palette fissa e generica crea bande nei gradienti e costringe a un dithering pesante, e quel rumore è quasi casuale, quindi si comprime male e gonfia il file. Costruire una palette a partire dalla clip stessa e poi mappare i fotogrammi su di essa dà un'immagine migliore e spesso un file più piccolo; Da video a GIF esegue quel passaggio. Tieni le GIF brevi e strette: due o tre secondi, da 480 a 640 pixel di larghezza, da 10 a 15 fotogrammi al secondo. Se la destinazione accetta video, manda un MP4 senza audio.
Impostazioni che funzionano per il web
- H.264 dentro un MP4 con audio AAC per tutto ciò che deve semplicemente riprodursi.
- CRF intorno a 23, fino a 20 per le registrazioni dello schermo con testo minuto, fino a 26 per le riprese di sfondo.
- Ridimensiona alla larghezza con cui verrà mostrato, prima di comprimere e non dopo.
- Attiva faststart, così l'indice sta all'inizio e la riproduzione comincia prima che il download sia finito.
Tutto questo gira nel browser sulla tua macchina, quindi non viene caricato nulla e il limite è la memoria, non una quota del server. I buffer di decodifica di un lungo file 4K possono esaurire una scheda, quindi taglia prima e ridimensiona dopo.