Come posso get il bitrate di un video da una row di command in Linux?

Che cosa è un buon strumento di row di command per get il bitrate video di un file divx o xvid avi per linux?

È ansible utilizzare MPlayer per get tali informazioni.

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

In particolare, si desidera l'opzione -identify . L'opzione -frames 0 dice di non riprodurre il file e -vo null -ao null dà i driver null per video e audio (quindi puoi utilizzare questo command tramite SSH o un altro terminal non-X-enabled).

Potete combinare questo con grep o altri strumenti per estrarre la linea specifica desiderata:

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

L'output completo sembra questo:

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

ffmpeg funziona bene:

 ffmpeg -i file.avi 
 avprobe -show_streams file.avi 

Ecco un altro strumento che fa la stessa cosa: tcprobe , che fa parte del pacchetto transcode . Utilizzare l'interruttore -i per get un dump di informazioni dal file (esempio di output dello stesso file come nell'esempio mplayer ):

 $ 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 

Ecco una risposta di copia-copia bash usando avprobe (che viene fornito con avconv e forse ffmpeg) nel caso in cui si desidera solo il numero (per ulteriori script)

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

Funziona così. Questa row fornisce informazioni sul file (rimozione di informazioni extra su stdout):

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

Quindi il grep seleziona la linea che menziona il bitrate

 grep "bit_rate" 

Da cui sed estrae quindi il bitrate (in bit / secondo)

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

Storia lunga breve, copia la function nella prima row e poi puoi fare

 $ bitrate test.mp4 593567 

(che non è un video di alta qualità, 593 kb / s, dal momento che il bitrate utilizza 1000 anziché 1024 a quanto pare)

Ottenere esattamente il bitrate video tramite mediainfo :
$ mediainfo --Output='Video;%BitRate%' '/MY/MEDIA/FILE.MP4'
o in Kbps:
$ mediainfo --Output='Video;%BitRate/String%'

Ottieni esattamente il bitrate audio tramite mediainfo in bps:
$ mediainfo --Output='Audio;%BitRate%' '/MY/MEDIA/FILE.MP4'
o in Kbps:
$ mediainfo --Output='Audio;%BitRate/String%' '/MY/MEDIA/FILE.MP4'