Obtén información ffmpeg de forma amigable

Cada vez que trato de obtener información sobre mis archivos de video con ffmpeg, vomita mucha información inútil mezclada con cosas buenas.

Estoy usando ffmpeg -i name_of_the_video.mpg .

¿Hay alguna posibilidad de conseguirlo de forma amistosa? Quiero decir que JSON sería genial (y hasta el feo XML está bien).

Por ahora, hice que mi aplicación analizara los datos con expresiones regulares, pero hay muchas esquinas desagradables que aparecen en algunos archivos de video específicos. Solucioné todo lo que encontré, pero puede haber más.

Yo quería algo como:

 { "Stream 0": { "type": "Video", "codec": "h264", "resolution": "720x480" }, "Stream 1": { "type": "Audio", "bitrate": "128 kbps", "channels": 2 } } 

Un poco tarde, pero quizás aún relevante para alguien …

ffprobe es de hecho un excelente camino por recorrer. Sin embargo, tenga en cuenta que necesita decirle a ffprobe qué información desea que muestre (con las -show_format , -show_packets y -show_streams ) o simplemente le dará un resultado en blanco (como lo mencionó en uno de sus comentarios).

Por ejemplo, ffprobe -v quiet -print_format json -show_format -show_streams somefile.asf arrojaría algo como lo siguiente:

 { "streams": [{ "index": 0, "codec_name": "wmv3", "codec_long_name": "Windows Media Video 9", "codec_type": "video", "codec_time_base": "1/1000", "codec_tag_string": "WMV3", "codec_tag": "0x33564d57", "width": 320, "height": 240, "has_b_frames": 0, "pix_fmt": "yuv420p", "level": -99, "r_frame_rate": "30000/1001", "avg_frame_rate": "0/0", "time_base": "1/1000", "start_time": "0.000", "duration": "300.066", "tags": { "language": "eng" } }], "format": { "filename": "somefile.asf", "nb_streams": 1, "format_name": "asf", "format_long_name": "ASF format", "start_time": "0.000", "duration": "300.066", "tags": { "WMFSDKVersion": "10.00.00.3646", "WMFSDKNeeded": "0.0.0.0000", "IsVBR": "0" } } } 

Podrías probar ffprobe . El comando correcto para obtener salida JSON debe ser similar al siguiente:

 ffprobe ... -print_format json 

Ahora es posible usar -progress - para imprimir información amigable formateada por key=value .

 ffmpeg -i video.mp4 .......-s 1920x1080 -progress - -y out.mp4 speed=5.75x frame=697 fps=167.7 stream_0_0_q=39.0 bitrate=2337.0kbits/s total_size=6979778 out_time_ms=23893333 out_time=00:00:23.893333 dup_frames=0 drop_frames=0