mirror of https://github.com/stashapp/stash.git
60 lines
2.0 KiB
Go
60 lines
2.0 KiB
Go
|
package ffmpeg
|
||
|
|
||
|
type Container string
|
||
|
type ProbeAudioCodec string
|
||
|
|
||
|
const (
|
||
|
Mp4 Container = "mp4"
|
||
|
M4v Container = "m4v"
|
||
|
Mov Container = "mov"
|
||
|
Wmv Container = "wmv"
|
||
|
Webm Container = "webm"
|
||
|
Matroska Container = "matroska"
|
||
|
Avi Container = "avi"
|
||
|
Flv Container = "flv"
|
||
|
Mpegts Container = "mpegts"
|
||
|
|
||
|
Aac ProbeAudioCodec = "aac"
|
||
|
Mp3 ProbeAudioCodec = "mp3"
|
||
|
Opus ProbeAudioCodec = "opus"
|
||
|
Vorbis ProbeAudioCodec = "vorbis"
|
||
|
MissingUnsupported ProbeAudioCodec = ""
|
||
|
|
||
|
Mp4Ffmpeg string = "mov,mp4,m4a,3gp,3g2,mj2" // browsers support all of them
|
||
|
M4vFfmpeg string = "mov,mp4,m4a,3gp,3g2,mj2" // so we don't care that ffmpeg
|
||
|
MovFfmpeg string = "mov,mp4,m4a,3gp,3g2,mj2" // can't differentiate between them
|
||
|
WmvFfmpeg string = "asf"
|
||
|
WebmFfmpeg string = "matroska,webm"
|
||
|
MatroskaFfmpeg string = "matroska,webm"
|
||
|
AviFfmpeg string = "avi"
|
||
|
FlvFfmpeg string = "flv"
|
||
|
MpegtsFfmpeg string = "mpegts"
|
||
|
H264 string = "h264"
|
||
|
H265 string = "h265" // found in rare cases from a faulty encoder
|
||
|
Hevc string = "hevc"
|
||
|
Vp8 string = "vp8"
|
||
|
Vp9 string = "vp9"
|
||
|
Mkv string = "mkv" // only used from the browser to indicate mkv support
|
||
|
Hls string = "hls" // only used from the browser to indicate hls support
|
||
|
)
|
||
|
|
||
|
var ffprobeToContainer = map[string]Container{
|
||
|
Mp4Ffmpeg: Mp4,
|
||
|
WmvFfmpeg: Wmv,
|
||
|
AviFfmpeg: Avi,
|
||
|
FlvFfmpeg: Flv,
|
||
|
MpegtsFfmpeg: Mpegts,
|
||
|
MatroskaFfmpeg: Matroska,
|
||
|
}
|
||
|
|
||
|
func MatchContainer(format string, filePath string) (Container, error) { // match ffprobe string to our Container
|
||
|
container := ffprobeToContainer[format]
|
||
|
if container == Matroska {
|
||
|
return magicContainer(filePath) // use magic number instead of ffprobe for matroska,webm
|
||
|
}
|
||
|
if container == "" { // if format is not in our Container list leave it as ffprobes reported format_name
|
||
|
container = Container(format)
|
||
|
}
|
||
|
return container, nil
|
||
|
}
|