Come posso impostare un livello di profilo h.264 con ffmpeg?


16

Ho un film (m4v / h.264 / AAC) che funziona bene sul mio Mac ma di recente ho scoperto che non funzionerà su Apple TV3. Dopo aver esaminato le proprietà di questo file filmato, vedo che ha un profilo High@4.1, ma Apple TV3 supporta solo fino a High@4.0. Penso che l'unica proprietà che rende questo video incompatibile sia il bit rate massimo del video, tutte le altre proprietà sembrano supportate in High@4.0.

Come posso usare ffmpeg per eseguire il downgrade di questo video a High@4.0?

O devo invece modificare la proprietà effettiva (velocità in bit massima) che rende questo video 4.1 anziché 4.0? Sono preoccupato che se cambio semplicemente la velocità in bit, anche se il file sarebbe quindi compatibile con High@4.0 sarebbe comunque 'taggato' come High@4.1 e quindi non funzionerebbe ancora sulla mia Apple TV3.

Risposte:


22

Durante la codifica con libx264, è possibile impostare il profilo H.264 e il livello con:

  • -profile:v- uno di high, maino baseline(e altri, ma questo è irrilevante qui)
  • -level:v- come definito nell'allegato A della norma H.264, ad es 4.0.

Per esempio:

ffmpeg -i input.mp4 -c:v libx264 -profile:v high -level:v 4.0 -c:a copy output.mp4

Qui abbiamo appena copiato il flusso audio poiché non sarà interessato.

L'output avrà il profilo e il livello corretti impostati nei suoi metadati. Puoi verificarlo durante la codifica, dove x264dice qualcosa del tipo:

[libx264 @ 0x7fb26103a000] profile High, level 4.0

MediaInfo può anche aiutarti ad analizzare i dettagli di container e codec.

Naturalmente, la ricodifica del video peggiorerà la sua qualità in una certa misura, dato che stai applicando di nuovo una conversione con perdita. Prova a impostare l' -crfopzione per influenzare il parametro di qualità costante. Il valore predefinito qui è 23, mentre i valori tra 18 e 28 sono considerati sani. Inferiore significa migliore qualità. Se il tuo input ha una velocità in bit fino a 65.000 kBit / s, è probabile che dopo la conversione continuerà comunque ad avere un bell'aspetto.


1
Funzionava bene. Sfortunatamente ha perso alcuni dei metadati ma il video reale non ha avuto alcun cambiamento evidente nella qualità. Per interesse, il seguente comando avrebbe ottenuto la stessa cosa? ffmpeg -i input.mp4 -vcodec x264 -vprofile high -vlevel 4.0 -acodec copy output.mp4
Sam

Sì, le -vopzioni sono alias di :vquelle. Quali metadati hai perso?
slhck,

Penso che potrebbe essere stata solo l'opera d'arte che è stata persa. Non so se questo è tecnicamente considerato metadati ... L'opera d'arte è effettivamente contenuta nel file? Non ho controllato tutto il resto prima di aggiungere nuovamente il tutto.
Sam

Ora ho un file diverso con un problema simile. È un livello di profilo sbagliato ma il resto delle specifiche sembra essere compatibile con il mio livello richiesto (4.0). Se utilizzo i comandi che hai dato sopra, i dati rimarranno intatti a meno che non siano incompatibili con il livello di profilo inserito? Fondamentalmente, non voglio che ffmpeg tocchi nessuno dei dati oltre al tag che indica il profilo e il livello. È possibile o imposterà tutti i valori (nitrato, framerate ecc.) Su valori preimpostati?
Sam

2
Mi sono appena imbattuto in un modo per raggiungere questo obiettivo. Subler in realtà ha un'opzione, quando si seleziona il flusso video, per modificare il profilo e il livello per renderlo compatibile con alcuni dispositivi. Ti dice di assicurarti che il video sia compatibile con il profilo che stai impostando, quindi non credo che faccia alcuna ricodifica, deve solo cambiare i metadati.
Sam,

1

In riferimento al tuo commento , prova questo comando:

ffmpeg -i input.mp4 -map 1 -c:v libx264 -profile:v high -level:v 4.0 -c:a copy \
# copies all global metadata from input.mp4 to output.mp4
-map_metadata 0 \
# copies video stream metadata from input.mp4 to output.mp4
-map_metadata:s:v 0:s:v \
# copies audio stream metadata from input.mp4 to output.mp4
-map_metadata:s:a 0:s:a \
output.mp4

Saluti

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.