diff --git a/internal/ffmpeg/ffmpeg_test.go b/internal/ffmpeg/ffmpeg_test.go index 2493bace..7fa3ebc8 100644 --- a/internal/ffmpeg/ffmpeg_test.go +++ b/internal/ffmpeg/ffmpeg_test.go @@ -163,7 +163,7 @@ func TestParseArgsHwRKMPP(t *testing.T) { require.Equal(t, `ffmpeg -hide_banner -fflags nobuffer -flags low_delay -i http://example.com -c:v h264_rkmpp_encoder -g 50 -bf 0 -profile:v high -level:v 4.1 -an -vf "transpose=1,transpose=1" -user_agent ffmpeg/go2rtc -rtsp_transport tcp -f rtsp {output}`, args.String()) args = parseArgs("http://example.com#video=h264#height=320#hardware=rkmpp") - require.Equal(t, `ffmpeg -hide_banner -fflags nobuffer -flags low_delay -i http://example.com -c:v h264_rkmpp_encoder -g 50 -bf 0 -profile:v high -level:v 4.1 -an -vf "scale=-1:320" -user_agent ffmpeg/go2rtc -rtsp_transport tcp -f rtsp {output}`, args.String()) + require.Equal(t, `ffmpeg -hide_banner -fflags nobuffer -flags low_delay -i http://example.com -c:v h264_rkmpp_encoder -g 50 -bf 0 -profile:v high -level:v 4.1 -height 320 -an -user_agent ffmpeg/go2rtc -rtsp_transport tcp -f rtsp {output}`, args.String()) } func TestParseArgsHwCuda(t *testing.T) { diff --git a/internal/ffmpeg/hardware/hardware.go b/internal/ffmpeg/hardware/hardware.go index b75a3c73..ebbdc4fa 100644 --- a/internal/ffmpeg/hardware/hardware.go +++ b/internal/ffmpeg/hardware/hardware.go @@ -129,6 +129,21 @@ func MakeHardware(args *ffmpeg.Args, engine string, defaults map[string]string) case EngineRKMPP: args.Codecs[i] = defaults[name+"/"+engine] + + for j, filter := range args.Filters { + if strings.HasPrefix(filter, "scale=") { + args.Filters = append(args.Filters[:j], args.Filters[j+1:]...) + + width, height, _ := strings.Cut(filter[6:], ":") + if width != "-1" { + args.Codecs[i] += " -width " + width + } + if height != "-1" { + args.Codecs[i] += " -height " + height + } + break + } + } } } } diff --git a/pkg/ffmpeg/ffmpeg.go b/pkg/ffmpeg/ffmpeg.go index a24d9201..912e7684 100644 --- a/pkg/ffmpeg/ffmpeg.go +++ b/pkg/ffmpeg/ffmpeg.go @@ -74,7 +74,7 @@ func (a *Args) String() string { b.WriteString(codec) } - if a.Filters != nil { + if len(a.Filters) > 0 { for i, filter := range a.Filters { if i == 0 { b.WriteString(` -vf "`)