Jak korzystać z programu ffprobe, aby uzyskać określone informacje o plikach MP4 / h.264

13

Jestem tylko skromnym programistą PHP, któremu powierzono zadanie pobrania podstawowych informacji o setkach tysięcy plików wideo. Miałem trochę szczęścia przy użyciu ffmpeg ekstrahowanie video bitrate, video width, video height, duration, i aspect ratiood nich, ale ze współczynnikiem błędu około 5%, to nadal pozostawia mnie z ogromnej liczby plików, które nie wiem, jak sobie poradzić. Filmy są odtwarzane, ale ogromna ilość danych, które zwraca ffmpeg, wprawiła mnie w zakłopotanie, jak analizuję zwracany plik XML, aby znaleźć to, czego potrzebuję, we wszystkich warunkach, które napotykam. (Pliki są zbiorem z ostatnich 15 lat lub więcej, niektóre nowo zakodowane, inne przekonwertowane lata temu)

W każdym razie znalazłem następujące zastosowanie, ffprobeaby uzyskać czas trwania, i miałem nadzieję, że ktoś tutaj, który rozumie złożoność korzystania z ffmpeg i ffprobe, byłby na tyle uprzejmy, aby pomóc mi w znalezieniu innych wartości, których potrzebuję w prostszy sposób niż szalony kod, który sam sobie tworzę, aby wspiąć się na pełne wyniki ffmpeg.

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

Dziękuję bardzo z góry.

WYJAŚNIENIE:

Powinienem dodać, że za pomocą poniższego polecenia cmd „widzę” to, czego potrzebuję, ale nie rozumiem, jak wyodrębnić to, czego potrzebuję, np. Odzyskanie bitrate VIDEO i tłumienie / ignorowanie bitrate AUDIO, lub określanie, który z 2 różne czasy użytkowania (czasy audio / wideo?)

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
PKB
źródło

Odpowiedzi:

18

Jeśli chcesz tylko informacje z pierwszego strumienia wideo, użyj -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

Przykładowe dane wyjściowe:

width=640
height=480
duration=10.000000
bit_rate=942704
Llogan
źródło
Dziękuję bardzo za pomoc .... Musiałem zaakceptować drugą odpowiedź tylko dlatego, że zostałem o tym powiadomiony jako pierwszy, i udało się to.
PKB
@GDP Należy rozważyć: najpierw powiadomiony w tym przypadku, ponieważ jest to najnowsza odpowiedź.
p2 lub
@ słabo podchodzę do punktu odpowiedzi dość poważnie, ale ta odpowiedź nie była na moim ekranie do zaakceptowania, dopóki nie zaakceptuję drugiego, a potem pojawiła się, a więc natychmiastowe przeprosiny. Przepraszam, wszyscy ... naprawdę nie chciałem obrazić.
PKB na
9

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

Jeśli chcesz uzyskać bit_rate 1. strumienia wideo, możesz użyć:

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

Gdzie -select_steams v:0wybiera 1. strumień wideo i :nokey=1podaje wartość bez klucza. Możesz również wyodrębnić informacje, przesyłając je do grep, ale nie jestem pewien, czy są one dostępne w twoim systemie.

ffprobe -v error -show_entries stream=width,height,bit_rate,duration -of default=noprint_wrappers=1 input.mp4 | grep -oP "(?<=bit_rate\=)[0-9]+"

Mam nadzieję że to pomoże!

moorej
źródło
„piping it to grep” ... brzmi jak coś, co mogłem zrobić jako nastolatek, lol ... DZIĘKUJĘ za asystę!
PKB na
Dzięki @GDP, ale LordNeckbeard's jest odpowiedzią, którą prawdopodobnie powinieneś zaakceptować, ponieważ została opublikowana jako pierwsza
moorej