Come usare ffprobe per ottenere determinate informazioni sui file mp4 / h.264


12

Sono solo un modesto sviluppatore di PHP a cui è stato assegnato il compito di recuperare alcune informazioni di base su centinaia di migliaia di file video. Ho avuto un po 'di fortuna con l'estrazione del ffmpeg video bitrate, video width, video height, duration, e aspect ratioda loro, ma con un rapporto di errore di circa il 5%, questo mi lascia ancora con un enorme numero di file che non so come affrontare. I video vengono riprodotti, ma l'enorme quantità di dati restituiti da ffmpeg mi ha sconcertato su come analizzare l'XML restituito per trovare ciò di cui ho bisogno con tutte le condizioni che sembrano incontrare. (I file sono una raccolta degli ultimi 15 anni circa, alcuni appena codificati, altri convertiti anni fa)

Ad ogni modo, ho trovato il seguente uso di ffprobeper ottenere la durata e speravo che qualcuno qui che capisse le complessità dell'uso di ffmpeg & ffprobe sarebbe stato così gentile da aiutarmi a trovare gli altri valori di cui ho bisogno in un modo più diretto del codice pazzo mi trovo a creare per scalare i risultati completi di ffmpeg.

ffprobe -i "video.mp4" -show_entries format=duration -v quiet -of csv="p=0"

Grazie mille in anticipo.

UNA PRECISAZIONE:

Dovrei aggiungere che con il cmd sottostante, posso "vedere" ciò di cui ho bisogno, ma non capisco come estrarre ciò di cui ho bisogno, ad esempio recuperare il bitrate VIDEO e sopprimere / ignorare il bitrate AUDIO o determinare quale di 2 durate diverse da utilizzare (durate audio / video?)

C:\>ffprobe -v error -show_entries stream=width,height,bit_rate,duration -of default=noprint_wrappers=1 input.mp4

duration=1712.000000
bit_rate=64000
width=320
height=240
duration=1711.946113
bit_rate=359827
duration=1712.000000
bit_rate=N/A
duration=1712.000000
bit_rate=N/A

Risposte:


16

Se vuoi solo le informazioni dal primo flusso video usa -select_streams v:0:

ffprobe -v error -select_streams v:0 -show_entries stream=width,height,duration,bit_rate -of default=noprint_wrappers=1 input.mp4

Esempio di output:

width=640
height=480
duration=10.000000
bit_rate=942704

Grazie mille per l'assistenza .... Ho dovuto accettare l'altra risposta solo perché prima ero stato avvisato e ha fatto il trucco ..
PIL

@GDP Si prega di considerare: avvisato prima in questo caso, perché è l'ultima risposta.
p2o

@Poo prendo abbastanza sul serio il punto rappresentante, ma questa risposta non è stata accettata sul mio schermo finché non ho accettato l'altro, quindi è apparso, quindi le scuse immediate. Scusate tutti ... davvero non intendevo offendere.
PIL,

9

Da https://trac.ffmpeg.org/wiki/FFprobeTips

Se vuoi ottenere il bit_rate del primo flusso video puoi usare:

ffprobe -v error -select_streams v:0 -show_entries stream=bit_rate -of default=noprint_wrappers=1:nokey=1 input.mp4

Dove -select_steams v:0sta selezionando il primo flusso video e :nokey=1fornisce il valore senza la chiave. Puoi anche estrarre le informazioni eseguendo il piping su grep ma non sono sicuro che siano disponibili sul tuo sistema.

ffprobe -v error -show_entries stream=width,height,bit_rate,duration -of default=noprint_wrappers=1 input.mp4 | grep -oP "(?<=bit_rate\=)[0-9]+"

Spero che sia di aiuto!


"piping it to grep" ... sembra qualcosa che avrei potuto fare da adolescente, lol ... GRAZIE per l'aiuto!
PIL,

Grazie @GDP ma LordNeckbeard's è la risposta che probabilmente dovresti accettare perché è stata pubblicata per prima
moorej
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.