Что такое хороший инструмент командной строки, чтобы получить видео битрейт файла 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'
или в кбит / с:
$ mediainfo --Output='Video;%BitRate/String%'
Получить именно аудио битрейт через mediainfo в бит / с:
$ mediainfo --Output='Audio;%BitRate%' '/MY/MEDIA/FILE.MP4'
или в кбит / с:
$ 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)
Я пытался получить ту же информацию, но только эти данные, чтобы использовать ее в цикле bash ... и я понял! Используя FFPROBE!
FFPROBE: hide_banner: скрыть информацию заголовка, уровень логики 0 дает нам только необходимую информацию, select_streams указывает, над каким потоком (видео) мы работаем, show_entries позволяет нам указать, какие именно данные нам нужны
fer @ FerPC: ~ / Downloads / TEMP $ ffprobe -hide_banner -loglevel 0 -плоского -i 'Eng_Sub_EP.1_1_4.mkv' -select_streams v -show_entries 'format = bit_rate'
вы получите: format.bit_rate = "1085360"