Comment puis-je obtenir le débit d'une vidéo à partir d'une ligne de commande sous Linux?

18

Qu'est-ce qu'un bon outil en ligne de commande pour obtenir le débit vidéo d'un fichier avi divx ou xvid pour linux?

Kyle Brandt
la source
ffplayer affiche le nitrate actuel pendant la lecture de la vidéo.
Biswapriyo

Réponses:

16

Vous pouvez utiliser MPlayer pour obtenir ces informations.

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

En particulier, vous voulez l' -identifyoption. L'option lui -frames 0dit de ne pas lire le fichier et de -vo null -ao nulllui donner des pilotes nuls pour la vidéo et l'audio (vous pouvez donc utiliser cette commande via SSH ou un autre terminal non compatible X).

Vous pouvez combiner cela avec grepou d'autres outils pour extraire la ligne spécifique que vous souhaitez:

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

La sortie complète ressemble à ceci:

$ 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)
Quack Quichotte
la source
1
ps. la page de
manuel de
Pour ceux qui ne le savent pas, c'est essentiellement ce que fait midentify.sh, le script fourni avec mplayer.
Jonah Braun
Les drapeaux doivent être mis à jour.
J'obtiens
17

ffmpeg fonctionne bien:

ffmpeg -i file.avi
mouviciel
la source
ffmpeg prévaut là où mplayer échoue.
dom0
Certaines distributions récentes (Debian, Ubuntu 14) ont abandonné ffmpeg et ont plutôt expédié sa fourche libav, vous devrez donc peut-être installer libav-toolset exécuter avconv -iau lieu deffmpeg -i
bain
Pouvez-vous s'il vous plaît me guider sur le débit vidéo en utilisant l'exemple de sortie suivant? Entrée # 0, flv, à partir de 'mi-cc-03-bed_and_breakfast.flv': Durée: 00: 00: 18.7, démarrage: 0.000000, débit binaire: 64 kb / s Flux # 0.0: Vidéo: flv, yuv420p, 480x360, 29.92 fps (r) Stream # 0.1: Audio: mp3, 44100 Hz, stéréo, 64 kb / s Doit fournir au moins un fichier de sortie
Zain Ali
5
avprobe -show_streams file.avi
delcroip
la source
1
Pour afficher le débit binaire global, il vaut mieux utiliser -show_format, voire mieux (sur * nix) avprobe -show_format file.avi | grep bit_rate. La même syntaxe fonctionnera également pour ffprobe.
evilsoup
2

Voici un autre outil qui fait la même chose:, tcprobequi fait partie du transcodepackage. Utilisez le -icommutateur pour obtenir un vidage d'informations du fichier (exemple de sortie du même fichier que dans l' mplayerexemple):

$ 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
Quack Quichotte
la source
2

Obtenez exactement le débit vidéo via mediainfo :
$ mediainfo --Output='Video;%BitRate%' '/MY/MEDIA/FILE.MP4'
ou en Kbps:
$ mediainfo --Output='Video;%BitRate/String%'

Obtenez exactement le débit audio via mediainfo en bps:
$ mediainfo --Output='Audio;%BitRate%' '/MY/MEDIA/FILE.MP4'
ou en Kbps:
$ mediainfo --Output='Audio;%BitRate/String%' '/MY/MEDIA/FILE.MP4'

superqwerty
la source
0

Voici une réponse bash copier-coller utilisant avprobe (qui vient avec avconv et peut-être ffmpeg) au cas où vous ne voudriez que le nombre (pour plus de scripts)

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

Cela fonctionne comme ça. Cette ligne obtient des informations sur le fichier (en supprimant des informations supplémentaires sur stdout):

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

grepSélectionne ensuite la ligne qui mentionne le débit binaire

grep "bit_rate"

Dont sedpuis extrait le bitrate (en bits / seconde)

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

Pour faire court, copiez la fonction dans la première ligne et ensuite vous pouvez faire

$ bitrate test.mp4
593567

(ce n'est pas une vidéo de haute qualité, 593 kb / s, car le débit binaire utilise 1000 au lieu de 1024 apparemment)

marque
la source
0

J'ai essayé d'obtenir les mêmes informations mais juste ces données pour les utiliser dans une boucle bash .. et je les ai! Utilisation de FFPROBE!

FFPROBE: hide_banner: masquer les informations d'en-tête, loglevel 0 ne nous donne que nos informations requises, select_streams spécifie sur quel flux (vidéo) nous travaillons, show_entries nous permet de spécifier les données que nous voulons spécifiquement

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

vous obtenez: format.bit_rate = "1085360"

Fernando Guerra
la source