Czy istnieje polecenie analogiczne do afinfo dla filmów na Mac OS X?

12

Mac OS X ma polecenie afinfopobierania informacji o pliku audio. Czy istnieje podobne polecenie do pobierania informacji o pliku wideo dla wideo ( .mov, .m4v) inne niż mdlspolecenie?

palenie tytoniu
źródło

Odpowiedzi:

28

Żadne z samego OS X.

Możesz pobrać interfejs wiersza polecenia MediaInfo (patrz łącze „CLI” pod x64). Jest również dostępny w pakiecie Homebrewmedia-info .

Przykładowe użycie terminala:

$ mediainfo myMovie.mov

W przypadku filmu wideo powstanie coś takiego:

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
źródło
Również port install mediainfojeśli używasz ports.
toddkaufmann
5

Wiele informacji można uzyskać za pomocą wbudowanego polecenia mdls, które jest narzędziem metadanych pliku ogólnego przeznaczenia. Działa nie tylko dla plików wideo, ale dla wszystkich typów plików. Jest to narzędzie używane przez wyszukiwarkę, gdy używasz polecenia menu „pobierz informacje”.

Oto część danych wyjściowych, które otrzymuję po wydaniu polecenia w pliku mp4 o nazwie 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

Ponadto możesz określić, który atrybut ma być na liście. Na przykład, aby uzyskać tylko czas trwania filmu:

$ mdls -name kMDItemDurationSeconds forest.mp4
kMDItemDurationSeconds = 29.96166666666667
BrunoFrechette
źródło
Myślę, że to bardzo dobra odpowiedź, ponieważ używa tego samego narzędzia co system i działa od razu po wyjęciu z pudełka. Powinien był wygrać;)
Christian Tismer
0

Jeśli jest to pomocne, oto mały skrypt, który wyświetla nazwę pliku i długość wszystkich MP4 w określonym katalogu:

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

Nie działa, jeśli w nazwach plików są spacje. Jeśli Twoje filmy> 1 godzina, po prostu dostosuj REGEXP do swoich potrzeb.

Ric
źródło
0

Mała poprawa w stosunku do używania mediainfo.

Będziesz potrzebował jq( brew install jq) i używał danych wyjściowych JSON zmediainfo

Następnie możesz użyć go jako samodzielnego skryptu lub umieścić w swoim ~/.bashrclub ~/.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
źródło