web-dev-qa-db-fra.com

Obtenir des informations ffmpeg de manière amicale

Chaque fois que j’essaie d’obtenir des informations sur mes fichiers vidéo avec ffmpeg, de nombreuses informations inutiles sont mélangées à de bonnes choses.

J'utilise ffmpeg -i name_of_the_video.mpg.

Il y a des possibilités pour que cela soit amicalement? Je veux dire que JSON serait génial (et même un vilain XML, ça va).

À ce jour, j’ai fait analyser les données avec regex dans mon application, mais il existe de nombreux recoins désagréables qui apparaissent sur certains fichiers vidéo. J'ai corrigé tout ce que j'ai rencontré, mais il y en a peut-être plus.

Je voulais quelque chose comme:

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

Un peu tard, mais peut-être toujours pertinent pour quelqu'un ..

ffprobe est en effet un excellent moyen d'aller. Notez cependant que vous devez indiquer à ffprobe les informations que vous souhaitez afficher (avec le -show_format, -show_packets et -show_streams _ options) ou cela vous donnera simplement une sortie vierge (comme vous le mentionnez dans un de vos commentaires).

Par exemple, ffprobe -v quiet -print_format json -show_format -show_streams somefile.asf donnerait quelque chose comme ceci:

{
  "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"
    }
  }
}
270
Irexistus

Vous pouvez essayer ffprobe . La commande correcte pour obtenir une sortie JSON devrait ressembler à ceci:

ffprobe ... -print_format json
13
NT3RP

Il est maintenant possible d'utiliser -progress - pour imprimer des informations conviviales formatées par 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
10
Oleksandr Kyrpa