I file video hanno due parti: il contenitore (formato del file) e il codec (il modo in cui il video è rappresentato nel contenitore).
In generale, il video catturato sui dispositivi di consumo è già compresso usando qualche algoritmo. Per esempio, le vecchie videocamere DV usavano circa 14G per memorizzare 1 ora di video SD. La risoluzione era 720 x 480 a 29,97 fotogrammi al secondo (USA) e 16 bit per pixel (in realtà catturavano 24 bit per pixel ma usavano il sottocampionamento del croma per ridurre il numero di bit) - grezzo che sarebbe 720 x 480 x 29,97 x 2 x 60 x 60 byte per ora, o circa 75 G/ora. Usavano un metodo chiamato "interframe discrete cosine transform" per comprimere il video.
Anche oggi, con l'eccezione di un paio di telecamere di fascia molto alta usate dall'industria cinematografica, tutte le telecamere usano qualche tipo di compressione video. La più comune è h.264 (un profilo specifico di MPEG-4). La mia videocamera 4K UHD registra a 100Mbps, mentre il bitrate del video sorgente non compresso sarebbe vicino a 4000Mbps.
Pertanto, penso che sia sicuro assumere che hai un video compresso di qualche tipo e vorresti renderlo più piccolo.
Programmi come ZIP usano la compressione dati Lempel-Ziv-Welch che cerca modelli di bit ripetuti nei dati e li sostituisce con abbreviazioni. Questo è chiamato un metodo di "compressione senza perdita" perché i dati che entrano nel compressore sono esattamente quelli che escono dopo la decompressione. Questo funziona benissimo quando i dati hanno molte ripetizioni (file di testo, per esempio), ma non funziona bene su dati che mancano di ripetizioni (nella scienza dell'informazione, chiamiamo tali dati "ad alta entropia"). I dati già compressi hanno un'entropia molto alta e non sono adatti a questo tipo di compressione. Non puoi usare ZIP.
Le nuove tecniche di compressione senza perdita usano un approccio chiamato Burrows-Wheeler Transform per riorganizzare i bit in un file in un modo che può renderli più ripetitivi e poi usare la tecnica di compressione usata in ZIP. Questo può a volte aiutare a ridurre un file ad alta entropia come il video compresso, ma raramente, e non con un margine sostanziale.
Quindi... La domanda diventa, se non c'è un modo senza perdita per comprimere il mio video, c'è un modo con perdita per farlo? Sì. Con lossy, intendiamo che una certa quantità di informazioni video viene buttata via nel processo di ricodifica. Questo può diminuire la qualità di una certa quantità, ma è possibile esercitare un controllo su quanto si butta via e fermarsi quando si nota che riduce in modo inaccettabile la qualità del video.
Il codec di compressione video più ampiamente supportato è h.264 (chiamato anche AVC), seguito da VP9 e il più performante (migliore compressione mantenendo la qualità) è h.265 (chiamato anche HEVC) - e ci sarà un VP10 per abbinarlo. h.264 ha un grande vantaggio nel fatto che un sacco di hardware video e schede video hanno un hardware incorporato per la decodifica di h.264, quindi richiede pochissime risorse per decodificare (e molte telecamere hanno codificatori hardware, rendendo molto efficiente la codifica).
Su un computer, è possibile transcodificare video in qualsiasi formato video in h.264 o h.265 con software appropriato. Puoi anche dire al codificatore quanti bit al secondo vuoi usare e quindi specificare la dimensione del file di uscita (questo è indipendente dalla risoluzione del video). Se tu avessi un video lungo 3 minuti e di 500 MB, sarebbero 22,2 Mbps (500 MB * 8 bit/byte / 180 secondi). Potresti dire al codificatore di usare 10 Mbps, e il video diventerebbe lungo 225 MB (un rapporto di compressione di 10:22.2). A seconda del video, potresti notare o meno una differenza di qualità (e se lo fai, potresti trovarla accettabile). Inoltre, se riduci la risoluzione del video, non hai bisogno di un bitrate così alto per rappresentarlo (ci vogliono meno bit per rappresentare un fotogramma video 1280x720 che un fotogramma video 1920x1080).
Gli strumenti canonici per la transcodifica video sono: FFmpeg, Adobe Media Encoder, Apple Compressor, e Apple QuickTime 7 Pro (che è molto vecchio). Tutti questi supportano diversi formati di input e di output. FFmpeg supporta la maggior parte dei formati, ma non ha un'interfaccia grafica, quindi ci sono dozzine di strumenti di conversione video che usano FFmpeg per fare il loro lavoro ma forniscono una bella interfaccia grafica in cima. Media Encoder è probabilmente lo strumento più usato commercialmente. Compressor sarà usato soprattutto dagli utenti di FinalCut Pro X della Apple.
Ognuno di questi strumenti permette di specificare la risoluzione di uscita del video e il bitrate di uscita (che stabilisce la dimensione del file).
Here’s an example how you’d compress that hypothetical 500 MB video (big_22mbps_video.mp4) above to 225 MB video (smaller_10mbps_video.mp4) using FFmpeg:
- ffmpeg -i big_22mbps_video.mp4 -b:v 10M smaller_10mbps_video.mp4