Volevo impostare l'intervallo di fotogrammi chiave di un video di input su 5 secondi. Solo così posso ottenere una segmentazione HLS costante di 5 secondi usando FFmpeg. Come impostare l'intervallo di fotogrammi chiave su 5 secondi usando FFmpeg? (È stato apprezzato il codice di linea FFmpegcome modificare l'intervallo di fotogrammi chiave in ffmpeg
risposta
Avrete bisogno di ricodificare. Imposta il parametro keyint di x264 su 5 * fps e disabilita scenecut. Ad esempio, se il tuo fps è 24:
ffmpeg -i <input> -vcodec libx264 -x264-params keyint=120:scenecut=0 -acodec copy out.mp4
Questo ovviamente non è ottimale per la qualità ma corrisponderà alla tua richiesta.
Modificato per modificare no-scenecut
a scenecut=0
, come da suggerimento per il ragazzo seduto.
Sigh.
La disinformazione relativa all'opzione no-scenecut è andata avanti più a lungo di quanto possa ricordare. Non inserire mai un valore per no-scenecut.
È disponibile un collegamento alla documentazione here.
Per FFmpeg è necessario utilizzare i seguenti due interruttori:
-g 120 definirà un GOP di 120 fotogrammi per creare cinque secondi GOP per 23.976fps contenuti. Questo funziona in combinazione con l'opzione no-scenecut ..
-x264opts no-scenecut costringerà i fotogrammi chiave da creare per il valore GOP utilizzato da FFmpeg. L'impostazione predefinita per libx264 è di creare un fotogramma chiave quando rileva una modifica di scena. Se controlli un file di output usando MediInfo senza questa opzione vedrai "scenecut = 40". Se fatto correttamente, sarà "scenecut = 0". Se questa opzione non viene utilizzata, i fotogrammi chiave saranno disallineati per il contenuto di ABR e le dimensioni dei segmenti saranno imprevedibili.
Non credetemi, eseguire il comando seguente in una shell bash in cui $ inputfile è il nome del file che si desidera analizzare. Se si utilizzano i due interruttori mostrati sopra, si vedrà una cadenza molto uniforme del dump dei keyframe al prompt dei comandi.
ffprobe -select_streams v -show_frames -show_entries frame=pict_type -of csv $inputfile | grep -n I | cut -d ':' -f 1
È inoltre possibile fare riferimento a un articolo che ho scritto su come creare una corretta cornice ABR contenuti here allineati.
Per la massima precisione, si dovrebbe usare 'frame = key_frame'. È possibile avere I-frame che non sono fotogrammi chiave. – Mulvya
Grazie per questo ... e hai ragione, il più delle volte, scherzare con intervalli di fotogrammi chiave è fare casino con la qualità. –
Avete qualche fonte che dice "se impostiamo l'intervallo dei fotogrammi chiave, qualcosa di brutto succede alla qualità"?! –
Danneggia la qualità o il bitrate. Gli smart encorder posizionano fotogrammi chiave quando c'è uno scenecut in modo che i fotogrammi futuri possano avere un riferimento pulito. Se imposti l'intervallo, i fotogrammi chiave non saranno ottimali per i fotogrammi futuri e questo danneggerà il flusso generale. – Ely