69 lines
1.5 KiB
Go
69 lines
1.5 KiB
Go
|
|
package ffmpeg
|
||
|
|
|
||
|
|
import (
|
||
|
|
"encoding/json"
|
||
|
|
ffmpeg "github.com/u2takey/ffmpeg-go"
|
||
|
|
)
|
||
|
|
|
||
|
|
type Probe struct {
|
||
|
|
Format Format
|
||
|
|
Streams []Stream
|
||
|
|
}
|
||
|
|
|
||
|
|
type Stream struct {
|
||
|
|
Index int
|
||
|
|
CodecName string `json:"codec_name"`
|
||
|
|
CodecLongName string `json:"codec_long_name"`
|
||
|
|
Profile string
|
||
|
|
CodecType string `json:"codec_type"`
|
||
|
|
CodecTag string `json:"codec_tag_string"`
|
||
|
|
Width int
|
||
|
|
Height int
|
||
|
|
StartTime float64 `json:"start_time,string"`
|
||
|
|
Duration float64 `json:",string"`
|
||
|
|
DurationTs int `json:"duration_ts"`
|
||
|
|
Tags Tags
|
||
|
|
}
|
||
|
|
|
||
|
|
type Format struct {
|
||
|
|
Path string `json:"filename"`
|
||
|
|
Streams int `json:"nb_streams"`
|
||
|
|
FormatName string `json:"format_name"`
|
||
|
|
FormatLongName string `json:"format_long_name"`
|
||
|
|
StartTime float64 `json:"start_time,string"`
|
||
|
|
Duration float64 `json:",string"`
|
||
|
|
Size int `json:",string"`
|
||
|
|
BitRate int `json:"bit_rate,string"`
|
||
|
|
Score int `json:"probe_score"`
|
||
|
|
Tags Tags
|
||
|
|
}
|
||
|
|
|
||
|
|
type Tags struct {
|
||
|
|
MajorBrand string `json:"major_brand"`
|
||
|
|
Title string
|
||
|
|
Artist string
|
||
|
|
AlbumArtist string `json:"album_artist"`
|
||
|
|
Album string
|
||
|
|
Date string
|
||
|
|
Encoder string
|
||
|
|
Comment string
|
||
|
|
Description string
|
||
|
|
Composer string
|
||
|
|
Genre string
|
||
|
|
Disc string
|
||
|
|
Track string
|
||
|
|
}
|
||
|
|
|
||
|
|
func ProbeFile(path string) Probe {
|
||
|
|
out, err := ffmpeg.Probe(path)
|
||
|
|
if err != nil {
|
||
|
|
panic(err)
|
||
|
|
}
|
||
|
|
ret := Probe{}
|
||
|
|
err = json.Unmarshal([]byte(out), &ret)
|
||
|
|
if err != nil {
|
||
|
|
panic(err)
|
||
|
|
}
|
||
|
|
return ret
|
||
|
|
}
|