Cómo usar ffprobe para obtener cierta información sobre archivos mp4 / h.264


12

No soy más que un humilde desarrollador de PHP que se ha encargado de recuperar información básica sobre cientos de miles de archivos de video. He tenido un poco de suerte usando ffmpeg extraer el video bitrate, video width, video height, duration, y aspect ratiode ellos, pero con una relación de error de aproximadamente el 5%, esto todavía me deja con un enorme número de archivos que no sé cómo tratar con. Los videos sí se reproducen, pero la gran cantidad de datos que devuelve ffmpeg me ha desconcertado sobre cómo analizar el XML devuelto para encontrar lo que necesito con todas las condiciones que parece estar encontrando. (Los archivos son una colección de los últimos 15 años más o menos, algunos recién codificados, otros convertidos hace años)

En cualquier caso, encontré el siguiente uso de ffprobepara obtener duración, y esperaba que alguien aquí que comprenda las complejidades de usar ffmpeg y ffprobe sea lo suficientemente amable para ayudarme a encontrar los otros valores que necesito de una manera más directa que código loco que me encuentro creando para escalar a través de los resultados completos de ffmpeg.

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

Muchas gracias de antemano.

ACLARACIÓN:

Debo agregar que con el cmd a continuación, puedo "ver" lo que necesito, pero no entiendo cómo extraer lo que necesito, por ejemplo, recuperar la tasa de bits de VIDEO y suprimir / ignorar la tasa de bits de AUDIO, o determinar cuál de 2 diferentes duraciones de uso (¿duraciones de 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

Respuestas:


16

Si solo desea la información de la primera transmisión de video, use -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

Salida de ejemplo:

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

Muchas gracias por la ayuda ... Tuve que aceptar la otra respuesta solo porque me avisaron primero, y funcionó.
PIB

@GDP Tenga en cuenta: se notifica primero en este caso, porque es la última respuesta.
p2o

@poor Tomo el punto de representación bastante en serio, pero esta respuesta no estaba en mi pantalla para aceptar hasta que acepte la otra, luego apareció, por lo tanto, la disculpa inmediata. Lo siento, todo el mundo ... realmente no tenía la intención de ofender.
PIB

9

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

Si desea obtener la tasa de bits de la primera transmisión de video, puede usar:

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

Donde -select_steams v:0está seleccionando la primera transmisión de video y :nokey=1da el valor sin la clave. También puede extraer la información canalizándola a grep, pero no estoy seguro de si está disponible en su 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]+"

¡Espero que esto ayude!


"ponerlo a punto" ... suena como algo que podría haber hecho de adolescente, jajaja ... ¡GRACIAS por la ayuda!
PIB

Gracias @GDP, pero LordNeckbeard es la respuesta que probablemente deberías aceptar, ya que se publicó primero
moorej
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.