Como posso obter a taxa de bits de um vídeo em uma linha de comando no Linux?

18

O que é uma boa ferramenta de linha de comando para obter a taxa de bits de vídeo de um arquivo divx ou xvid avi para linux?

Kyle Brandt
fonte
O ffplayer mostra o nitrato atual enquanto reproduz o vídeo.
Biswapriyo 3/17/17

Respostas:

16

Você pode usar o MPlayer para obter essas informações.

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

Em particular, você deseja a -identifyopção. A opção -frames 0diz para não reproduzir o arquivo e -vo null -ao nullfornece drivers nulos para vídeo e áudio (para que você possa usar este comando via SSH ou outro terminal não habilitado para X).

Você pode combinar isso com grepou outras ferramentas para extrair a linha específica desejada:

$ 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)

A saída completa é assim:

$ 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)
charlatão quixote
fonte
11
ps. a página de manual do mplayer é um pesadelo ...
quack quixote
Para quem não sabe, é essencialmente isso que o midentify.sh faz, o script que acompanha o mplayer.
Jonah Braun
Os sinalizadores precisam ser atualizados. Eu recebo 'opção inválida -' o 'no Ubuntu 13.04
hnns
17

O ffmpeg funciona bem:

ffmpeg -i file.avi
mouviciel
fonte
O ffmpeg prevalece onde o mplayer falha.
dom0
Algumas distribuições recentes (Debian, Ubuntu 14) eliminaram o ffmpeg e enviaram seu fork de libav, então você pode precisar instalar libav-toolse executar em avconv -ivez deffmpeg -i
bain
Você pode me orientar sobre o que é a taxa de bits do vídeo usando a seguinte saída de amostra? Entrada # 0, flv, de 'mi-cc-03-bed_and_breakfast.flv': Duração: 00: 00: 18.7, início: 0.000000, taxa de bits: 64 kb / s Fluxo # 0.0: Vídeo: flv, yuv420p, 480x360, 29.92 fps (r) fluxo # 0.1: Áudio: mp3, 44100 Hz, aparelho de som, 64 kb / s deve fornecer pelo menos um arquivo de saída
Zain Ali
5
avprobe -show_streams file.avi
delcroip
fonte
11
Para mostrar a taxa de bits geral, seria melhor usar -show_formatou ainda melhor (no * nix) avprobe -show_format file.avi | grep bit_rate. A mesma sintaxe também funcionará para o ffprobe.
evilsoup
2

Aqui está outra ferramenta que faz a mesma coisa:, tcprobeque faz parte do transcodepacote. Use a -iopção para obter um despejo de informações do arquivo (saída de amostra do mesmo arquivo que no mplayerexemplo):

$ 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
charlatão quixote
fonte
2

Obtenha exatamente a taxa de bits do vídeo via mediainfo :
$ mediainfo --Output='Video;%BitRate%' '/MY/MEDIA/FILE.MP4'
ou em Kbps:
$ mediainfo --Output='Video;%BitRate/String%'

Obtenha exatamente a taxa de bits do áudio via mediainfo em bps:
$ mediainfo --Output='Audio;%BitRate%' '/MY/MEDIA/FILE.MP4'
ou em Kbps:
$ mediainfo --Output='Audio;%BitRate/String%' '/MY/MEDIA/FILE.MP4'

superqwerty
fonte
0

Aqui está uma resposta bash de copiar e colar usando avprobe (que vem com avconv e talvez ffmpeg), caso você queira apenas o número (para scripts adicionais)

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

Funciona assim. Esta linha obtém informações sobre o arquivo (removendo informações extras no stdout):

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

Em seguida, grepseleciona a linha que menciona a taxa de bits

grep "bit_rate"

A partir do qual, em sedseguida, extrai a taxa de bits (em bits / segundo)

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

Para encurtar a história, copie a função na primeira linha e você poderá

$ bitrate test.mp4
593567

(esse não é um vídeo de alta qualidade, 593 kb / s, pois a taxa de bits usa 1000 em vez de 1024, aparentemente)

Marca
fonte
0

Eu tenho tentado obter a mesma informação, mas apenas esses dados para usá-lo em um loop bash .. e eu tenho! Usando o FFPROBE!

FFPROBE: hide_banner: ocultar informações do cabeçalho, nível de log 0 nos fornece apenas as informações necessárias, select_streams especificam em qual fluxo (vídeo) estamos trabalhando, show_entries vamos especificar quais dados especificamente queremos

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'

você recebe: format.bit_rate = "1085360"

Fernando Guerra
fonte