มีคำสั่งที่คล้ายกับ afinfo สำหรับวิดีโอใน Mac OS X หรือไม่


12

Mac OS X มีคำสั่งafinfoให้ดึงข้อมูลไฟล์เสียง มีคำสั่งที่คล้ายกันเพื่อดึงข้อมูลไฟล์วิดีโอสำหรับวิดีโอ ( .mov, .m4v) นอกเหนือจากmdlsคำสั่งหรือไม่

คำตอบ:


28

ไม่มีที่มาพร้อมกับ 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

นอกจากนี้หากมีการใช้port install mediainfo ports
toddkaufmann

5

คุณสามารถรับข้อมูลได้มากโดยใช้คำสั่ง 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

ฉันคิดว่านี่เป็นคำตอบที่ดีมากเพราะใช้เครื่องมือเดียวกับระบบและทำงานนอกกรอบ มันควรจะชนะ;)
Christian Tismer

0

หากเป็นประโยชน์ต่อไปนี้เป็นสคริปต์เล็กน้อยสำหรับส่งออกชื่อไฟล์และความยาวสำหรับ 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 ให้เหมาะสม


0

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