▶ Video e streaming

Analizzare un file video con MediaInfo e ffprobe

Come leggere codec, profilo, livello, bitrate, frame rate, colore e tracce di un file video con MediaInfo e ffprobe per diagnosticare i problemi.

Quando un video non si apre, si vede male, perde il sincrono o viene rifiutato da una piattaforma, la prima cosa da fare non è riconvertirlo a caso, ma guardarci dentro. Due strumenti gratuiti permettono di farlo in pochi secondi: MediaInfo, con un'interfaccia grafica e una versione a riga di comando, e ffprobe, che fa parte di FFmpeg ed è pensato anche per l'uso negli script. Sapere leggere ciò che mostrano trasforma una diagnosi a tentativi in un controllo mirato.

MediaInfo: la vista d'insieme

MediaInfo presenta le informazioni divise per sezioni: Generale, Video, Audio, Testo (sottotitoli) e talvolta Menu (capitoli). La vista testuale, più completa di quella predefinita, si attiva dal menu di visualizzazione. Dalla riga di comando:

mediainfo video.mp4

La sezione Generale

  • Formato: il container, per esempio MPEG-4 o Matroska;
  • Durata e bitrate complessivo;
  • Dimensione del file;
  • Applicazione di scrittura: quale programma ha creato il file, informazione utile per capire da dove arriva un difetto.

La sezione Video

È quella da leggere con più attenzione:

  • Formato e profilo, per esempio AVC High@L4.1 o HEVC Main 10@L5.1;
  • Larghezza, altezza e rapporto d'aspetto di visualizzazione;
  • Modalità del frame rate: costante o variabile;
  • Frame rate, per esempio 25,000 o 29,970;
  • Spazio colore, sottocampionamento e profondità di bit;
  • Tipo di scansione: progressiva o interlacciata, con l'ordine dei semiquadri;
  • Primarie, caratteristiche di trasferimento e range del colore, se dichiarati;
  • Impostazioni dell'encoder: per x264 e x265 spesso viene salvata l'intera stringa di opzioni usate.

La sezione Audio

Codec, numero di canali, frequenza di campionamento, bitrate, lingua e, se presente, il ritardo rispetto al video, un valore prezioso quando l'audio è fuori sincrono.

ffprobe: i dati per gli script

ffprobe mostra informazioni simili, ma è più adatto all'automazione perché produce output strutturato:

ffprobe -v error -show_format -show_streams -of json video.mp4

Con -of json il risultato è in JSON, facile da elaborare con un linguaggio di programmazione. Per estrarre solo i campi che interessano si usa -show_entries:

ffprobe -v error -select_streams v:0 -show_entries stream=codec_name,profile,width,height,r_frame_rate,pix_fmt -of csv=p=0 video.mp4

Il frame rate viene mostrato come frazione, per esempio 30000/1001, cioè 29,97 fps.

Analizzare i singoli fotogrammi

ffprobe può anche elencare i fotogrammi uno per uno, indicando tipo (I, P o B), dimensione e marcatura temporale:

ffprobe -v error -select_streams v:0 -show_entries frame=pict_type,pkt_size,best_effort_timestamp_time -of csv video.mp4

È utile per verificare l'intervallo tra i keyframe, controllare che siano allineati per lo streaming o individuare picchi di dimensione.

Dai sintomi ai campi da controllare

Sintomo Campo da controllare
il televisore non apre il file formato, profilo e livello del codec video, container
si vede ma non si sente codec audio
colori slavati o troppo contrastati range, primarie, curva di trasferimento
righe a pettine sul movimento tipo di scansione
audio che si allontana dal video modalità del frame rate (variabile)
immagine deformata rapporto d'aspetto dei pixel e di visualizzazione
file molto più pesante del previsto bitrate, impostazioni dell'encoder
il video parte solo dopo il download completo posizione dell'indice nel file

L'ultimo punto merita una nota: in un MP4 l'indice (l'atomo moov) può trovarsi alla fine del file. MediaInfo lo segnala nella sezione Generale; se è in fondo, una conversione con l'opzione -movflags +faststart lo sposta all'inizio senza ricodificare.

Profilo e livello: perché contano

Il profilo indica quali strumenti di compressione sono stati usati, il livello stabilisce limiti su risoluzione, frame rate e bitrate. Un decoder hardware dichiara quali profili e livelli supporta: un file H.264 High@L5.1 può essere rifiutato da un dispositivo che arriva a L4.1, anche se il codec è lo stesso. Leggere questi due valori spiega molti casi di «formato non supportato» apparentemente inspiegabili.

Attenzione ai metadati

Le informazioni mostrate sono in parte dichiarate nel file e non sempre corrispondono alla realtà. Un video può dichiarare un frame rate costante e avere marcature temporali irregolari, o dichiarare un range limitato con pixel a range pieno. Quando i sintomi non tornano con i metadati, conviene verificare sui dati reali, per esempio analizzando i fotogrammi con ffprobe o misurando i valori dei pixel con un filtro di FFmpeg.

Un'abitudine utile

Nel mio lavoro, prima e dopo ogni conversione importante salvo il report di MediaInfo in un file di testo accanto al video. Costa pochi secondi e, se qualcosa va storto, permette di confrontare esattamente cosa è cambiato tra l'originale e il risultato.

In sintesi

  • MediaInfo offre una vista chiara per sezioni; ffprobe produce dati strutturati per gli script.
  • Codec, profilo e livello spiegano gran parte dei problemi di compatibilità.
  • Range, primarie e curva di trasferimento spiegano i problemi di colore.
  • Frame rate variabile e ritardo audio spiegano molti problemi di sincrono.
  • I metadati sono dichiarazioni: in caso di dubbio verificate i dati reali.
MM
Marco Marzaduri

Marco Marzaduri si occupa di cybersecurity, informatica forense e sviluppo web. Laureato in informatica e in psicologia, unisce l'analisi tecnica alla comprensione del fattore umano.

Leggi anche