Esistono diversi frame rate "standard", ma ce ne sono così tanti che il supporto di framerate arbitrari è più semplice rispetto al supporto specifico di molti frame specifici. Ciò è particolarmente vero per i lettori di software, come VLC.
Esiste sempre più supporto per i fps VARIABILI. (VFR, frame rate variabile). Questo è dove l'intervallo tra i fotogrammi all'interno dello stesso video non è una costante. Molti formati di file contenitore video (come Matroska ( .mkv
) o MPEG-4 ( .mp4
, strettamente correlati a quelli di Apple .mov
)) non memorizzano nemmeno un numero FPS, ma piuttosto una base dei tempi (ad es. 1/30 di secondo) e quindi ogni fotogramma ha un timestamp come multiplo di tale base dei tempi. Accade solo che l'intervallo tra ciascun fotogramma sia uno o un piccolo numero intero di unità della base dei tempi in un video CFR (frame rate costante).
Le riprese di telecamere di sicurezza con frame quasi duplicati rilasciati sarebbero un ovvio caso d'uso per VFR. Anche più se viene compresso con un codec video semplicistico che non sfrutta bene la ridondanza temporale (con frame inter (p e b)). (giocaci con ffmpeg -vf mpdecimate
per eliminare i frame near-dup. Usa -vsync 2
se trasmetti a mp4, perché per qualche motivo non è il default per quel muxer, ma è per mkv.)
Un altro caso sono gli smartphone moderni. Ad esempio, la Moto G (2a generazione) di mio fratello registra video VFR. Riduce la frequenza dei fotogrammi quando il sensore necessita di più luce. Parte dell'output di mediainfo su un mp4 creato dal software del telefono, registrato al chiuso:
Bit rate : 9 999 Kbps
Width : 1 280 pixels
Height : 720 pixels
Display aspect ratio : 16:9
Rotation : 90°
Frame rate mode : Variable
Frame rate : 16.587 fps
Minimum frame rate : 14.985 fps
Maximum frame rate : 30.030 fps
La riproduzione di un singolo flusso video VFR non è difficile. Il software appena pronto per la visualizzazione del fotogramma successivo, dorme fino a quando non dovrebbe essere visualizzato, quindi si sveglia e lo visualizza.
Le cose diventano un po 'più complicate se si tiene conto del fatto che gli umani possono vedere i fotogrammi video solo quando un monitor li visualizza. I monitor VFR esistono, ma sono ancora rari. (google per g-sync freesync).
La modifica dell'immagine visualizzata mentre viene scansionata sul monitor provoca una brutta lacerazione del video (comunemente visto quando si gioca con vsync disattivato). Ciò limita un giocatore a cambiare l'immagine visualizzata a 50 o 60Hz. (I CRT supportano frequenze vrefresh arbitrarie, all'interno di un intervallo, ma è complicato cucinare le modalità con tutti i tempi corretti, quindi la maggior parte delle persone ha usato solo alcune frequenze di aggiornamento fisse. E ora le persone hanno LCD che supportano comunque solo una frequenza di aggiornamento fissa. Fino a i monitor freesync sono comunque molto più diffusi. Non vedo davvero l'ora. :)
Pertanto, con frequenze di fotogrammi video che non sono un multiplo o un fattore della frequenza di aggiornamento del monitor, alcuni fotogrammi verranno visualizzati per 3 aggiornamenti del monitor e alcuni per 2, ad esempio, anche se il video deve essere a 25FPS costanti (su un monitor da 60Hz).
Le cose si complicano quando si desidera lavorare con più clip e sfumare tra loro, Picture-in-Picture o vari altri effetti. Scrivere un software di editing video è MOLTO più semplice se si può presumere che tutte le clip abbiano un nuovo fotogramma contemporaneamente. (Forzano l'allineamento della clip per scattare a interi fotogrammi).
Questo è il motivo per cui gli NLE (come kdenlive o pitivi, per scegliere esempi casuali di software libero), hanno maggiori probabilità di forzarti a un FPS fisso e di rilasciare / duplicare i frame dai clip per farli corrispondere a quel frame rate. Il CFR scelto può essere arbitrario, ma in genere deve essere costante per l'intero "progetto".
(Gli NLE funzionano completamente con i clip VFR e producono in questo caso un output VFR?)
Quindi, in sintesi, una volta che abbiamo monitor e sistemi operativi a sincronizzazione variabile, l'unica cosa che ci trattiene sarà l'editing video, immagino. E la radiodiffusione, poiché a quanto pare anche il CFR è un grosso problema per questo?
Nel caso ti stia chiedendo, i fastidiosi frame rate non interi di 29.970 (in realtà 30000/1001) e 23.976 (in realtà 24000/1001, da telecine) sono colpa del colore NTSC. cerca 1.001 . Se solo fossero stati disposti a rischiare che alcuni set B&W non fossero in grado di gestire una frequenza aggiuntiva dello 0,1% per la sottoportante audio, al mondo sarebbe stata risparmiata questa assurdità. (Penso di aver visto un altro articolo da qualche parte che lo faceva sembrare più simile a molti set sarebbe andato bene, ma non erano sicuri della perfetta compatibilità. Wikipedia lo fa sembrare che nessun set avrebbe gestito una sottoportante audio dello 0,1% più alta. IDK fatti.)
Tuttavia, i fastidiosi frame rate sono uno dei peccati minori della trasmissione. È davvero un intreccio che è stata la rovina della qualità video su schermi moderni (tutti i pixel accesi contemporaneamente) e che non sarebbe cambiato. Non capisco ancora perché l'interlacciamento sia stato mantenuto per l'HDTV. Perché è stato mai definito 1080i60, invece di usare 720p60 per ottenere la stessa risoluzione temporale per sport e cose? È simile a 1920x540p60, ma con uno stupido offset verticale tra i campi pari e dispari che richiede un sacco di calcoli sull'estremità di ricezione per renderlo non orribile.
modificare:
Per il tuo caso d'uso, suggerirei assolutamente di archiviare l'FPS nativo. Non gettare alcuna informazione facendo cadere i frame. Non duplica i frame e ingrandisci i tuoi file (o fai passare più tempo al tuo codificatore h.264 notando i duplicati e producendo un frame pieno di macroblocchi skip che richiede solo 20 byte per l'intero frame).
In futuro, quando speriamo che tutti abbiamo schermi freesync in grado di riprodurre qualsiasi framerate, vorrai annullare il tuo pullup a 24fps in modo che il tuo video venga riprodotto in modo più fluido! O se il freesync in qualche modo non prende piede, o il display che viene dopo LCD è CFR, allora la conversione della velocità è probabilmente meglio se eseguita al momento della riproduzione. Non è che i 24fps vengano riprodotti perfettamente anche su un monitor a 60Hz. (Non noto visivamente il fatto che alcuni fotogrammi vengono visualizzati per 3 * 1 / 60th mentre alcuni vengono visualizzati per 2 * 1 / 60th, ma è vero).
Se riscontri problemi con Quicktime, IDK. Forse assicurati che Handbrake stia creando file con il giusto framerate impostato nel bitstream h.264, così come nel contenitore. (Sì, le intestazioni h.264 possono apparentemente memorizzare una frequenza dei fotogrammi, separata da ciò che dice il contenitore. Vedi i documenti per mkvmerge --fix-bitstream-timing-information
. E provare a usarlo con --default-duration 16fps
per creare un file mkv. Quindi reindirizzarlo a mp4 e vedere se questo risolve il problema di quicktime? ) O forse c'è un modo per farlo con gli strumenti mp4 in primo luogo. Vedi ad esempio: /ubuntu/370692/how-to-change-the-framerate-of-a-video-without-reencoding
Posso garantire che il frame rate arbitrario mp4 è valido e che anche il framerate variabile mp4 è valido. Se Quicktime non funziona correttamente, potrebbe essere colpa di Quicktime. O forse colpa del freno a mano per aver sbagliato il file. Di solito uso direttamente ffmpeg, perché sono un ninja della riga di comando.