From a22d0fab6a1ad1f32d9ec3b49288599490c2a2de Mon Sep 17 00:00:00 2001 From: Amir Date: Tue, 15 Aug 2023 14:23:58 +0300 Subject: [PATCH 01/10] Remove unnecessary changes --- ffmpeg/ffmpeg.go | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/ffmpeg/ffmpeg.go b/ffmpeg/ffmpeg.go index 6328104..a8d8b6b 100644 --- a/ffmpeg/ffmpeg.go +++ b/ffmpeg/ffmpeg.go @@ -149,19 +149,17 @@ func (t *Transcoder) Output(arg string) transcoder.Transcoder { // InputPipe ... func (t *Transcoder) InputPipe(w *io.WriteCloser, r *io.ReadCloser) transcoder.Transcoder { - if &t.input == nil { - t.inputPipeWriter = w - t.inputPipeReader = r - } + t.input = nil + t.inputPipeWriter = w + t.inputPipeReader = r return t } // OutputPipe ... func (t *Transcoder) OutputPipe(w *io.WriteCloser, r *io.ReadCloser) transcoder.Transcoder { - if &t.output == nil { - t.outputPipeWriter = w - t.outputPipeReader = r - } + t.output = []string + t.outputPipeWriter = w + t.outputPipeReader = r return t } From 9311555e5b0172f967c4c83a0a86e037b169e64b Mon Sep 17 00:00:00 2001 From: Amir Date: Tue, 15 Aug 2023 14:26:12 +0300 Subject: [PATCH 02/10] Change package namespace --- LICENSE | 2 +- README.md | 12 ++++++------ ffmpeg/ffmpeg.go | 4 ++-- ffmpeg/metadata.go | 2 +- go.mod | 2 +- 5 files changed, 11 insertions(+), 11 deletions(-) diff --git a/LICENSE b/LICENSE index 2ad87fe..ff23493 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2020 FlooStack +Copyright (c) 2020 amir-the-h Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README.md b/README.md index 967d5b9..4fb53ff 100644 --- a/README.md +++ b/README.md @@ -4,12 +4,12 @@
- - Build Status + + Build Status - + Build Status @@ -18,7 +18,7 @@
- Created by FlooStack. + Created by amir-the-h.
## Features @@ -34,7 +34,7 @@ ## Download from Github ```shell -go get github.com/floostack/transcoder +go get github.com/amir-the-h/transcoder ``` ## Example @@ -45,7 +45,7 @@ package main import ( "log" - ffmpeg "github.com/floostack/transcoder/ffmpeg" + ffmpeg "github.com/amir-the-h/transcoder/ffmpeg" ) func main() { diff --git a/ffmpeg/ffmpeg.go b/ffmpeg/ffmpeg.go index a8d8b6b..f345f37 100644 --- a/ffmpeg/ffmpeg.go +++ b/ffmpeg/ffmpeg.go @@ -14,8 +14,8 @@ import ( "strconv" "strings" - "github.com/floostack/transcoder" - "github.com/floostack/transcoder/utils" + "github.com/amir-the-h/transcoder" + "github.com/amir-the-h/transcoder/utils" ) // Transcoder ... diff --git a/ffmpeg/metadata.go b/ffmpeg/metadata.go index 4e81910..1cfc55e 100644 --- a/ffmpeg/metadata.go +++ b/ffmpeg/metadata.go @@ -1,6 +1,6 @@ package ffmpeg -import "github.com/floostack/transcoder" +import "github.com/amir-the-h/transcoder" // Metadata ... type Metadata struct { diff --git a/go.mod b/go.mod index 4c9ade4..0a1e79a 100644 --- a/go.mod +++ b/go.mod @@ -1,3 +1,3 @@ -module github.com/floostack/transcoder +module github.com/amir-the-h/transcoder go 1.13 From 7afedde0bad513301f60c62d4c10c2a8be35b9c8 Mon Sep 17 00:00:00 2001 From: Amir Date: Tue, 15 Aug 2023 14:42:16 +0300 Subject: [PATCH 03/10] Revert --- LICENSE | 2 +- README.md | 12 ++++++------ ffmpeg/ffmpeg.go | 4 ++-- ffmpeg/metadata.go | 2 +- go.mod | 2 +- 5 files changed, 11 insertions(+), 11 deletions(-) diff --git a/LICENSE b/LICENSE index ff23493..239fc02 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2020 amir-the-h +Copyright (c) 2020 floostack Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README.md b/README.md index 4fb53ff..2056ea0 100644 --- a/README.md +++ b/README.md @@ -4,12 +4,12 @@
- - Build Status + + Build Status - + Build Status @@ -18,7 +18,7 @@
- Created by amir-the-h. + Created by floostack.
## Features @@ -34,7 +34,7 @@ ## Download from Github ```shell -go get github.com/amir-the-h/transcoder +go get github.com/floostack/transcoder ``` ## Example @@ -45,7 +45,7 @@ package main import ( "log" - ffmpeg "github.com/amir-the-h/transcoder/ffmpeg" + ffmpeg "github.com/floostack/transcoder/ffmpeg" ) func main() { diff --git a/ffmpeg/ffmpeg.go b/ffmpeg/ffmpeg.go index f345f37..a8d8b6b 100644 --- a/ffmpeg/ffmpeg.go +++ b/ffmpeg/ffmpeg.go @@ -14,8 +14,8 @@ import ( "strconv" "strings" - "github.com/amir-the-h/transcoder" - "github.com/amir-the-h/transcoder/utils" + "github.com/floostack/transcoder" + "github.com/floostack/transcoder/utils" ) // Transcoder ... diff --git a/ffmpeg/metadata.go b/ffmpeg/metadata.go index 1cfc55e..4e81910 100644 --- a/ffmpeg/metadata.go +++ b/ffmpeg/metadata.go @@ -1,6 +1,6 @@ package ffmpeg -import "github.com/amir-the-h/transcoder" +import "github.com/floostack/transcoder" // Metadata ... type Metadata struct { diff --git a/go.mod b/go.mod index 0a1e79a..4c9ade4 100644 --- a/go.mod +++ b/go.mod @@ -1,3 +1,3 @@ -module github.com/amir-the-h/transcoder +module github.com/floostack/transcoder go 1.13 From ee1d36e4d46e5e078e404e462d266358aa12e4dd Mon Sep 17 00:00:00 2001 From: Amir Date: Tue, 15 Aug 2023 14:46:11 +0300 Subject: [PATCH 04/10] Fix --- ffmpeg/ffmpeg.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ffmpeg/ffmpeg.go b/ffmpeg/ffmpeg.go index a8d8b6b..99aefd7 100644 --- a/ffmpeg/ffmpeg.go +++ b/ffmpeg/ffmpeg.go @@ -149,7 +149,7 @@ func (t *Transcoder) Output(arg string) transcoder.Transcoder { // InputPipe ... func (t *Transcoder) InputPipe(w *io.WriteCloser, r *io.ReadCloser) transcoder.Transcoder { - t.input = nil + t.input = "" t.inputPipeWriter = w t.inputPipeReader = r return t @@ -157,7 +157,7 @@ func (t *Transcoder) InputPipe(w *io.WriteCloser, r *io.ReadCloser) transcoder.T // OutputPipe ... func (t *Transcoder) OutputPipe(w *io.WriteCloser, r *io.ReadCloser) transcoder.Transcoder { - t.output = []string + t.output = []string{} t.outputPipeWriter = w t.outputPipeReader = r return t From b45c0add0a3e1a9c6165df23b4586d04519e1c94 Mon Sep 17 00:00:00 2001 From: Amir Date: Sat, 19 Aug 2023 17:39:47 +0300 Subject: [PATCH 05/10] Fix the read write pipes --- ffmpeg/ffmpeg.go | 31 +++++++++++++++---------------- transcoder.go | 4 ++-- 2 files changed, 17 insertions(+), 18 deletions(-) diff --git a/ffmpeg/ffmpeg.go b/ffmpeg/ffmpeg.go index 99aefd7..65327f6 100644 --- a/ffmpeg/ffmpeg.go +++ b/ffmpeg/ffmpeg.go @@ -27,9 +27,7 @@ type Transcoder struct { outputOptions [][]string metadata transcoder.Metadata inputPipeReader *io.ReadCloser - outputPipeReader *io.ReadCloser - inputPipeWriter *io.WriteCloser - outputPipeWriter *io.WriteCloser + outputPipeWriter *io.ReadWriteCloser commandContext *context.Context } @@ -148,18 +146,16 @@ func (t *Transcoder) Output(arg string) transcoder.Transcoder { } // InputPipe ... -func (t *Transcoder) InputPipe(w *io.WriteCloser, r *io.ReadCloser) transcoder.Transcoder { - t.input = "" - t.inputPipeWriter = w +func (t *Transcoder) InputPipe(r *io.ReadCloser) transcoder.Transcoder { + t.input = "pipe:" t.inputPipeReader = r return t } // OutputPipe ... -func (t *Transcoder) OutputPipe(w *io.WriteCloser, r *io.ReadCloser) transcoder.Transcoder { +func (t *Transcoder) OutputPipe(w *io.ReadWriteCloser) transcoder.Transcoder { t.output = []string{} t.outputPipeWriter = w - t.outputPipeReader = r return t } @@ -234,15 +230,17 @@ func (t *Transcoder) GetMetadata() (transcoder.Metadata, error) { input := t.input - if t.inputPipeReader != nil { - input = "pipe:" - } - args := []string{"-i", input, "-print_format", "json", "-show_format", "-show_streams", "-show_error"} cmd := exec.Command(t.config.FfprobeBinPath, args...) cmd.Stdout = &outb cmd.Stderr = &errb + if t.inputPipeReader != nil { + cmd.Stdin = *t.inputPipeReader + } + if t.outputPipeWriter != nil { + cmd.Stdout = *t.outputPipeWriter + } err := cmd.Run() if err != nil { @@ -251,12 +249,13 @@ func (t *Transcoder) GetMetadata() (transcoder.Metadata, error) { var metadata Metadata - if err = json.Unmarshal([]byte(outb.String()), &metadata); err != nil { - return nil, err + if t.outputPipeWriter == nil { + if err = json.Unmarshal(outb.Bytes(), &metadata); err != nil { + return nil, err + } + t.metadata = metadata } - t.metadata = metadata - return metadata, nil } diff --git a/transcoder.go b/transcoder.go index f53ca4e..b2bd8d9 100644 --- a/transcoder.go +++ b/transcoder.go @@ -9,9 +9,9 @@ import ( type Transcoder interface { Start() (<-chan Progress, error) Input(i string) Transcoder - InputPipe(w *io.WriteCloser, r *io.ReadCloser) Transcoder + InputPipe(r *io.ReadCloser) Transcoder Output(o string) Transcoder - OutputPipe(w *io.WriteCloser, r *io.ReadCloser) Transcoder + OutputPipe(w *io.ReadWriteCloser) Transcoder WithInputOptions(opts Options) Transcoder WithAdditionalInputOptions(opts Options) Transcoder WithOutputOptions(opts Options) Transcoder From defc63a98e815e2341a3f5f4aeabb010b25f5e8e Mon Sep 17 00:00:00 2001 From: Amir Date: Sat, 19 Aug 2023 18:05:08 +0300 Subject: [PATCH 06/10] Added more properties to metadata --- LICENSE | 2 +- README.md | 2 +- ffmpeg/ffmpeg.go | 16 ++--- ffmpeg/metadata.go | 174 +++++++++++++++++++++++++++------------------ metadata.go | 2 +- 5 files changed, 111 insertions(+), 85 deletions(-) diff --git a/LICENSE b/LICENSE index 239fc02..2ad87fe 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2020 floostack +Copyright (c) 2020 FlooStack Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README.md b/README.md index 2056ea0..967d5b9 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,7 @@
- Created by floostack. + Created by FlooStack.
## Features diff --git a/ffmpeg/ffmpeg.go b/ffmpeg/ffmpeg.go index 65327f6..b1b446c 100644 --- a/ffmpeg/ffmpeg.go +++ b/ffmpeg/ffmpeg.go @@ -103,7 +103,7 @@ func (t *Transcoder) Start() (<-chan transcoder.Progress, error) { if t.config.ProgressEnabled && !t.config.Verbose { stderrIn, err = cmd.StderrPipe() if err != nil { - return nil, fmt.Errorf("Failed getting transcoding progress (%s) with args (%s) with error %s", t.config.FfmpegBinPath, args, err) + return nil, fmt.Errorf("failed getting transcoding progress (%s) with args (%s) with error %s", t.config.FfmpegBinPath, args, err) } } @@ -114,7 +114,7 @@ func (t *Transcoder) Start() (<-chan transcoder.Progress, error) { // Start process err = cmd.Start() if err != nil { - return nil, fmt.Errorf("Failed starting transcoding (%s) with args (%s) with error %s", t.config.FfmpegBinPath, args, err) + return nil, fmt.Errorf("failed starting transcoding (%s) with args (%s) with error %s", t.config.FfmpegBinPath, args, err) } if t.config.ProgressEnabled && !t.config.Verbose { @@ -229,7 +229,6 @@ func (t *Transcoder) GetMetadata() (transcoder.Metadata, error) { var outb, errb bytes.Buffer input := t.input - args := []string{"-i", input, "-print_format", "json", "-show_format", "-show_streams", "-show_error"} cmd := exec.Command(t.config.FfprobeBinPath, args...) @@ -238,9 +237,6 @@ func (t *Transcoder) GetMetadata() (transcoder.Metadata, error) { if t.inputPipeReader != nil { cmd.Stdin = *t.inputPipeReader } - if t.outputPipeWriter != nil { - cmd.Stdout = *t.outputPipeWriter - } err := cmd.Run() if err != nil { @@ -249,12 +245,10 @@ func (t *Transcoder) GetMetadata() (transcoder.Metadata, error) { var metadata Metadata - if t.outputPipeWriter == nil { - if err = json.Unmarshal(outb.Bytes(), &metadata); err != nil { - return nil, err - } - t.metadata = metadata + if err = json.Unmarshal(outb.Bytes(), &metadata); err != nil { + return nil, err } + t.metadata = metadata return metadata, nil } diff --git a/ffmpeg/metadata.go b/ffmpeg/metadata.go index 4e81910..047544e 100644 --- a/ffmpeg/metadata.go +++ b/ffmpeg/metadata.go @@ -15,6 +15,7 @@ type Format struct { NbPrograms int `json:"nb_programs"` FormatName string `json:"format_name"` FormatLongName string `json:"format_long_name"` + StartTime string `json:"start_time"` Duration string `json:"duration"` Size string `json:"size"` BitRate string `json:"bit_rate"` @@ -24,40 +25,64 @@ type Format struct { // Streams ... type Streams struct { - Index int - ID string `json:"id"` - CodecName string `json:"codec_name"` - CodecLongName string `json:"codec_long_name"` - Profile string `json:"profile"` - CodecType string `json:"codec_type"` - CodecTimeBase string `json:"codec_time_base"` - CodecTagString string `json:"codec_tag_string"` - CodecTag string `json:"codec_tag"` - Width int `json:"width"` - Height int `json:"height"` - CodedWidth int `json:"coded_width"` - CodedHeight int `json:"coded_height"` - HasBFrames int `json:"has_b_frames"` - SampleAspectRatio string `json:"sample_aspect_ratio"` - DisplayAspectRatio string `json:"display_aspect_ratio"` - PixFmt string `json:"pix_fmt"` - Level int `json:"level"` - ChromaLocation string `json:"chroma_location"` - Refs int `json:"refs"` - QuarterSample string `json:"quarter_sample"` - DivxPacked string `json:"divx_packed"` - RFrameRrate string `json:"r_frame_rate"` - AvgFrameRate string `json:"avg_frame_rate"` - TimeBase string `json:"time_base"` - DurationTs int `json:"duration_ts"` - Duration string `json:"duration"` - Disposition Disposition `json:"disposition"` - BitRate string `json:"bit_rate"` + Index int `json:"index"` + ID string `json:"id"` + CodecName string `json:"codec_name"` + CodecLongName string `json:"codec_long_name"` + Profile string `json:"profile"` + CodecType string `json:"codec_type"` + CodecTimeBase string `json:"codec_time_base"` + CodecTagString string `json:"codec_tag_string"` + CodecTag string `json:"codec_tag"` + Width int `json:"width,omitempty"` + Height int `json:"height,omitempty"` + CodedWidth int `json:"coded_width,omitempty"` + CodedHeight int `json:"coded_height,omitempty"` + ClosedCaptions int `json:"closed_captions,omitempty"` + FilmGrain int `json:"film_grain,omitempty"` + HasBFrames int `json:"has_b_frames,omitempty"` + SampleAspectRatio string `json:"sample_aspect_ratio,omitempty"` + DisplayAspectRatio string `json:"display_aspect_ratio,omitempty"` + PixFmt string `json:"pix_fmt,omitempty"` + Level int `json:"level,omitempty"` + ColorRange string `json:"color_range,omitempty"` + ColorSpace string `json:"color_space,omitempty"` + ColorTransfer string `json:"color_transfer,omitempty"` + ColorPrimaries string `json:"color_primaries,omitempty"` + ChromaLocation string `json:"chroma_location,omitempty"` + FieldOrder string `json:"field_order,omitempty"` + Refs int `json:"refs,omitempty"` + QuarterSample string `json:"quarter_sample,omitempty"` + DivxPacked string `json:"divx_packed,omitempty"` + IsAvc string `json:"is_avc,omitempty"` + NalLengthSize string `json:"nal_length_size,omitempty"` + RFrameRate string `json:"r_frame_rate"` + AvgFrameRate string `json:"avg_frame_rate"` + TimeBase string `json:"time_base"` + StartPts int `json:"start_pts"` + StartTime string `json:"start_time"` + DurationTs int `json:"duration_ts"` + Duration string `json:"duration"` + BitRate string `json:"bit_rate"` + BitsPerRawSample string `json:"bits_per_raw_sample,omitempty"` + NbFrames int `json:"nb_frames"` + ExtradataSize int `json:"extradata_size"` + Disposition Disposition `json:"disposition"` + Tags map[string]string `json:"tags,omitempty"` + SampleFmt string `json:"sample_fmt,omitempty"` + SampleRate string `json:"sample_rate,omitempty"` + Channels int `json:"channels,omitempty"` + ChannelLayout string `json:"channel_layout,omitempty"` + BitsPerSample int `json:"bits_per_sample,omitempty"` } // Tags ... type Tags struct { - Encoder string `json:"ENCODER"` + Encoder string `json:"ENCODER"` + MajorBrand string `json:"major_brand"` + MinorVersion string `json:"minor_version"` + CompatibleBrands string `json:"compatible_brands"` + CreationTime string `json:"creation_time"` } // Disposition ... @@ -72,6 +97,13 @@ type Disposition struct { HearingImpaired int `json:"hearing_impaired"` VisualImpaired int `json:"visual_impaired"` CleanEffects int `json:"clean_effects"` + AttachedPic int `json:"attached_pic,omitempty"` + TimedThumbnails int `json:"timed_thumbnails,omitempty"` + Captions int `json:"captions,omitempty"` + Descriptions int `json:"descriptions,omitempty"` + Metadata int `json:"metadata,omitempty"` + Dependent int `json:"dependent,omitempty"` + StillImage int `json:"still_image,omitempty"` } // GetFormat ... @@ -142,197 +174,197 @@ func (t Tags) GetEncoder() string { return t.Encoder } -//GetIndex ... +// GetIndex ... func (s Streams) GetIndex() int { return s.Index } -//GetID ... +// GetID ... func (s Streams) GetID() string { return s.ID } -//GetCodecName ... +// GetCodecName ... func (s Streams) GetCodecName() string { return s.CodecName } -//GetCodecLongName ... +// GetCodecLongName ... func (s Streams) GetCodecLongName() string { return s.CodecLongName } -//GetProfile ... +// GetProfile ... func (s Streams) GetProfile() string { return s.Profile } -//GetCodecType ... +// GetCodecType ... func (s Streams) GetCodecType() string { return s.CodecType } -//GetCodecTimeBase ... +// GetCodecTimeBase ... func (s Streams) GetCodecTimeBase() string { return s.CodecTimeBase } -//GetCodecTagString ... +// GetCodecTagString ... func (s Streams) GetCodecTagString() string { return s.CodecTagString } -//GetCodecTag ... +// GetCodecTag ... func (s Streams) GetCodecTag() string { return s.CodecTag } -//GetWidth ... +// GetWidth ... func (s Streams) GetWidth() int { return s.Width } -//GetHeight ... +// GetHeight ... func (s Streams) GetHeight() int { return s.Height } -//GetCodedWidth ... +// GetCodedWidth ... func (s Streams) GetCodedWidth() int { return s.CodedWidth } -//GetCodedHeight ... +// GetCodedHeight ... func (s Streams) GetCodedHeight() int { return s.CodedHeight } -//GetHasBFrames ... +// GetHasBFrames ... func (s Streams) GetHasBFrames() int { return s.HasBFrames } -//GetSampleAspectRatio ... +// GetSampleAspectRatio ... func (s Streams) GetSampleAspectRatio() string { return s.SampleAspectRatio } -//GetDisplayAspectRatio ... +// GetDisplayAspectRatio ... func (s Streams) GetDisplayAspectRatio() string { return s.DisplayAspectRatio } -//GetPixFmt ... +// GetPixFmt ... func (s Streams) GetPixFmt() string { return s.PixFmt } -//GetLevel ... +// GetLevel ... func (s Streams) GetLevel() int { return s.Level } -//GetChromaLocation ... +// GetChromaLocation ... func (s Streams) GetChromaLocation() string { return s.ChromaLocation } -//GetRefs ... +// GetRefs ... func (s Streams) GetRefs() int { return s.Refs } -//GetQuarterSample ... +// GetQuarterSample ... func (s Streams) GetQuarterSample() string { return s.QuarterSample } -//GetDivxPacked ... +// GetDivxPacked ... func (s Streams) GetDivxPacked() string { return s.DivxPacked } -//GetRFrameRrate ... -func (s Streams) GetRFrameRrate() string { - return s.RFrameRrate +// GetRFrameRate ... +func (s Streams) GetRFrameRate() string { + return s.RFrameRate } -//GetAvgFrameRate ... +// GetAvgFrameRate ... func (s Streams) GetAvgFrameRate() string { return s.AvgFrameRate } -//GetTimeBase ... +// GetTimeBase ... func (s Streams) GetTimeBase() string { return s.TimeBase } -//GetDurationTs ... +// GetDurationTs ... func (s Streams) GetDurationTs() int { return s.DurationTs } -//GetDuration ... +// GetDuration ... func (s Streams) GetDuration() string { return s.Duration } -//GetDisposition ... +// GetDisposition ... func (s Streams) GetDisposition() transcoder.Disposition { return s.Disposition } -//GetBitRate ... +// GetBitRate ... func (s Streams) GetBitRate() string { return s.BitRate } -//GetDefault ... +// GetDefault ... func (d Disposition) GetDefault() int { return d.Default } -//GetDub ... +// GetDub ... func (d Disposition) GetDub() int { return d.Dub } -//GetOriginal ... +// GetOriginal ... func (d Disposition) GetOriginal() int { return d.Original } -//GetComment ... +// GetComment ... func (d Disposition) GetComment() int { return d.Comment } -//GetLyrics ... +// GetLyrics ... func (d Disposition) GetLyrics() int { return d.Lyrics } -//GetKaraoke ... +// GetKaraoke ... func (d Disposition) GetKaraoke() int { return d.Karaoke } -//GetForced ... +// GetForced ... func (d Disposition) GetForced() int { return d.Forced } -//GetHearingImpaired ... +// GetHearingImpaired ... func (d Disposition) GetHearingImpaired() int { return d.HearingImpaired } -//GetVisualImpaired ... +// GetVisualImpaired ... func (d Disposition) GetVisualImpaired() int { return d.VisualImpaired } -//GetCleanEffects ... +// GetCleanEffects ... func (d Disposition) GetCleanEffects() int { return d.CleanEffects } diff --git a/metadata.go b/metadata.go index d03241d..a3b66d2 100644 --- a/metadata.go +++ b/metadata.go @@ -44,7 +44,7 @@ type Streams interface { GetRefs() int GetQuarterSample() string GetDivxPacked() string - GetRFrameRrate() string + GetRFrameRate() string GetAvgFrameRate() string GetTimeBase() string GetDurationTs() int From 7c42620440315821a0020709cc7a7bf252f4e18e Mon Sep 17 00:00:00 2001 From: Amir Date: Sat, 19 Aug 2023 18:08:11 +0300 Subject: [PATCH 07/10] Revert output writer --- ffmpeg/ffmpeg.go | 4 ++-- transcoder.go | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/ffmpeg/ffmpeg.go b/ffmpeg/ffmpeg.go index b1b446c..7224fb7 100644 --- a/ffmpeg/ffmpeg.go +++ b/ffmpeg/ffmpeg.go @@ -27,7 +27,7 @@ type Transcoder struct { outputOptions [][]string metadata transcoder.Metadata inputPipeReader *io.ReadCloser - outputPipeWriter *io.ReadWriteCloser + outputPipeWriter *io.WriteCloser commandContext *context.Context } @@ -153,7 +153,7 @@ func (t *Transcoder) InputPipe(r *io.ReadCloser) transcoder.Transcoder { } // OutputPipe ... -func (t *Transcoder) OutputPipe(w *io.ReadWriteCloser) transcoder.Transcoder { +func (t *Transcoder) OutputPipe(w *io.WriteCloser) transcoder.Transcoder { t.output = []string{} t.outputPipeWriter = w return t diff --git a/transcoder.go b/transcoder.go index b2bd8d9..786575c 100644 --- a/transcoder.go +++ b/transcoder.go @@ -11,7 +11,7 @@ type Transcoder interface { Input(i string) Transcoder InputPipe(r *io.ReadCloser) Transcoder Output(o string) Transcoder - OutputPipe(w *io.ReadWriteCloser) Transcoder + OutputPipe(w *io.WriteCloser) Transcoder WithInputOptions(opts Options) Transcoder WithAdditionalInputOptions(opts Options) Transcoder WithOutputOptions(opts Options) Transcoder From fabd089be0fbea60d5311086ec55add5e22a0ca1 Mon Sep 17 00:00:00 2001 From: Amir Date: Sat, 19 Aug 2023 18:09:36 +0300 Subject: [PATCH 08/10] Restore old go version support --- ffmpeg/ffmpeg.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ffmpeg/ffmpeg.go b/ffmpeg/ffmpeg.go index 7224fb7..c235a7b 100644 --- a/ffmpeg/ffmpeg.go +++ b/ffmpeg/ffmpeg.go @@ -245,7 +245,7 @@ func (t *Transcoder) GetMetadata() (transcoder.Metadata, error) { var metadata Metadata - if err = json.Unmarshal(outb.Bytes(), &metadata); err != nil { + if err = json.Unmarshal([]byte(outb.String()), &metadata); err != nil { return nil, err } t.metadata = metadata From d36221a12b541d8238c47e7b1e0f4f5a325d7768 Mon Sep 17 00:00:00 2001 From: Amir Date: Sat, 19 Aug 2023 18:27:39 +0300 Subject: [PATCH 09/10] Added extra methods --- ffmpeg/metadata.go | 125 +++++++++++++++++++++++++++++++++++++++++++++ metadata.go | 27 +++++++++- 2 files changed, 151 insertions(+), 1 deletion(-) diff --git a/ffmpeg/metadata.go b/ffmpeg/metadata.go index 047544e..eb1bc82 100644 --- a/ffmpeg/metadata.go +++ b/ffmpeg/metadata.go @@ -169,6 +169,11 @@ func (f Format) GetTags() transcoder.Tags { return f.Tags } +// GetStartTime ... +func (f Format) GetStartTime() string { + return f.StartTime +} + // GetEncoder ... func (t Tags) GetEncoder() string { return t.Encoder @@ -319,6 +324,96 @@ func (s Streams) GetBitRate() string { return s.BitRate } +// GetBitsPerRawSample ... +func (s Streams) GetBitsPerRawSample() string { + return s.BitsPerRawSample +} + +// GetBitsPerSample ... +func (s Streams) GetBitsPerSample() int { + return s.BitsPerSample +} + +// GetChannelLayout ... +func (s Streams) GetChannelLayout() string { + return s.ChannelLayout +} + +// GetChannels ... +func (s Streams) GetChannels() int { + return s.Channels +} + +// GetClosedCaptions ... +func (s Streams) GetClosedCaptions() int { + return s.ClosedCaptions +} + +// GetExtradataSize ... +func (s Streams) GetExtradataSize() int { + return s.ExtradataSize +} + +// GetFilmGrain ... +func (s Streams) GetFilmGrain() int { + return s.FilmGrain +} + +// GetIsAvc ... +func (s Streams) GetIsAvc() string { + return s.IsAvc +} + +// GetNalLengthSize ... +func (s Streams) GetNalLengthSize() string { + return s.NalLengthSize +} + +// GetNbFrames ... +func (s Streams) GetNbFrames() int { + return s.NbFrames +} + +// GetSampleFmt ... +func (s Streams) GetSampleFmt() string { + return s.SampleFmt +} + +// GetSampleRate ... +func (s Streams) GetSampleRate() string { + return s.SampleRate +} + +// GetStartPts ... +func (s Streams) GetStartPts() int { + return s.StartPts +} + +// GetStartTime ... +func (s Streams) GetStartTime() string { + return s.StartTime +} + +// GetCompatibleBrands ... +func (t Tags) GetCompatibleBrands() string { + return t.CompatibleBrands +} + +// GetCreationTime ... +func (t Tags) GetCreationTime() string { + return t.CreationTime +} + +// GetMajorBrand ... +func (t Tags) GetMajorBrand() string { + return t.MajorBrand +} + +// GetMinorVersion ... +func (t Tags) GetMinorVersion() string { + return t.MinorVersion +} + // GetDefault ... func (d Disposition) GetDefault() int { return d.Default @@ -368,3 +463,33 @@ func (d Disposition) GetVisualImpaired() int { func (d Disposition) GetCleanEffects() int { return d.CleanEffects } + +// GetAttachedPic ... +func (d Disposition) GetAttachedPic() int { + return d.AttachedPic +} + +// GetCaptions ... +func (d Disposition) GetCaptions() int { + return d.Captions +} + +// GetDependent ... +func (d Disposition) GetDependent() int { + return d.Dependent +} + +// GetMetadata ... +func (d Disposition) GetMetadata() int { + return d.Metadata +} + +// GetStillImage ... +func (d Disposition) GetStillImage() int { + return d.StillImage +} + +// GetTimedThumbnails ... +func (d Disposition) GetTimedThumbnails() int { + return d.TimedThumbnails +} diff --git a/metadata.go b/metadata.go index a3b66d2..5999509 100644 --- a/metadata.go +++ b/metadata.go @@ -13,6 +13,7 @@ type Format interface { GetNbPrograms() int GetFormatName() string GetFormatLongName() string + GetStartTime() string GetDuration() string GetSize() string GetBitRate() string @@ -35,6 +36,8 @@ type Streams interface { GetHeight() int GetCodedWidth() int GetCodedHeight() int + GetClosedCaptions() int + GetFilmGrain() int GetHasBFrames() int GetSampleAspectRatio() string GetDisplayAspectRatio() string @@ -44,18 +47,34 @@ type Streams interface { GetRefs() int GetQuarterSample() string GetDivxPacked() string + GetIsAvc() string + GetNalLengthSize() string GetRFrameRate() string GetAvgFrameRate() string GetTimeBase() string + GetStartPts() int + GetStartTime() string GetDurationTs() int GetDuration() string - GetDisposition() Disposition GetBitRate() string + GetBitsPerRawSample() string + GetNbFrames() int + GetExtradataSize() int + GetDisposition() Disposition + GetSampleFmt() string + GetSampleRate() string + GetChannels() int + GetChannelLayout() string + GetBitsPerSample() int } // Tags ... type Tags interface { GetEncoder() string + GetMajorBrand() string + GetMinorVersion() string + GetCompatibleBrands() string + GetCreationTime() string } // Disposition ... @@ -70,4 +89,10 @@ type Disposition interface { GetHearingImpaired() int GetVisualImpaired() int GetCleanEffects() int + GetAttachedPic() int + GetTimedThumbnails() int + GetCaptions() int + GetMetadata() int + GetDependent() int + GetStillImage() int } From 36fc7d36a0116aca6f0ef1d602cc21f6e51c7c88 Mon Sep 17 00:00:00 2001 From: Amir Date: Sat, 19 Aug 2023 18:45:08 +0300 Subject: [PATCH 10/10] Fix --- ffmpeg/metadata.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ffmpeg/metadata.go b/ffmpeg/metadata.go index eb1bc82..ee2bd63 100644 --- a/ffmpeg/metadata.go +++ b/ffmpeg/metadata.go @@ -65,7 +65,7 @@ type Streams struct { Duration string `json:"duration"` BitRate string `json:"bit_rate"` BitsPerRawSample string `json:"bits_per_raw_sample,omitempty"` - NbFrames int `json:"nb_frames"` + NbFrames int `json:"nb_frames,string,omitempty"` ExtradataSize int `json:"extradata_size"` Disposition Disposition `json:"disposition"` Tags map[string]string `json:"tags,omitempty"`