Qual è un buon strumento da riga di comando per ottenere il bitrate video di un file avi divx o xvid per Linux?
Qual è un buon strumento da riga di comando per ottenere il bitrate video di un file avi divx o xvid per Linux?
Risposte:
Puoi usare MPlayer per ottenere tali informazioni.
$ mplayer -vo null -ao null -identify -frames 0 foo.avi
In particolare, si desidera l' -identify
opzione. L'opzione -frames 0
indica di non riprodurre il file e di -vo null -ao null
fornire driver null per video e audio (quindi è possibile utilizzare questo comando tramite SSH o un altro terminale non abilitato per X).
Puoi combinare questo con grep
o altri strumenti per estrarre la linea specifica che desideri:
$ 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 è simile al seguente:
$ 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
libav-tools
ed eseguire avconv -i
invece diffmpeg -i
Ecco un altro strumento che fa la stessa cosa:, tcprobe
che fa parte del transcode
pacchetto. Utilizzare l' -i
opzione per ottenere un dump di informazioni dal file (output di esempio dallo stesso file mplayer
nell'esempio):
$ 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
Ottieni esattamente il bitrate del 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'
Ecco una risposta bash copia-incolla usando avprobe (che viene fornito con avconv e forse ffmpeg) nel caso tu voglia 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 riga ottiene informazioni sul file (rimuovendo le informazioni extra su stdout):
avprobe -show_format test.mp4 2> /dev/null
Quindi grep
seleziona la linea che menziona bitrate
grep "bit_rate"
Da cui sed
quindi estrae il bitrate (in bit / secondo)
sed 's/.*bit_rate=\([0-9]\+\).*/\1/g';
Per farla breve, copia la funzione nella prima riga e poi puoi farlo
$ bitrate test.mp4
593567
(che non è un video di alta qualità, 593 kb / s, poiché il bitrate utilizza 1000 invece di 1024 apparentemente)
Ho cercato di ottenere le stesse informazioni ma solo quei dati per usarle in un ciclo bash .. e ce l'ho! Usando FFPROBE!
FFPROBE: hide_banner: nascondi informazioni intestazione, loglevel 0 forniscici solo le informazioni richieste, select_streams specifica su quale stream (video) stiamo lavorando, show_entries ci consente di specificare quali dati specificamente vogliamo
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'
ottieni: format.bit_rate = "1085360"