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.