ฉันจะรับบิตเรตของวิดีโอจากบรรทัดคำสั่งใน Linux ได้อย่างไร


18

เครื่องมือบรรทัดคำสั่งที่ดีในการรับบิตเรตวิดีโอของไฟล์ divx หรือ xvid avi สำหรับ linux คืออะไร


ffplayer แสดงไนเตรตปัจจุบันในขณะที่เล่นวิดีโอ
Biswapriyo

คำตอบ:


16

คุณสามารถใช้ 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)

1
PS manpage mplayer เป็นฝันร้าย ...
นักต้มตุ๋น Quixote

สำหรับผู้ที่ไม่รู้ตัวนี่เป็นสิ่งที่ midentify.sh ทำสคริปต์ที่มาพร้อมกับ mplayer
Jonah Braun

ธงจะต้องมีการปรับปรุง ฉันได้รับ 'ตัวเลือกที่ไม่ถูกต้อง -' o 'ใน Ubuntu 13.04
hnns

17

ffmpeg ทำงานได้ดี:

ffmpeg -i file.avi

ffmpeg เหนือกว่าเมื่อ mplayer ล้มเหลว
dom0

บางดิสทริบิวชันล่าสุด (Debian, Ubuntu 14) ปล่อย ffmpeg และส่ง libav ทางแยกดังนั้นคุณอาจต้องติดตั้งlibav-toolsและเรียกใช้avconv -iแทนffmpeg -i
bain

คุณช่วยแนะนำฉันหน่อยได้ไหมว่าวิดีโอบิตเรตอะไรที่ใช้เอาต์พุตตัวอย่างต่อไปนี้ อินพุต # 0, flv จาก 'mi-cc-03-bed_and_breakfast.flv': ระยะเวลา: 00: 00: 18.7, เริ่มต้น: 0.000000, บิตเรต: 64 kb / s สตรีม # 0.0: วิดีโอ: flv, yuv420p, 480x360, 29.92 fps (r) สตรีม # 0.1: เสียง: mp3, 44100 Hz, สเตอริโอ, 64 kb / s ต้องใส่ไฟล์เอาต์พุตอย่างน้อยหนึ่งไฟล์
Zain Ali

5
avprobe -show_streams file.avi

1
เพื่อแสดงอัตราบิตโดยรวมคุณต้องการจะดีกว่าใช้-show_formatหรือดียิ่งขึ้น (บนระวัง avprobe -show_format file.avi | grep bit_rate*) ไวยากรณ์เดียวกันนี้จะทำงานกับ ffprobe ด้วย
evilsoup

2

นี่เป็นอีกเครื่องมือที่ทำสิ่งเดียวกัน: 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

2

รับบิตเรตวิดีโอผ่าน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'


0

นี่คือคำตอบคัดลอกวาง 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 kb / s เนื่องจากบิตเรตใช้ 1,000 แทน 1024 อย่างชัดเจน)


0

ฉันพยายามรับข้อมูลเดียวกัน แต่เพียงแค่ข้อมูลนั้นเพื่อใช้ในวง bash .. และฉันเข้าใจแล้ว! ใช้ FFPROBE!

FFPROBE: hide_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"

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.