¿Cómo puedo obtener la tasa de bits de un video desde una línea de comandos en Linux?

18

¿Cuál es una buena herramienta de línea de comandos para obtener la tasa de bits de video de un archivo divx o xvid avi para linux?

Kyle Brandt
fuente
ffplayer muestra el nitrato actual mientras se reproduce el video.
Biswapriyo

Respuestas:

16

Puede usar MPlayer para obtener esa información.

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

En particular, quieres la -identifyopción. La opción -frames 0le dice que no reproduzca el archivo y que le -vo null -ao nulldé controladores nulos para video y audio (para que pueda usar este comando a través de SSH u otro terminal no habilitado para X).

Puede combinar esto con grepotras herramientas para extraer la línea específica que desea:

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

El resultado completo se ve así:

$ 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)
quijote curandero
fuente
1
PD. la página de manual de MPlayer es una pesadilla ...
charlatán quijote
Para aquellos que no lo saben, esto es esencialmente lo que hace midentify.sh, el script que se envía con mplayer.
Jonah Braun
Las banderas necesitan ser actualizadas. Obtengo 'opción no válida' en Ubuntu 13.04
hnns
17

ffmpeg funciona bien:

ffmpeg -i file.avi
Mouviciel
fuente
ffmpeg prevalece donde falla mplayer.
dom0
Algunas distribuciones recientes (Debian, Ubuntu 14) cayeron ffmpeg y en su lugar envían su tenedor libav, por lo que puede que tenga que instalar libav-toolsy ejecutar avconv -ien lugar deffmpeg -i
Bain
¿Me pueden guiar para saber qué es la tasa de bits de video usando la siguiente salida de muestra? Entrada # 0, flv, de 'mi-cc-03-bed_and_breakfast.flv': Duración: 00: 00: 18.7, inicio: 0.000000, tasa de bits: 64 kb / s Stream # 0.0: Video: flv, yuv420p, 480x360, 29.92 fps (r) Stream # 0.1: Audio: mp3, 44100 Hz, estéreo, 64 kb / s Debe suministrar al menos un archivo de salida
Zain Ali
5
avprobe -show_streams file.avi
delcroip
fuente
1
Para mostrar la tasa de bits general, sería mejor usarlo -show_format, o incluso mejor (en * nix) avprobe -show_format file.avi | grep bit_rate. La misma sintaxis también funcionará para ffprobe.
evilsoup
2

Aquí hay otra herramienta que hace lo mismo: tcprobeque es parte del transcodepaquete. Use el -iinterruptor para obtener un volcado de información del archivo (salida de muestra del mismo archivo que en el mplayerejemplo):

$ 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
quijote curandero
fuente
2

Obtenga exactamente la tasa de bits de video a través de mediainfo :
$ mediainfo --Output='Video;%BitRate%' '/MY/MEDIA/FILE.MP4'
o en Kbps:
$ mediainfo --Output='Video;%BitRate/String%'

Obtenga exactamente la tasa de bits de audio a través de mediainfo en bps:
$ mediainfo --Output='Audio;%BitRate%' '/MY/MEDIA/FILE.MP4'
o en Kbps:
$ mediainfo --Output='Audio;%BitRate/String%' '/MY/MEDIA/FILE.MP4'

superqwerty
fuente
0

Aquí hay una respuesta bash de copiar y pegar usando avprobe (que viene con avconv y tal vez ffmpeg) en caso de que solo desee el número (para más secuencias de comandos)

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

Funciona así. Esta línea obtiene información sobre el archivo (eliminando información adicional en stdout):

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

Luego grepselecciona la línea que menciona bitrate

grep "bit_rate"

De la cual sedluego se extrae la tasa de bits (en bits / segundo)

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

En pocas palabras, copie la función en la primera línea y luego puede hacer

$ bitrate test.mp4
593567

(ese no es un video de alta calidad, 593 kb / s, ya que la tasa de bits usa 1000 en lugar de 1024 aparentemente)

marca
fuente
0

He estado tratando de obtener la misma información pero solo esos datos para usarlos en un bucle bash ... ¡y lo tengo! Usando FFPROBE!

FFPROBE: hide_banner: oculta la información del encabezado, el nivel de registro 0 nos da solo la información requerida, select_streams especifica en qué transmisión (video) estamos trabajando, show_entries nos permite especificar qué datos queremos específicamente

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

obtienes: format.bit_rate = "1085360"

Fernando Guerra
fuente