Help us shape the future of Go! Take the 2026 Go Developer Survey

mediainfo

package module
v0.0.0-...-871a2fe Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 17, 2016 License: MIT Imports: 5 Imported by: 2

README

mediainfo

Golang binding for libmediainfo

Duration, Bitrate, Codec, Streams and a lot of other meta-information about media files can be extracted through it.

For now supports only media files with one stream. Bindings for MediaInfoList is not provided. It can be easy fixed if anybody ask me.

Works through MediaInfoDLL/MediaInfoDLL.h(dynamic load and so on), so your mediainfo installation should has it.

Supports direct reading files by name and reading data from []byte buffers(without copying it for C calls).

Documentation for libmediainfo is poor and ascetic, can be found here.

Your advices and suggestions are welcome!

Simple Example

package main

import (
    "fmt"
    mediainfo "github.com/jie123108/go_mediainfo"
    "os"
)

func main() {
    info, err := mediainfo.GetMediaInfo(os.Args[1])
    if err != nil {
        fmt.Printf("open failed: %v\n", err)
        os.Exit(1)
    }
    fmt.Printf("%v\n", info)
}

Example

package main

import (
    "fmt"
    mediainfo "github.com/jie123108/go_mediainfo"
    "os"
)

func main() {
    mi := mediainfo.NewMediaInfo()
    err := mi.OpenFile(os.Args[1])
    if err != nil {
        fmt.Printf("open failed: %v\n", err)
        os.Exit(1)
    }
    defer mi.Close()
    video := &mediainfo.SimpleMediaInfo{}
    g := &video.General
    g.DurationStr = mi.Get(mediainfo.MediaInfo_Stream_General, "Duration/String3")
    g.Duration = mi.GetInt(mediainfo.MediaInfo_Stream_General, "Duration")
    g.Start = mi.GetInt(mediainfo.MediaInfo_Stream_General, "Start")
    g.BitRate = mi.GetInt(mediainfo.MediaInfo_Stream_General, "OverallBitRate")
    g.FrameRate = mi.GetInt(mediainfo.MediaInfo_Stream_General, "FrameRate")
    g.FileSize = mi.GetInt(mediainfo.MediaInfo_Stream_General, "FileSize")

    g.GeneralCount = int(mi.GetInt(mediainfo.MediaInfo_Stream_General, "GeneralCount"))
    g.VideoCount = int(mi.GetInt(mediainfo.MediaInfo_Stream_General, "VideoCount"))
    g.AudioCount = int(mi.GetInt(mediainfo.MediaInfo_Stream_General, "AudioCount"))
    g.TextCount = int(mi.GetInt(mediainfo.MediaInfo_Stream_General, "TextCount"))
    g.OtherCount = int(mi.GetInt(mediainfo.MediaInfo_Stream_General, "OtherCount"))
    g.ImageCount = int(mi.GetInt(mediainfo.MediaInfo_Stream_General, "ImageCount"))
    g.MenuCount = int(mi.GetInt(mediainfo.MediaInfo_Stream_General, "MenuCount"))

    v := &video.Video
    v.CodecID = mi.Get(mediainfo.MediaInfo_Stream_Video, "CodecID")
    v.BitRate = mi.GetInt(mediainfo.MediaInfo_Stream_Video, "BitRate")
    v.Width = mi.GetInt(mediainfo.MediaInfo_Stream_Video, "Width")
    v.Height = mi.GetInt(mediainfo.MediaInfo_Stream_Video, "Height")
    v.Resolution = fmt.Sprintf("%dx%d", v.Width, v.Height)
    v.DAR = mi.Get(mediainfo.MediaInfo_Stream_Video, "DisplayAspectRatio/String")

    a := &video.Audio
    a.CodecID = mi.Get(mediainfo.MediaInfo_Stream_Audio, "CodecID")
    a.SamplingRate = mi.GetInt(mediainfo.MediaInfo_Stream_Audio, "SamplingRate")
    a.BitRate = mi.GetInt(mediainfo.MediaInfo_Stream_Audio, "BitRate")

    video.SubtitlesCnt = int(mi.GetInt(mediainfo.MediaInfo_Stream_Text, "StreamCount"))
    for i := 0; i < video.SubtitlesCnt; i++ {
        Format := mi.GetIdx(mediainfo.MediaInfo_Stream_Text, i, "Format")
        CodecID := mi.GetIdx(mediainfo.MediaInfo_Stream_Text, i, "CodecID")
        Title := mi.GetIdx(mediainfo.MediaInfo_Stream_Text, i, "Title")
        subtitles := mediainfo.SubtitlesInfo{Format: Format, CodecID: CodecID, Title: Title}
        video.Subtitles = append(video.Subtitles, subtitles)
    }
    fmt.Printf("%v\n", video)
}

Read the documentation for other functions

Contributing

You know=)

Documentation

Index

Constants

View Source
const (
	MediaInfo_Stream_General = iota
	MediaInfo_Stream_Video
	MediaInfo_Stream_Audio
	MediaInfo_Stream_Text
	MediaInfo_Stream_Other
	MediaInfo_Stream_Image
	MediaInfo_Stream_Menu
)

Variables

This section is empty.

Functions

This section is empty.

Types

type AudioInfo

type AudioInfo struct {
	CodecID      string //CodecID
	SamplingRate int64  //SamplingRate
	BitRate      int64  //BitRate: Bit rate in bps
}

type GeneralInfo

type GeneralInfo struct {
	Codec       string //Codec
	Format      string //Format
	DurationStr string //Duration/String3          : Play time in format : HH:MM:SS.MMM
	Duration    int64  //Duration Play time of the stream in ms
	Start       int64  //Start
	BitRate     int64  //OverallBitRate  Bit rate of all streams in bps
	FrameRate   int64  //FrameRate Frames per second
	FileSize    int64  //File size in bytes

	GeneralCount int //Number of general streams
	VideoCount   int //Number of video streams
	AudioCount   int //Number of audio streams
	TextCount    int //Number of text streams
	OtherCount   int //Number of other streams
	ImageCount   int //Number of image streams
	MenuCount    int //Number of menu streams
}

type MediaInfo

type MediaInfo struct {
	// contains filtered or unexported fields
}

MediaInfo - represents MediaInfo class, all interaction with libmediainfo through it

func NewMediaInfo

func NewMediaInfo() *MediaInfo

NewMediaInfo - constructs new MediaInfo

func (*MediaInfo) AvailableParameters

func (mi *MediaInfo) AvailableParameters() string

AvailableParameters returns string with all available Get params and it's descriptions

func (*MediaInfo) Close

func (mi *MediaInfo) Close()

Close - closes file

func (*MediaInfo) Get

func (mi *MediaInfo) Get(stream_type int, param string) (result string)

Get - allow to read info from file

func (*MediaInfo) GetIdx

func (mi *MediaInfo) GetIdx(stream_type int, stream_idx int, param string) (result string)

GetIdx - allow to read info from file

func (*MediaInfo) GetInt

func (mi *MediaInfo) GetInt(stream_type int, param string) (ivalue int64)

GetInt - allow to read info as int from file

func (*MediaInfo) GetIntIdx

func (mi *MediaInfo) GetIntIdx(stream_type int, stream_idx int, param string) (ivalue int64)

GetIntIdx - allow to read info as int from file

func (*MediaInfo) Inform

func (mi *MediaInfo) Inform() (result string)

Inform returns string with summary file information, like mediainfo util

func (*MediaInfo) OpenFile

func (mi *MediaInfo) OpenFile(path string) error

OpenFile - opens file

func (*MediaInfo) OpenMemory

func (mi *MediaInfo) OpenMemory(bytes []byte) error

OpenMemory - opens memory buffer

func (*MediaInfo) Option

func (mi *MediaInfo) Option(option string, value string) (result string)

Option configure or get information about MediaInfoLib

type SimpleMediaInfo

type SimpleMediaInfo struct {
	General      GeneralInfo
	Video        VideoInfo
	Audio        AudioInfo
	SubtitlesCnt int
	Subtitles    []SubtitlesInfo
}

func GetMediaInfo

func GetMediaInfo(filename string) (info *SimpleMediaInfo, err error)

GetMediaInfo returns SimpleMediaInfo of given file

type SubtitlesInfo

type SubtitlesInfo struct {
	Format  string //Format UTF-8
	CodecID string //CodecID S_TEXT/UTF8
	Title   string //英文字幕
}

type VideoInfo

type VideoInfo struct {
	CodecID       string // CodecID
	BitRate       int64  // Bit rate in bps
	Resolution    string //WxH
	Width, Height int64  //Width,Height
	DAR           string //DisplayAspectRatio/String
}

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL