1 Star 0 Fork 0

谢官峰/goffmpeg

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
media.go 23.26 KB
一键复制 编辑 原始数据 按行查看 历史
谢官峰 提交于 2021-05-25 12:00 +08:00 . fix
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229
package models
import (
"fmt"
"io"
"reflect"
"strconv"
"strings"
)
type Mediafile struct {
aspect string
resolution string
videoBitRate string
videoBitRateTolerance int
videoMaxBitRate int
videoMinBitrate int
videoCodec string
vframes int
frameRate int
audioRate int
maxKeyframe int
minKeyframe int
keyframeInterval int
audioCodec string
audioBitrate string
audioChannels int
audioVariableBitrate bool
bufferSize int
threadset bool
threads int
preset string
tune string
audioProfile string
videoProfile string
videoLevel string
target string
duration string
durationInput string
seekTime string
qscale uint32
crf uint32
strict int
muxDelay string
seekUsingTsInput bool
seekTimeInput string
inputPath string
inputPipe bool
inputPipeReader io.ReadCloser
inputPipeWriter io.Writer
outputPipe bool
outputPipeReader io.Reader
outputPipeWriter io.WriteCloser
movFlags string
hideBanner bool
outputPath string
outputFormat string
copyTs bool
nativeFramerateInput bool
inputInitialOffset string
rtmpLive string
hlsPlaylistType string
hlsListSize int
hlsSegmentDuration int
hlsMasterPlaylistName string
hlsSegmentFilename string
httpMethod string
httpKeepAlive bool
hwaccel string
streamIds map[int]string
metadata Metadata
videoFilter string
audioFilter string
skipVideo bool
skipAudio bool
compressionLevel int
mapMetadata string
tags map[string]string
encryptionKey string
movflags string
bframe int
pixFmt string
rawInputArgs []string
rawOutputArgs []string
}
/*** SETTERS ***/
func (m *Mediafile) SetAudioFilter(v string) {
m.audioFilter = v
}
func (m *Mediafile) SetVideoFilter(v string) {
m.videoFilter = v
}
// Deprecated: Use SetVideoFilter instead.
func (m *Mediafile) SetFilter(v string) {
m.SetVideoFilter(v)
}
func (m *Mediafile) SetAspect(v string) {
m.aspect = v
}
func (m *Mediafile) SetResolution(v string) {
m.resolution = v
}
func (m *Mediafile) SetVideoBitRate(v string) {
m.videoBitRate = v
}
func (m *Mediafile) SetVideoBitRateTolerance(v int) {
m.videoBitRateTolerance = v
}
func (m *Mediafile) SetVideoMaxBitrate(v int) {
m.videoMaxBitRate = v
}
func (m *Mediafile) SetVideoMinBitRate(v int) {
m.videoMinBitrate = v
}
func (m *Mediafile) SetVideoCodec(v string) {
m.videoCodec = v
}
func (m *Mediafile) SetVframes(v int) {
m.vframes = v
}
func (m *Mediafile) SetFrameRate(v int) {
m.frameRate = v
}
func (m *Mediafile) SetAudioRate(v int) {
m.audioRate = v
}
func (m *Mediafile) SetAudioVariableBitrate() {
m.audioVariableBitrate = true
}
func (m *Mediafile) SetMaxKeyFrame(v int) {
m.maxKeyframe = v
}
func (m *Mediafile) SetMinKeyFrame(v int) {
m.minKeyframe = v
}
func (m *Mediafile) SetKeyframeInterval(v int) {
m.keyframeInterval = v
}
func (m *Mediafile) SetAudioCodec(v string) {
m.audioCodec = v
}
func (m *Mediafile) SetAudioBitRate(v string) {
m.audioBitrate = v
}
func (m *Mediafile) SetAudioChannels(v int) {
m.audioChannels = v
}
func (m *Mediafile) SetPixFmt(v string) {
m.pixFmt = v
}
func (m *Mediafile) SetBufferSize(v int) {
m.bufferSize = v
}
func (m *Mediafile) SetThreads(v int) {
m.threadset = true
m.threads = v
}
func (m *Mediafile) SetPreset(v string) {
m.preset = v
}
func (m *Mediafile) SetTune(v string) {
m.tune = v
}
func (m *Mediafile) SetAudioProfile(v string) {
m.audioProfile = v
}
func (m *Mediafile) SetVideoProfile(v string) {
m.videoProfile = v
}
func (m *Mediafile) SetVideoLevel(v string) {
m.videoLevel = v
}
func (m *Mediafile) SetDuration(v string) {
m.duration = v
}
func (m *Mediafile) SetDurationInput(v string) {
m.durationInput = v
}
func (m *Mediafile) SetSeekTime(v string) {
m.seekTime = v
}
func (m *Mediafile) SetSeekTimeInput(v string) {
m.seekTimeInput = v
}
// Q Scale must be integer between 1 to 31 - https://trac.ffmpeg.org/wiki/Encode/MPEG-4
func (m *Mediafile) SetQScale(v uint32) {
m.qscale = v
}
func (m *Mediafile) SetCRF(v uint32) {
m.crf = v
}
func (m *Mediafile) SetStrict(v int) {
m.strict = v
}
func (m *Mediafile) SetSeekUsingTsInput(val bool) {
m.seekUsingTsInput = val
}
func (m *Mediafile) SetCopyTs(val bool) {
m.copyTs = val
}
func (m *Mediafile) SetInputPath(val string) {
m.inputPath = val
}
func (m *Mediafile) SetInputPipe(val bool) {
m.inputPipe = val
}
func (m *Mediafile) SetInputPipeReader(r io.ReadCloser) {
m.inputPipeReader = r
}
func (m *Mediafile) SetInputPipeWriter(w io.Writer) {
m.inputPipeWriter = w
}
func (m *Mediafile) SetOutputPipe(val bool) {
m.outputPipe = val
}
func (m *Mediafile) SetOutputPipeReader(r io.Reader) {
m.outputPipeReader = r
}
func (m *Mediafile) SetOutputPipeWriter(w io.WriteCloser) {
m.outputPipeWriter = w
}
func (m *Mediafile) SetMovFlags(val string) {
m.movFlags = val
}
func (m *Mediafile) SetHideBanner(val bool) {
m.hideBanner = val
}
func (m *Mediafile) SetMuxDelay(val string) {
m.muxDelay = val
}
func (m *Mediafile) SetOutputPath(val string) {
m.outputPath = val
}
func (m *Mediafile) SetOutputFormat(val string) {
m.outputFormat = val
}
func (m *Mediafile) SetNativeFramerateInput(val bool) {
m.nativeFramerateInput = val
}
func (m *Mediafile) SetRtmpLive(val string) {
m.rtmpLive = val
}
func (m *Mediafile) SetHlsListSize(val int) {
m.hlsListSize = val
}
func (m *Mediafile) SetHlsSegmentDuration(val int) {
m.hlsSegmentDuration = val
}
func (m *Mediafile) SetHlsPlaylistType(val string) {
m.hlsPlaylistType = val
}
func (m *Mediafile) SetHlsMasterPlaylistName(val string) {
m.hlsMasterPlaylistName = val
}
func (m *Mediafile) SetHlsSegmentFilename(val string) {
m.hlsSegmentFilename = val
}
func (m *Mediafile) SetHttpMethod(val string) {
m.httpMethod = val
}
func (m *Mediafile) SetHttpKeepAlive(val bool) {
m.httpKeepAlive = val
}
func (m *Mediafile) SetHardwareAcceleration(val string) {
m.hwaccel = val
}
func (m *Mediafile) SetInputInitialOffset(val string) {
m.inputInitialOffset = val
}
func (m *Mediafile) SetStreamIds(val map[int]string) {
m.streamIds = val
}
func (m *Mediafile) SetSkipVideo(val bool) {
m.skipVideo = val
}
func (m *Mediafile) SetSkipAudio(val bool) {
m.skipAudio = val
}
func (m *Mediafile) SetMetadata(v Metadata) {
m.metadata = v
}
func (m *Mediafile) SetCompressionLevel(val int) {
m.compressionLevel = val
}
func (m *Mediafile) SetMapMetadata(val string) {
m.mapMetadata = val
}
func (m *Mediafile) SetTags(val map[string]string) {
m.tags = val
}
func (m *Mediafile) SetBframe(v int) {
m.bframe = v
}
func (m *Mediafile) SetRawInputArgs(args []string) {
m.rawInputArgs = args
}
func (m *Mediafile) SetRawOutputArgs(args []string) {
m.rawOutputArgs = args
}
/*** GETTERS ***/
// Deprecated: Use VideoFilter instead.
func (m *Mediafile) Filter() string {
return m.VideoFilter()
}
func (m *Mediafile) VideoFilter() string {
return m.videoFilter
}
func (m *Mediafile) AudioFilter() string {
return m.audioFilter
}
func (m *Mediafile) Aspect() string {
return m.aspect
}
func (m *Mediafile) Resolution() string {
return m.resolution
}
func (m *Mediafile) VideoBitrate() string {
return m.videoBitRate
}
func (m *Mediafile) VideoBitRateTolerance() int {
return m.videoBitRateTolerance
}
func (m *Mediafile) VideoMaxBitRate() int {
return m.videoMaxBitRate
}
func (m *Mediafile) VideoMinBitRate() int {
return m.videoMinBitrate
}
func (m *Mediafile) VideoCodec() string {
return m.videoCodec
}
func (m *Mediafile) Vframes() int {
return m.vframes
}
func (m *Mediafile) FrameRate() int {
return m.frameRate
}
func (m *Mediafile) GetPixFmt() string {
return m.pixFmt
}
func (m *Mediafile) AudioRate() int {
return m.audioRate
}
func (m *Mediafile) MaxKeyFrame() int {
return m.maxKeyframe
}
func (m *Mediafile) MinKeyFrame() int {
return m.minKeyframe
}
func (m *Mediafile) KeyFrameInterval() int {
return m.keyframeInterval
}
func (m *Mediafile) AudioCodec() string {
return m.audioCodec
}
func (m *Mediafile) AudioBitrate() string {
return m.audioBitrate
}
func (m *Mediafile) AudioChannels() int {
return m.audioChannels
}
func (m *Mediafile) BufferSize() int {
return m.bufferSize
}
func (m *Mediafile) Threads() int {
return m.threads
}
func (m *Mediafile) Target() string {
return m.target
}
func (m *Mediafile) Duration() string {
return m.duration
}
func (m *Mediafile) DurationInput() string {
return m.durationInput
}
func (m *Mediafile) SeekTime() string {
return m.seekTime
}
func (m *Mediafile) Preset() string {
return m.preset
}
func (m *Mediafile) AudioProfile() string {
return m.audioProfile
}
func (m *Mediafile) VideoProfile() string {
return m.videoProfile
}
func (m *Mediafile) VideoLevel() string {
return m.videoLevel
}
func (m *Mediafile) Tune() string {
return m.tune
}
func (m *Mediafile) SeekTimeInput() string {
return m.seekTimeInput
}
func (m *Mediafile) QScale() uint32 {
return m.qscale
}
func (m *Mediafile) CRF() uint32 {
return m.crf
}
func (m *Mediafile) Strict() int {
return m.strict
}
func (m *Mediafile) MuxDelay() string {
return m.muxDelay
}
func (m *Mediafile) SeekUsingTsInput() bool {
return m.seekUsingTsInput
}
func (m *Mediafile) CopyTs() bool {
return m.copyTs
}
func (m *Mediafile) InputPath() string {
return m.inputPath
}
func (m *Mediafile) InputPipe() bool {
return m.inputPipe
}
func (m *Mediafile) InputPipeReader() io.ReadCloser {
return m.inputPipeReader
}
func (m *Mediafile) InputPipeWriter() io.Writer {
return m.inputPipeWriter
}
func (m *Mediafile) OutputPipe() bool {
return m.outputPipe
}
func (m *Mediafile) OutputPipeReader() io.Reader {
return m.outputPipeReader
}
func (m *Mediafile) OutputPipeWriter() io.WriteCloser {
return m.outputPipeWriter
}
func (m *Mediafile) MovFlags() string {
return m.movFlags
}
func (m *Mediafile) HideBanner() bool {
return m.hideBanner
}
func (m *Mediafile) OutputPath() string {
return m.outputPath
}
func (m *Mediafile) OutputFormat() string {
return m.outputFormat
}
func (m *Mediafile) NativeFramerateInput() bool {
return m.nativeFramerateInput
}
func (m *Mediafile) RtmpLive() string {
return m.rtmpLive
}
func (m *Mediafile) HlsListSize() int {
return m.hlsListSize
}
func (m *Mediafile) HlsSegmentDuration() int {
return m.hlsSegmentDuration
}
func (m *Mediafile) HlsMasterPlaylistName() string {
return m.hlsMasterPlaylistName
}
func (m *Mediafile) HlsSegmentFilename() string {
return m.hlsSegmentFilename
}
func (m *Mediafile) HlsPlaylistType() string {
return m.hlsPlaylistType
}
func (m *Mediafile) InputInitialOffset() string {
return m.inputInitialOffset
}
func (m *Mediafile) HttpMethod() string {
return m.httpMethod
}
func (m *Mediafile) HttpKeepAlive() bool {
return m.httpKeepAlive
}
func (m *Mediafile) HardwareAcceleration() string {
return m.hwaccel
}
func (m *Mediafile) StreamIds() map[int]string {
return m.streamIds
}
func (m *Mediafile) SkipVideo() bool {
return m.skipVideo
}
func (m *Mediafile) SkipAudio() bool {
return m.skipAudio
}
func (m *Mediafile) Metadata() Metadata {
return m.metadata
}
func (m *Mediafile) CompressionLevel() int {
return m.compressionLevel
}
func (m *Mediafile) MapMetadata() string {
return m.mapMetadata
}
func (m *Mediafile) Tags() map[string]string {
return m.tags
}
func (m *Mediafile) SetEncryptionKey(v string) {
m.encryptionKey = v
}
func (m *Mediafile) EncryptionKey() string {
return m.encryptionKey
}
func (m *Mediafile) RawInputArgs() []string {
return m.rawInputArgs
}
func (m *Mediafile) RawOutputArgs() []string {
return m.rawOutputArgs
}
/** OPTS **/
func (m *Mediafile) ToStrCommand() []string {
var strCommand []string
opts := []string{
"SeekTimeInput",
"SeekUsingTsInput",
"NativeFramerateInput",
"DurationInput",
"RtmpLive",
"InputInitialOffset",
"HardwareAcceleration",
"RawInputArgs",
"InputPath",
"InputPipe",
"HideBanner",
"Aspect",
"Resolution",
"FrameRate",
"AudioRate",
"VideoCodec",
"Vframes",
"VideoBitRate",
"VideoBitRateTolerance",
"VideoMaxBitRate",
"VideoMinBitRate",
"VideoProfile",
"VideoLevel",
"MaxKeyFrame",
"MinKeyFrame",
"SkipVideo",
"AudioCodec",
"AudioBitRate",
"AudioChannels",
"AudioProfile",
"SkipAudio",
"CRF",
"QScale",
"Strict",
"BufferSize",
"MuxDelay",
"Threads",
"KeyframeInterval",
"Preset",
"PixFmt",
"Tune",
"Target",
"SeekTime",
"Duration",
"CopyTs",
"StreamIds",
"MovFlags",
"RawOutputArgs",
"OutputFormat",
"OutputPipe",
"HlsListSize",
"HlsSegmentDuration",
"HlsPlaylistType",
"HlsMasterPlaylistName",
"HlsSegmentFilename",
"AudioFilter",
"VideoFilter",
"HttpMethod",
"HttpKeepAlive",
"CompressionLevel",
"MapMetadata",
"Tags",
"EncryptionKey",
"OutputPath",
"Bframe",
"MovFlags",
}
for _, name := range opts {
opt := reflect.ValueOf(m).MethodByName(fmt.Sprintf("Obtain%s", name))
if (opt != reflect.Value{}) {
result := opt.Call([]reflect.Value{})
if val, ok := result[0].Interface().([]string); ok {
strCommand = append(strCommand, val...)
}
}
}
return strCommand
}
func (m *Mediafile) ObtainAudioFilter() []string {
if m.audioFilter != "" {
return []string{"-af", m.audioFilter}
}
return nil
}
func (m *Mediafile) ObtainVideoFilter() []string {
if m.videoFilter != "" {
return []string{"-vf", m.videoFilter}
}
return nil
}
func (m *Mediafile) ObtainMaxKeyFrame() []string {
if m.maxKeyframe >0 {
return []string{"-keyint_max", fmt.Sprintf("%d",m.maxKeyframe)}
}
return nil
}
func (m *Mediafile) ObtainMinKeyFrame() []string {
if m.maxKeyframe >0 {
return []string{"-keyint_min", fmt.Sprintf("%d",m.minKeyframe)}
}
return nil
}
func (m *Mediafile) ObtainAspect() []string {
// Set aspect
if m.resolution != "" {
resolution := strings.Split(m.resolution, "x")
if len(resolution) != 0 {
width, _ := strconv.ParseFloat(resolution[0], 64)
height, _ := strconv.ParseFloat(resolution[1], 64)
return []string{"-aspect", fmt.Sprintf("%f", width/height)}
}
}
if m.aspect != "" {
return []string{"-aspect", m.aspect}
}
return nil
}
func (m *Mediafile) ObtainHardwareAcceleration() []string {
if m.hwaccel != "" {
return []string{"-hwaccel", m.hwaccel}
}
return nil
}
func (m *Mediafile) ObtainInputPath() []string {
if m.inputPath != "" {
return []string{"-i", m.inputPath}
}
return nil
}
func (m *Mediafile) ObtainInputPipe() []string {
if m.inputPipe {
return []string{"-i", "pipe:0"}
}
return nil
}
func (m *Mediafile) ObtainOutputPipe() []string {
if m.outputPipe {
return []string{"pipe:1"}
}
return nil
}
func (m *Mediafile) ObtainMovFlags() []string {
if m.movFlags != "" {
return []string{"-movflags", m.movFlags}
}
return nil
}
func (m *Mediafile) ObtainHideBanner() []string {
if m.hideBanner {
return []string{"-hide_banner"}
}
return nil
}
func (m *Mediafile) ObtainNativeFramerateInput() []string {
if m.nativeFramerateInput {
return []string{"-re"}
}
return nil
}
func (m *Mediafile) ObtainOutputPath() []string {
if m.outputPath != "" {
return []string{m.outputPath}
}
return nil
}
func (m *Mediafile) ObtainVideoCodec() []string {
if m.videoCodec != "" {
return []string{"-c:v", m.videoCodec}
}
return nil
}
func (m *Mediafile) ObtainVframes() []string {
if m.vframes != 0 {
return []string{"-vframes", fmt.Sprintf("%d", m.vframes)}
}
return nil
}
func (m *Mediafile) ObtainFrameRate() []string {
if m.frameRate != 0 {
return []string{"-r", fmt.Sprintf("%d", m.frameRate)}
}
return nil
}
func (m *Mediafile) ObtainAudioRate() []string {
if m.audioRate != 0 {
return []string{"-ar", fmt.Sprintf("%d", m.audioRate)}
}
return nil
}
func (m *Mediafile) ObtainResolution() []string {
if m.resolution != "" {
return []string{"-s", m.resolution}
}
return nil
}
func (m *Mediafile) ObtainVideoBitRate() []string {
if m.videoBitRate != "" {
return []string{"-b:v", m.videoBitRate}
}
return nil
}
func (m *Mediafile) ObtainAudioCodec() []string {
if m.audioCodec != "" {
return []string{"-c:a", m.audioCodec}
}
return nil
}
func (m *Mediafile) ObtainAudioBitRate() []string {
switch {
case !m.audioVariableBitrate && m.audioBitrate != "":
return []string{"-b:a", m.audioBitrate}
case m.audioVariableBitrate && m.audioBitrate != "":
return []string{"-q:a", m.audioBitrate}
case m.audioVariableBitrate:
return []string{"-q:a", "0"}
default:
return nil
}
}
func (m *Mediafile) ObtainAudioChannels() []string {
if m.audioChannels != 0 {
return []string{"-ac", fmt.Sprintf("%d", m.audioChannels)}
}
return nil
}
func (m *Mediafile) ObtainVideoMaxBitRate() []string {
if m.videoMaxBitRate != 0 {
return []string{"-maxrate", fmt.Sprintf("%dk", m.videoMaxBitRate)}
}
return nil
}
func (m *Mediafile) ObtainVideoMinBitRate() []string {
if m.videoMinBitrate != 0 {
return []string{"-minrate", fmt.Sprintf("%dk", m.videoMinBitrate)}
}
return nil
}
func (m *Mediafile) ObtainBufferSize() []string {
if m.bufferSize != 0 {
return []string{"-bufsize", fmt.Sprintf("%dk", m.bufferSize)}
}
return nil
}
func (m *Mediafile) ObtainVideoBitRateTolerance() []string {
if m.videoBitRateTolerance != 0 {
return []string{"-bt", fmt.Sprintf("%dk", m.videoBitRateTolerance)}
}
return nil
}
func (m *Mediafile) ObtainThreads() []string {
if m.threadset {
return []string{"-threads", fmt.Sprintf("%d", m.threads)}
}
return nil
}
func (m *Mediafile) ObtainTarget() []string {
if m.target != "" {
return []string{"-target", m.target}
}
return nil
}
func (m *Mediafile) ObtainDuration() []string {
if m.duration != "" {
return []string{"-t", m.duration}
}
return nil
}
func (m *Mediafile) ObtainDurationInput() []string {
if m.durationInput != "" {
return []string{"-t", m.durationInput}
}
return nil
}
func (m *Mediafile) ObtainKeyframeInterval() []string {
if m.keyframeInterval != 0 {
return []string{"-g", fmt.Sprintf("%d", m.keyframeInterval)}
}
return nil
}
func (m *Mediafile) ObtainSeekTime() []string {
if m.seekTime != "" {
return []string{"-ss", m.seekTime}
}
return nil
}
func (m *Mediafile) ObtainSeekTimeInput() []string {
if m.seekTimeInput != "" {
return []string{"-ss", m.seekTimeInput}
}
return nil
}
func (m *Mediafile) ObtainPreset() []string {
if m.preset != "" {
return []string{"-preset", m.preset}
}
return nil
}
func (m *Mediafile) ObtainTune() []string {
if m.tune != "" {
return []string{"-tune", m.tune}
}
return nil
}
func (m *Mediafile) ObtainCRF() []string {
if m.crf != 0 {
return []string{"-crf", fmt.Sprintf("%d", m.crf)}
}
return nil
}
func (m *Mediafile) ObtainQScale() []string {
if m.qscale != 0 {
return []string{"-qscale", fmt.Sprintf("%d", m.qscale)}
}
return nil
}
func (m *Mediafile) ObtainStrict() []string {
if m.strict != 0 {
return []string{"-strict", fmt.Sprintf("%d", m.strict)}
}
return nil
}
func (m *Mediafile) ObtainVideoProfile() []string {
if m.videoProfile != "" {
return []string{"-profile:v", m.videoProfile}
}
return nil
}
func (m *Mediafile) ObtainVideoLevel() []string {
if m.videoLevel != "" {
return []string{"-level", m.videoLevel}
}
return nil
}
func (m *Mediafile) ObtainAudioProfile() []string {
if m.audioProfile != "" {
return []string{"-profile:a", m.audioProfile}
}
return nil
}
func (m *Mediafile) ObtainCopyTs() []string {
if m.copyTs {
return []string{"-copyts"}
}
return nil
}
func (m *Mediafile) ObtainOutputFormat() []string {
if m.outputFormat != "" {
return []string{"-f", m.outputFormat}
}
return nil
}
func (m *Mediafile) ObtainMuxDelay() []string {
if m.muxDelay != "" {
return []string{"-muxdelay", m.muxDelay}
}
return nil
}
func (m *Mediafile) ObtainSeekUsingTsInput() []string {
if m.seekUsingTsInput {
return []string{"-seek_timestamp", "1"}
}
return nil
}
func (m *Mediafile) ObtainRtmpLive() []string {
if m.rtmpLive != "" {
return []string{"-rtmp_live", m.rtmpLive}
} else {
return nil
}
}
func (m *Mediafile) ObtainHlsPlaylistType() []string {
if m.hlsPlaylistType != "" {
return []string{"-hls_playlist_type", m.hlsPlaylistType}
} else {
return nil
}
}
func (m *Mediafile) ObtainInputInitialOffset() []string {
if m.inputInitialOffset != "" {
return []string{"-itsoffset", m.inputInitialOffset}
} else {
return nil
}
}
func (m *Mediafile) ObtainHlsListSize() []string {
if m.hlsListSize > 0 {
return []string{"-hls_list_size", fmt.Sprintf("%d", m.hlsListSize)}
}
return nil
}
func (m *Mediafile) ObtainHlsSegmentDuration() []string {
if m.hlsSegmentDuration != 0 {
return []string{"-hls_time", fmt.Sprintf("%d", m.hlsSegmentDuration)}
} else {
return nil
}
}
func (m *Mediafile) ObtainHlsMasterPlaylistName() []string {
if m.hlsMasterPlaylistName != "" {
return []string{"-master_pl_name", fmt.Sprintf("%s", m.hlsMasterPlaylistName)}
} else {
return nil
}
}
func (m *Mediafile) ObtainHlsSegmentFilename() []string {
if m.hlsSegmentFilename != "" {
return []string{"-hls_segment_filename", fmt.Sprintf("%s", m.hlsSegmentFilename)}
} else {
return nil
}
}
func (m *Mediafile) ObtainHttpMethod() []string {
if m.httpMethod != "" {
return []string{"-method", m.httpMethod}
} else {
return nil
}
}
func (m *Mediafile) ObtainPixFmt() []string {
if m.pixFmt != "" {
return []string{"-pix_fmt", m.pixFmt}
} else {
return nil
}
}
func (m *Mediafile) ObtainHttpKeepAlive() []string {
if m.httpKeepAlive {
return []string{"-multiple_requests", "1"}
} else {
return nil
}
}
func (m *Mediafile) ObtainSkipVideo() []string {
if m.skipVideo {
return []string{"-vn"}
} else {
return nil
}
}
func (m *Mediafile) ObtainSkipAudio() []string {
if m.skipAudio {
return []string{"-an"}
} else {
return nil
}
}
func (m *Mediafile) ObtainStreamIds() []string {
if m.streamIds != nil && len(m.streamIds) != 0 {
result := []string{}
for i, val := range m.streamIds {
result = append(result, []string{"-streamid", fmt.Sprintf("%d:%s", i, val)}...)
}
return result
}
return nil
}
func (m *Mediafile) ObtainCompressionLevel() []string {
if m.compressionLevel != 0 {
return []string{"-compression_level", fmt.Sprintf("%d", m.compressionLevel)}
}
return nil
}
func (m *Mediafile) ObtainMapMetadata() []string {
if m.mapMetadata != "" {
return []string{"-map_metadata", m.mapMetadata}
}
return nil
}
func (m *Mediafile) ObtainEncryptionKey() []string {
if m.encryptionKey != "" {
return []string{"-hls_key_info_file", m.encryptionKey}
}
return nil
}
func (m *Mediafile) ObtainBframe() []string {
if m.bframe != 0 {
return []string{"-bf", fmt.Sprintf("%d", m.bframe)}
}
return nil
}
func (m *Mediafile) ObtainTags() []string {
if m.tags != nil && len(m.tags) != 0 {
result := []string{}
for key, val := range m.tags {
result = append(result, []string{"-metadata", fmt.Sprintf("%s=%s", key, val)}...)
}
return result
}
return nil
}
func (m *Mediafile) ObtainRawInputArgs() []string {
return m.rawInputArgs
}
func (m *Mediafile) ObtainRawOutputArgs() []string {
return m.rawOutputArgs
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/mars79668/goffmpeg.git
git@gitee.com:mars79668/goffmpeg.git
mars79668
goffmpeg
goffmpeg
340b3e3a9e0f

搜索帮助