From fc96cadb6393fd765984f05c8f5b78cc15d55b24 Mon Sep 17 00:00:00 2001 From: Josh Allmann Date: Tue, 3 Dec 2024 01:23:58 +0000 Subject: [PATCH] Fix crash on PNG options --- ffmpeg/ffmpeg.go | 3 +++ ffmpeg/ffmpeg_test.go | 24 ++++++++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/ffmpeg/ffmpeg.go b/ffmpeg/ffmpeg.go index e8bd534316..2ceef33e5d 100755 --- a/ffmpeg/ffmpeg.go +++ b/ffmpeg/ffmpeg.go @@ -971,6 +971,9 @@ func (t *Transcoder) Transcode(input *TranscodeOptionsIn, ps []TranscodeOptions) } // changing the input map here is maybe not great + if input.Demuxer.Opts == nil { + input.Demuxer.Opts = map[string]string{} + } input.Demuxer.Opts["framerate"] = fmt.Sprintf("%d/%d", input.Profile.Framerate, input.Profile.FramerateDen) } } diff --git a/ffmpeg/ffmpeg_test.go b/ffmpeg/ffmpeg_test.go index 09611d8d62..e91f2f86c0 100644 --- a/ffmpeg/ffmpeg_test.go +++ b/ffmpeg/ffmpeg_test.go @@ -2439,3 +2439,27 @@ func TestTranscoder_DemuxerOptsError(t *testing.T) { assert.Equal(t, "Invalid data found when processing input", err.Error()) } + +func TestTranscoder_PNGDemuxerOpts(t *testing.T) { + // we implicitly add demuxer opts to png input that has a framerate + // so test those + run, dir := setupTest(t) + defer os.RemoveAll(dir) + cmd := ` + ffmpeg -i $1/../transcoder/test.ts -an -frames:v 3 test-%d.png + ` + run(cmd) + res, err := Transcode3(&TranscodeOptionsIn{ + Fname: dir + "/test-%d.png", + Profile: VideoProfile{ + Framerate: 1, + FramerateDen: 3, + }, + }, []TranscodeOptions{{ + Profile: P144p30fps16x9, + Oname: "out.ts", + }}) + assert.Nil(t, err) + assert.Equal(t, 3, res.Decoded.Frames) + assert.Equal(t, 180, res.Encoded[0].Frames) +}