Określ bitrate wideo za pomocą ffmpeg

17

Próbuję określić szybkość transmisji wideo (do transkodowania) za pomocą polecenia ffmpeg, próbowałem wykonać następujące polecenie.

ffmpeg -i 28572615.wmv

i daje następujący wynik

    Input #0, asf, from '28572615.wmv':
  Metadata:
    major_brand     : isom
    minor_version   : 1
    compatible_brands: isomavc1
    encoder         : Lavf57.36.100
  Duration: 00:02:50.92, start: 0.000000, bitrate: 1982 kb/s
    Stream #0:0: Video: wmv2 (WMV2 / 0x32564D57), yuv420p, 640x360, SAR 1:1 DAR 16:9, 25 fps, 25 tbr, 1k tbn, 1k tbc
    Stream #0:1: Audio: wmav2 (a[1][0][0] / 0x0161), 44100 Hz, 2 channels, fltp, 128 kb/s
At least one output file must be specified

Jeśli użyję innego filmu

ffmpeg -i with_out_sound.mp4

następnie otrzymuję następujące dane wyjściowe

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'with_out_sound.mp4':
  Metadata:
    major_brand     : dash
    minor_version   : 0
    compatible_brands: iso6avc1mp41
    creation_time   : 2015-04-21 05:14:57
  Duration: 00:00:27.86, start: 0.000000, bitrate: 500 kb/s
    Stream #0:0(und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p, 622x480 [SAR 1:1 DAR 311:240], 100 kb/s, 23.98 fps, 23.98 tbr, 90k tbn, 47.95 tbc (default)
    Metadata:
      creation_time   : 2015-04-21 05:14:57
      handler_name    : VideoHandler
At least one output file must be specified

Chodzi mi o to, że powinienem poszukać w linii metadanych Czas trwania lub linii metadanych Strumienia wideo (Strumień 0: 0) szybkości transmisji wideo?

użytkownik2528012
źródło
W przypadku drugiego pliku, jaki jest rozmiar pliku?
Gyan
@Mulvya 2. rozmiar pliku wideo to 1,66 MB
użytkownik2528012,
Tak więc oba odczyty są błędne - rzeczywista przepływność wynosi 61 kb / s. Jest tak prawdopodobnie dlatego, że jest to segment DASH.
Gyan
W jaki sposób ffmpeg określa poszczególne szybkości transmisji strumienia? wyjaśnia, w jaki sposób ustalane są stawki.
creidhne

Odpowiedzi:

16

Szybkość transmisji wideo jest wyświetlana w informacjach o strumieniu wideo. Informacje o formacie zawierają bitrate dla wszystkich strumieni plus narzuty związane z multipleksowaniem.

Jeśli brakuje bitrate wideo, brudnym sposobem na uzyskanie tej wartości jest odjęcie bitrate wszystkich innych strumieni od całkowitej bitrate.

Jeśli to nie jest wykonalne, nieporęczną metodą jest uruchomienie ffprobe, aby wyświetlić rozmiary pakietów i czas trwania strumienia, a następnie obliczenie szybkości transmisji bitów przez zsumowanie wszystkich linii oprócz ostatniej i podzielenie przez wartość w ostatniej linii.

ffprobe -select_streams v -show_entries packet=size:stream=duration -of compact=p=0:nk=1 video.mp4

Wynik:

4199      
2627      
1792      
3921      
2993      
...  
2301      
3076
2879
1543.00000

Oczywiście jest to rozwiązanie ostateczne i ma zastosowanie tylko wtedy, gdy informacje o strumieniu wideo nie mają szybkości transmisji, a oszacowanie szybkości transmisji przez zdyskontowanie szybkości wszystkich innych strumieni również nie jest możliwe.

Gyan
źródło