Za każdym razem, gdy próbuję uzyskać informacje o moich plikach wideo za pomocą ffmpeg, wymiotuje wiele bezużytecznych informacji zmieszanych z dobrymi rzeczami.
Używam ffmpeg -i name_of_the_video.mpg
.
Czy są jakieś możliwości, aby to zrobić w przyjazny sposób? Mam na myśli, że JSON byłby świetny (a nawet brzydki XML jest w porządku).
Do tej pory wykonałem moją aplikację analizując dane za pomocą wyrażenia regularnego, ale jest wiele nieprzyjemnych zakrętów, które pojawiają się w niektórych określonych plikach wideo. Naprawiłem wszystko, co napotkałem, ale może być więcej.
Chciałem coś takiego:
{
"Stream 0": {
"type": "Video",
"codec": "h264",
"resolution": "720x480"
},
"Stream 1": {
"type": "Audio",
"bitrate": "128 kbps",
"channels": 2
}
}
Odpowiedzi:
Trochę późno, ale może nadal dla kogoś istotne ...
ffprobe
to rzeczywiście doskonały sposób. Uwaga jednak, że trzeba powiedziećffprobe
, jakie informacje chcesz go wyświetlić (z-show_format
,-show_packets
i-show_streams
opcje), bo to po prostu daje pusty wyjście (jak wspomina w jednym z komentarzy).Na przykład
ffprobe -v quiet -print_format json -show_format -show_streams somefile.asf
dałoby coś takiego:źródło
-of json
zamiast-print_format json
. Pierwsza z nich jest kompatybilna,avprobe
a druga nie.Teraz można użyć
-progress -
do wydrukowania przyjaznych informacji sformatowanych przezkey=value
.źródło
Mógłbyś spróbować
ffprobe
. Prawidłowe polecenie uzyskania danych wyjściowych JSON powinno wyglądać następująco:źródło
{}
. Wygląda na to, że nie działa z plikami wideo, które mam ...Inne użycie,
ffprobe
które można ładnie przeanalizować:prowadzi do:
h264x600x480x25/1x385.680000x542326
-select_streams v:0
wybiera tylko strumień wideo. Jeśli usuniesz ten parametr, otrzymasz jedną linię dla każdego strumienia.źródło