Mac OS X มีคำสั่งafinfo
ให้ดึงข้อมูลไฟล์เสียง มีคำสั่งที่คล้ายกันเพื่อดึงข้อมูลไฟล์วิดีโอสำหรับวิดีโอ ( .mov
, .m4v
) นอกเหนือจากmdls
คำสั่งหรือไม่
Mac OS X มีคำสั่งafinfo
ให้ดึงข้อมูลไฟล์เสียง มีคำสั่งที่คล้ายกันเพื่อดึงข้อมูลไฟล์วิดีโอสำหรับวิดีโอ ( .mov
, .m4v
) นอกเหนือจากmdls
คำสั่งหรือไม่
คำตอบ:
ไม่มีที่มาพร้อมกับ OS X เอง
คุณสามารถดาวน์โหลดอินเตอร์เฟสบรรทัดคำสั่ง MediaInfo (ดูลิงก์ "CLI" ใต้ x64) นอกจากนี้ยังมีให้บริการผ่านHomebrewในmedia-info
แพ็คเกจ
การใช้ขั้วตัวอย่าง:
$ mediainfo myMovie.mov
สำหรับวิดีโอมันจะสร้างผลลัพธ์ออกมาดังนี้:
Format : MPEG-4
Format profile : QuickTime
Format settings : Compressed header
Codec ID : qt
File size : 12.1 MiB
Duration : 2mn 27s
Overall bit rate mode : Variable
Overall bit rate : 689 Kbps
Encoded date : UTC 2006-06-13 06:43:09
Tagged date : UTC 2006-06-13 06:43:12
Writing library : Apple QuickTime
Video #1
ID : 2
Format : AVC
Format/Info : Advanced Video Codec
Format profile : Main@L2.1
Format settings, CABAC : No
Format settings, ReFrames : 2 frames
Format settings, GOP : M=2, N=24
Codec ID : avc1
Codec ID/Info : Advanced Video Coding
Duration : 2mn 23s
Source duration : 2mn 23s
Bit rate mode : Variable
Bit rate : 569 Kbps
Maximum bit rate : 770 Kbps
Width : 320 pixels
Height : 240 pixels
Display aspect ratio : 4:3
Frame rate mode : Constant
Frame rate : 24.975 fps
Color space : YUV
Chroma subsampling : 4:2:0
Bit depth : 8 bits
Scan type : Progressive
Bits/(Pixel*Frame) : 0.297
Stream size : 9.74 MiB (80%)
Source stream size : 9.74 MiB (80%)
Language : English
Encoded date : UTC 2006-06-13 06:18:04
Tagged date : UTC 2006-06-13 06:43:12
Color primaries : BT.601-6 525, BT.1358 525, BT.1700 NTSC, SMPTE 170M
Transfer characteristics : BT.709-5, BT.1361
Matrix coefficients : BT.601-6 525, BT.1358 525, BT.1700 NTSC, SMPTE 170M
คุณสามารถรับข้อมูลได้มากโดยใช้คำสั่ง mdls builtin ซึ่งเป็นยูทิลิตี้เมทาดาทาของไฟล์วัตถุประสงค์ทั่วไป มันใช้งานได้ไม่เพียง แต่สำหรับไฟล์วิดีโอ แต่สำหรับไฟล์ทุกประเภท มันเป็นยูทิลิตีที่เครื่องมือค้นหาใช้เมื่อคุณใช้คำสั่งเมนู "รับข้อมูล"
นี่เป็นส่วนหนึ่งของผลลัพธ์ที่ฉันได้รับเมื่อใช้คำสั่งในไฟล์ mp4 ชื่อ forest.mp4
$mdls forest.mp4
kMDItemCodecs = (
"H.264"
)
kMDItemContentCreationDate = 2014-10-17 05:08:09 +0000
kMDItemContentModificationDate = 2014-10-17 05:08:09 +0000
kMDItemContentType = "public.mpeg-4"
kMDItemContentTypeTree = (
"public.mpeg-4",
"public.movie",
"public.audiovisual-content",
"public.data",
"public.item",
"public.content"
)
kMDItemDateAdded = 2016-01-11 20:30:01 +0000
kMDItemDisplayName = "forest.mp4"
kMDItemDownloadedDate = (
"2014-12-08 15:11:56 +0000"
)
kMDItemDurationSeconds = 29.96166666666667
kMDItemFSContentChangeDate = 2014-10-17 05:08:09 +0000
kMDItemFSCreationDate = 2014-10-17 05:08:09 +0000
kMDItemFSCreatorCode = ""
kMDItemFSFinderFlags = 0
kMDItemFSHasCustomIcon = (null)
kMDItemFSInvisible = 0
kMDItemFSIsExtensionHidden = 0
kMDItemFSIsStationery = (null)
kMDItemFSLabel = 0
kMDItemFSName = "forest.mp4"
kMDItemFSNodeCount = (null)
kMDItemFSOwnerGroupID = 20
kMDItemFSOwnerUserID = 501
kMDItemFSSize = 45363721
kMDItemFSTypeCode = ""
kMDItemKind = "MPEG-4 Movie"
kMDItemLogicalSize = 45363721
kMDItemMediaTypes = (
Video
)
kMDItemPhysicalSize = 45367296
kMDItemPixelHeight = 1080
kMDItemPixelWidth = 1920
kMDItemStreamable = 0
kMDItemTotalBitRate = 12110
kMDItemVideoBitRate = 12110
นอกจากนี้คุณสามารถระบุแอตทริบิวต์ที่คุณต้องการในรายการ ตัวอย่างเช่นเพื่อให้ได้ระยะเวลาของภาพยนตร์เท่านั้น:
$ mdls -name kMDItemDurationSeconds forest.mp4
kMDItemDurationSeconds = 29.96166666666667
หากเป็นประโยชน์ต่อไปนี้เป็นสคริปต์เล็กน้อยสำหรับส่งออกชื่อไฟล์และความยาวสำหรับ MP4 ทั้งหมดในไดเรกทอรีที่ระบุ:
#! /bin/bash
# get video length of file.
for MP4 in `ls *mp4`
do
echo "\"$MP4\",\c"
mediainfo $MP4 | grep "^Duration" | head -1 | sed 's/^.*: \([0-9][0-9]*\)mn *\([0-9][0-9]*\)s/00:\1:\2/'
done
# END
ไม่ทำงานหากมีช่องว่างในชื่อไฟล์ หากวิดีโอของคุณ> 1 ชม. เพียงปรับ REGEXP ให้เหมาะสม
mediainfo
ปรับปรุงเล็กมากกว่าการใช้
คุณจะต้องjq
( brew install jq
) และใช้เอาต์พุต JSON จากmediainfo
จากนั้นคุณสามารถใช้มันเป็นสคริปต์แบบสแตนด์อโลนหรือใส่ไว้ในของคุณ~/.bashrc
หรือ~/.zshrc
:
#!/bin/bash
IFS=$'\n'
# accepts any list of files, eg. video_times *.{mp4,mov}
video_times() {
for file in $* ; do
duration=$(mediainfo --Output=JSON "$file" | jq -r '.media.track[] | select(."@type"=="General") | .Duration | tonumber | floor')
minutes=$(($duration / 60))
seconds=$(($duration % 60))
echo "$file: ${minutes}m${seconds}s"
done
}
video_times $*
port install mediainfo
ports