web-dev-qa-db-de.com

Holen Sie sich Informationen auf freundliche Weise ffmpeg

Jedes Mal, wenn ich versuche, mit ffmpeg Informationen über meine Videodateien zu erhalten, werden viele nutzlose Informationen mit guten Dingen vermischt.

Ich benutze ffmpeg -i name_of_the_video.mpg.

Gibt es irgendwelche Möglichkeiten, dies auf freundliche Weise zu erreichen? Ich meine, JSON wäre großartig (und sogar hässliches XML ist in Ordnung).

Inzwischen habe ich meine Anwendung dazu gebracht, die Daten mit Regex zu analysieren, aber es gibt viele unangenehme Ecken, die in bestimmten Videodateien auftreten. Ich habe alles behoben, was mir begegnet ist, aber vielleicht gibt es noch mehr.

Ich wollte so etwas wie:

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

Ein bisschen spät, aber vielleicht immer noch relevant für jemanden.

ffprobe ist in der Tat ein ausgezeichneter Weg. Beachten Sie jedoch, dass Sie ffprobe mitteilen müssen, welche Informationen angezeigt werden sollen (mit dem -show_format, -show_packets und -show_streams options) oder es wird nur eine leere Ausgabe ausgegeben (wie Sie in einem Ihrer Kommentare erwähnt haben).

Beispielsweise, ffprobe -v quiet -print_format json -show_format -show_streams somefile.asf würde ungefähr Folgendes ergeben:

{
  "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

Sie könnten versuchen ffprobe . Der richtige Befehl zum Abrufen der JSON-Ausgabe sollte folgendermaßen aussehen:

ffprobe ... -print_format json
13
NT3RP

Mit -progress - Können jetzt benutzerfreundliche Informationen gedruckt werden, die mit key=value Formatiert wurden.

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