Co to są parametry strumienia wideo / audio FFmpeg w porządku

0

Czasami strumień wideo wygląda tak:

Video: h264 (avc1 / 0x31637661), yuv420p(tv, smpte170m), 640x360, 935 kb/s, 30 fps, 30 tbr, 30k tbn, 60 tbc (default)

Czasami jest inaczej:

Video: flv1, yuv420p, 320x240, 512 kb/s, 15 fps, 15 tbr, 1k tbn

Lub:

Video: h264 (avc1 / 0x31637661), yuv420p, 1280x720 [SAR 1:1 DAR 16:9], 2195 kb/s, 23.98 fps, 23.98 tbr, 24k tbn, 47.95 tbc (default)

Wyjście wygląda inaczej w zależności od właściwości wideo.

Próbuję stworzyć java klasa, aby uzyskać te właściwości osobno. lubić getBitrate , getFPS , getAudioSampleRate , ...

Obecnie używam ffprobe w mojej aplikacji za uzyskanie informacji o multimediach. W ten sposób mogę wyłączyć tę dodatkową opcję i zmniejszyć rozmiar aplikacji.

Do tego muszę wiedzieć Video i Audio przesyłać strumieniowo wszystkie parametry i ich kolejność,.

Nie znalazłem żadnych dokumentów, więc możesz mi z tym pomóc?

Możesz zobaczyć, co tutaj zrobiłem: https://github.com/symphonyrecords/FFmpegUtils

Mehran
źródło

Odpowiedzi:

1

Jak powiedziałeś, wyjście zmieni się w zależności od samych strumieni. Dzieje się tak, ponieważ ffmpeg zawiera wiele różnych koderów i dekoderów, z których każdy ma swój własny sposób działania. Również różne formaty strumienia mogą nie mieć takich samych funkcji jak inne i wymagają wyświetlania różnego rodzaju informacji w celu opisania strumieni. Więc nie ma ustalonej kolejności. Co więcej, czy przyszłe zmiany w specyfikacji formatu, a nawet funkcje ffmpeg mogą zmienić kolejność.

Zamiast próbować analizować jedno-liniowe wyjście z nieprzewidywalną treścią, powinieneś spojrzeć na -of flaga dla sondy ff. Pozwala to wybrać różne formaty wyjściowe dla ffprobe, w tym kilka różnych formatów, które można odczytać maszynowo (cvs, ini, json, xml ...).

Cliff Armstrong
źródło
no set order - & gt; kolejność jest ustawiona, ale jakie atrybuty są zgłaszane, zależy od ich obecności i poziomu logowania.
Gyan
@ Gyan czy znasz te zestawy z domyślnym poziomem dziennika?
Mehran
Zamówienie nie jest ustawione. Nawet jeśli był ustawiony między różnymi koderami / dekoderami ... które nie są ... nie ma gwarancji, że pozostanie taki sam między wersjami ffmpeg. Ponownie, w przypadku użycia, za pomocą -of flaga, aby uzyskać format do odczytu maszynowego, jest właściwym podejściem. Eliminuje potrzebę znajomości kolejności.
Cliff Armstrong
@ CliffArmstrong Używam skompilowanej wersji ffmpeg w systemie Android, która da ci osobną ffprobe i ffmpeg plik każdego o 20MB (w zależności od wersji) dla każdej architektury procesora. Oznacza to rozmiar aplikacji 40 MB na pojedynczy łuk eg: x86 , arm ... wsparcie. I to tylko wtedy, gdy nie używam żadnych innych bibliotek i zasobów wsparcia.
Mehran
@CliffArmstrong - większość danych w odczytach wyświetlanych przez OP jest pobierana z kodeka (i avctx), wypełnionego przez dekoder, ale nie jest montowany i drukowany przez nich ale przez kod narzędzia lavf, który ma ustaloną kolejność.
Gyan