Wie kann ich die Bitrate eines Videos unter Linux über eine Befehlszeile abrufen?

18

Was ist ein gutes Kommandozeilen-Tool, um die Video-Bitrate einer DivX- oder XVID-AVI-Datei für Linux zu erhalten?

Kyle Brandt
quelle
ffplayer zeigt das aktuelle Nitrat während der Videowiedergabe an.
Biswapriyo

Antworten:

16

Sie können MPlayer verwenden, um diese Informationen abzurufen.

$ mplayer -vo null -ao null -identify -frames 0 foo.avi

Insbesondere möchten Sie die -identifyOption. Die Option -frames 0weist es an, die Datei nicht abzuspielen, und -vo null -ao nullgibt keine Treiber für Video und Audio an (sodass Sie diesen Befehl über SSH oder ein anderes nicht X-fähiges Terminal verwenden können).

Sie können dies mit grepoder anderen Werkzeugen kombinieren , um die gewünschte Linie herauszuziehen:

$ mplayer -vo null -ao null -identify -frames 0 foo.avi | grep kbps
VIDEO:  [XVID]  512x384  24bpp  29.970 fps  990.9 kbps (121.0 kbyte/s)

Die vollständige Ausgabe sieht folgendermaßen aus:

$ mplayer -vo null -ao null -identify -frames 0 foo.avi
MPlayer dev-SVN-r26940 (C) 2000-2007 MPlayer Team
CPU: [hw dependent]
CPUflags:  [hw dependent]
Compiled with runtime CPU detection.

Playing foo.avi.
AVI file format detected.
ID_VIDEO_ID=0
[aviheader] Video stream found, -vid 0
ID_AUDIO_ID=1
[aviheader] Audio stream found, -aid 1
VIDEO:  [XVID]  512x384  24bpp  29.970 fps  990.9 kbps (121.0 kbyte/s)
Clip info:
 Software: transcode-1.0.2
ID_CLIP_INFO_NAME0=Software
ID_CLIP_INFO_VALUE0=transcode-1.0.2
ID_CLIP_INFO_N=1
ID_FILENAME=foo.avi
ID_DEMUXER=avi
ID_VIDEO_FORMAT=XVID
ID_VIDEO_BITRATE=990928
ID_VIDEO_WIDTH=512
ID_VIDEO_HEIGHT=384
ID_VIDEO_FPS=29.970
ID_VIDEO_ASPECT=0.0000
ID_AUDIO_FORMAT=85
ID_AUDIO_BITRATE=135104
ID_AUDIO_RATE=0
ID_AUDIO_NCH=0
ID_LENGTH=1288.95
ID_SEEKABLE=1
==========================================================================
Opening video decoder: [ffmpeg] FFmpeg's libavcodec codec family
Selected video codec: [ffodivx] vfm: ffmpeg (FFmpeg MPEG-4)
==========================================================================
ID_VIDEO_CODEC=ffodivx
==========================================================================
Opening audio decoder: [mp3lib] MPEG layer-2, layer-3
AUDIO: 48000 Hz, 2 ch, s16le, 128.0 kbit/8.33% (ratio: 16000->192000)
ID_AUDIO_BITRATE=128000
ID_AUDIO_RATE=48000
ID_AUDIO_NCH=2
Selected audio codec: [mp3] afm: mp3lib (mp3lib MPEG layer-2, layer-3)
==========================================================================
AO: [null] 48000Hz 2ch s16le (2 bytes per sample)
ID_AUDIO_CODEC=mp3
Starting playback...

Exiting... (End of file)
Quacksalber
quelle
1
ps. die mplayer manpage ist ein alptraum ...
quack quixote
Für diejenigen, die es nicht wissen, ist dies im Wesentlichen das, was midentify.sh tut, das Skript, das im Lieferumfang von mplayer enthalten ist.
Jonah Braun,
Die Flags müssen aktualisiert werden. Ich bekomme 'ungültige Option -' o 'in Ubuntu 13.04
hnns
17

ffmpeg funktioniert gut:

ffmpeg -i file.avi
mouviciel
quelle
ffmpeg setzt sich dort durch, wo mplayer fehlschlägt.
dom0
Einige neuere Distributionen (Debian, Ubuntu 14) haben ffmpeg gelöscht und stattdessen die libav-Verzweigung ausgeliefert, sodass Sie möglicherweise installieren libav-toolsund ausführen müssen, avconv -ianstattffmpeg -i
bain am
Können Sie mir bitte anhand der folgenden Beispielausgabe sagen, welche Videobitrate verwendet wird? Eingabe Nr. 0, flv, aus 'mi-cc-03-bed_and_breakfast.flv': Dauer: 00: 00: 18.7, Start: 0.000000, Bitrate: 64 kb / s Stream Nr. 0.0: Video: flv, yuv420p, 480x360, 29.92 fps (r) Stream # 0.1: Audio: MP3, 44100 Hz, Stereo, 64 kb / s Muss mindestens eine Ausgabedatei liefern
Zain Ali
5
avprobe -show_streams file.avi
delcroip
quelle
1
Um die Gesamtbitrate anzuzeigen, sollten Sie besser -show_formatoder sogar besser (on * nix) verwenden avprobe -show_format file.avi | grep bit_rate. Die gleiche Syntax funktioniert auch für ffprobe.
Evilsoup
2

Hier ist ein weiteres Tool, das dasselbe tut:, tcprobedas Teil des transcodePakets ist. Verwenden Sie den -iSchalter, um einen Info-Dump aus der Datei abzurufen (Beispielausgabe aus derselben Datei wie im mplayerBeispiel):

$ tcprobe -i foo.avi
[tcprobe] RIFF data, AVI video
[avilib] V: 29.970 fps, codec=XVID, frames=38630, width=512, height=384
[avilib] A: 48000 Hz, format=0x55, bits=16, channels=2, bitrate=128 kbps,
[avilib]    53707 chunks, 21768720 bytes, VBR
[tcprobe] summary for foo.avi, (*) = not default, 0 = not detected
import frame size: -g 512x384 [720x576] (*)
       frame rate: -f 29.970 [25.000] frc=4 (*)
      audio track: -a 0 [0] -e 48000,16,2 [48000,16,2] -n 0x55 [0x2000] (*)
                   bitrate=128 kbps
           length: 38630 frames, frame_time=33 msec, duration=0:21:28.954
Quacksalber
quelle
2

Erhalten Sie genau die Videobitrate über mediainfo :
$ mediainfo --Output='Video;%BitRate%' '/MY/MEDIA/FILE.MP4'
oder in Kbps:
$ mediainfo --Output='Video;%BitRate/String%'

Erhalten Sie genau die Audio-Bitrate über mediainfo in bps:
$ mediainfo --Output='Audio;%BitRate%' '/MY/MEDIA/FILE.MP4'
oder in Kbps:
$ mediainfo --Output='Audio;%BitRate/String%' '/MY/MEDIA/FILE.MP4'

superqwerty
quelle
0

Hier ist eine Copy-Paste-Bash-Antwort mit avprobe (die mit avconv und vielleicht ffmpeg geliefert wird), falls Sie nur die Nummer wollen (für weitere Skripterstellung).

function bitrate () { avprobe -show_format "$1" 2> /dev/null | grep "bit_rate" | sed 's/.*bit_rate=\([0-9]\+\).*/\1/g'; }

Das funktioniert so. In dieser Zeile werden Informationen zur Datei abgerufen (zusätzliche Informationen zu stdout werden entfernt):

avprobe -show_format test.mp4 2> /dev/null

Dann grepwählt die Linie , die Bitrate erwähnt

grep "bit_rate"

Aus denen seddann extrahiert die Bitrate (in Bits / Sekunde)

sed 's/.*bit_rate=\([0-9]\+\).*/\1/g';

Lange Rede kurzer Sinn, kopieren Sie die Funktion in die erste Zeile und dann können Sie tun

$ bitrate test.mp4
593567

(Das ist kein qualitativ hochwertiges Video mit 593 kb / s, da die Bitrate anscheinend 1000 statt 1024 verwendet.)

Kennzeichen
quelle
0

Ich habe versucht, die gleichen Informationen zu erhalten, aber nur diese Daten, um sie in einer Bash-Schleife zu verwenden. Und ich habe sie! FFPROBE verwenden!

FFPROBE: hide_banner: Kopfzeileninfo verbergen, loglevel 0 gibt nur die erforderlichen Informationen an, select_streams gibt an, an welchem ​​Stream (Video) wir arbeiten, show_entries gibt an, welche Daten speziell wir möchten

fer @ FerPC: ~ / Downloads / TEMP $ ffprobe -hide_banner -loglevel 0 -of flat -i 'Eng_Sub_EP.1_1_4.mkv' -select_streams v -show_entries 'format = bit_rate'

Sie erhalten: format.bit_rate = "1085360"

Fernando Guerra
quelle