Який хороший інструмент командного рядка для отримання відео бітрейту файлу divx або xvid avi для Linux?
Який хороший інструмент командного рядка для отримання відео бітрейту файлу divx або xvid avi для Linux?
Відповіді:
Ви можете використовувати MPlayer для отримання цієї інформації.
$ mplayer -vo null -ao null -identify -frames 0 foo.avi
Зокрема, ви хочете -identify
варіант. Цей параметр -frames 0
повідомляє йому не відтворювати файл і -vo null -ao null
надавати йому нульові драйвери для відео та аудіо (тому ви можете використовувати цю команду через SSH або інший невключений X-термінал).
Ви можете комбінувати це з grep
іншими інструментами, щоб витягнути потрібну лінію:
$ 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)
Повний вихід виглядає приблизно так:
$ 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 працює чудово:
ffmpeg -i file.avi
libav-tools
і запустити avconv -i
замістьffmpeg -i
Ось ще один інструмент, який робить те саме:, tcprobe
що є частиною transcode
пакету. Використовуйте -i
перемикач, щоб отримати інформаційний дамп із файлу (зразок виводу з того самого файлу, як у 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
Отримайте саме бітрейт відео через mediainfo :
$ mediainfo --Output='Video;%BitRate%' '/MY/MEDIA/FILE.MP4'
або в Kbps:
$ mediainfo --Output='Video;%BitRate/String%'
Отримайте точно бітрейт аудіо через mediainfo в bps:
$ mediainfo --Output='Audio;%BitRate%' '/MY/MEDIA/FILE.MP4'
або в Kbps:
$ mediainfo --Output='Audio;%BitRate/String%' '/MY/MEDIA/FILE.MP4'
Ось відповідь на копіювання та вставку bash за допомогою avprobe (яка постачається з avconv і, можливо, ffmpeg), якщо ви хочете лише номер (для подальшого скриптування)
function bitrate () { avprobe -show_format "$1" 2> /dev/null | grep "bit_rate" | sed 's/.*bit_rate=\([0-9]\+\).*/\1/g'; }
Це працює так. Цей рядок отримує інформацію про файл (видалення додаткової інформації про stdout):
avprobe -show_format test.mp4 2> /dev/null
Потім grep
вибирається рядок, в якому згадується бітрейт
grep "bit_rate"
З якого sed
потім витягує бітрейт (в біт / секунду)
sed 's/.*bit_rate=\([0-9]\+\).*/\1/g';
Короткий короткий опис, скопіюйте функцію в перший рядок, і тоді ви можете це зробити
$ bitrate test.mp4
593567
(це не високоякісне відео, 593 кб / с, оскільки бітрейт використовує 1000 замість 1024, мабуть)
Я намагався отримати таку ж інформацію, але просто ті дані, щоб використовувати її в баш-циклі .. і я це отримав! Використовуючи FFPROBE!
FFPROBE: hid_banner: приховати інформацію заголовка, loglevel 0 дайте нам лише нашу необхідну інформацію, select_streams вкажіть, над яким потоком (відео) ми працюємо, show_entries дамо нам вказати, які дані конкретно ми хочемо
fer @ FerPC: ~ / Завантаження / TEMP $ ffprobe -hide_banner -loglevel 0 -of flat -i 'Eng_Sub_EP.1_1_4.mkv' -select_streams v -show_entries 'format = bit_rate'
ви отримуєте: format.bit_rate = "1085360"