Gibt es einen Befehl analog zu afinfo für Videos unter Mac OS X?

12

Mac OS X verfügt über den Befehl afinfozum Abrufen von Audiodatei-Informationen. Gibt es einen ähnlichen Befehl zum Abrufen von Videodatei-Informationen für Videos ( .mov, .m4v) außer dem mdlsBefehl?

Smokinguns
quelle

Antworten:

27

Keine, die mit OS X selbst geliefert wird.

Sie können die MediaInfo-Befehlszeilenschnittstelle herunterladen (siehe den Link "CLI" unter x64). Es ist auch über Homebrew im media-infoPaket erhältlich.

Beispiel für die Verwendung des Terminals:

$ mediainfo myMovie.mov

Für ein Video wird ungefähr die folgende Ausgabe erzeugt:

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                           : [email protected]
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
slhck
quelle
Auch port install mediainfobei Verwendung ports.
Toddkaufmann
5

Mit dem integrierten Befehl mdls, einem allgemeinen Dienstprogramm für Dateimetadaten, können Sie viele Informationen abrufen. Es funktioniert nicht nur für Videodateien, sondern für alle Arten von Dateien. Dies ist das Dienstprogramm, das vom Finder verwendet wird, wenn Sie den Menübefehl "get info" verwenden.

Hier ist ein Teil der Ausgabe, die ich mit dem Befehl für eine mp4-Datei namens forest.mp4 erhalte

$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

Darüber hinaus können Sie angeben, welches Attribut aufgelistet werden soll. Zum Beispiel, um nur die Dauer des Films zu erhalten:

$ mdls -name kMDItemDurationSeconds forest.mp4
kMDItemDurationSeconds = 29.96166666666667
BrunoFrechette
quelle
Ich denke, dies ist eine sehr gute Antwort, da es das gleiche Tool wie das System verwendet und sofort funktioniert. Es hätte gewinnen sollen;)
Christian Tismer
0

Wenn es hilfreich ist, finden Sie hier ein kleines Skript zum Ausgeben des Dateinamens und der Länge für alle MP4s in einem bestimmten Verzeichnis:

#! /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

Funktioniert nicht, wenn die Dateinamen Leerzeichen enthalten. Wenn deine Videos länger als 1 Stunde dauern, passe den REGEXP einfach an.

Ric
quelle
0

Kleine Verbesserung gegenüber der Verwendung mediainfo.

Sie benötigen jq( brew install jq) und verwenden die JSON-Ausgabe vonmediainfo

Dann können Sie es als eigenständiges Skript verwenden oder in Ihr ~/.bashrcoder einfügen ~/.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 $*
Bonkey
quelle