From 0ad37313d2bafe75045fea78d1c6b8c949b4c219 Mon Sep 17 00:00:00 2001
From: Daniel Widerin <daniel@widerin.net>
Date: Sun, 25 Oct 2020 01:10:18 +0200
Subject: [PATCH] Make quality configurable

Signed-off-by: Daniel Widerin <daniel@widerin.net>
---
 README.md  | 1 +
 encoder.go | 4 ++--
 main.go    | 7 +++++++
 3 files changed, 10 insertions(+), 2 deletions(-)

diff --git a/README.md b/README.md
index 8c5adef..5b32828 100644
--- a/README.md
+++ b/README.md
@@ -32,6 +32,7 @@ library which made this wrapper possible.
        --port value       VNC port (default: 5900) [$VR_VNC_PORT]
        --password value   Password to connect to the VNC host (default: "secret") [$VR_VNC_PASSWORD]
        --framerate value  Framerate to record (default: 30) [$VR_FRAMERATE]
+       --crf value        Constant Rate Factor (CRF) to record with (default: 35) [$VR_CRF]
        --outfile value    Output file to record to. (default: "output.mp4") [$VR_OUTFILE]
        --help, -h         show help
        --version, -v      print the version
diff --git a/encoder.go b/encoder.go
index 75f4470..8600eb6 100644
--- a/encoder.go
+++ b/encoder.go
@@ -112,6 +112,7 @@ type X264ImageCustomEncoder struct {
 	input         io.WriteCloser
 	closed        bool
 	Framerate     int
+	ConstantRateFactor int
 }
 
 func (enc *X264ImageCustomEncoder) Init(videoFileName string) {
@@ -126,10 +127,9 @@ func (enc *X264ImageCustomEncoder) Init(videoFileName string) {
 		"-y",
 		"-i", "-",
 		"-vcodec", "libx264",
-		"-threads", "8",
 		"-preset", "veryfast",
 		"-g", "250",
-		"-crf", "37",
+		"-crf", strconv.Itoa(enc.ConstantRateFactor),
 		videoFileName,
 	)
 	cmd.Stdout = os.Stdout
diff --git a/main.go b/main.go
index 726d9eb..9b44b12 100644
--- a/main.go
+++ b/main.go
@@ -64,6 +64,12 @@ func main() {
 				Usage:   "Framerate to record",
 				EnvVars: []string{"VR_FRAMERATE"},
 			},
+			&cli.IntFlag{
+				Name:    "crf",
+				Value:   35,
+				Usage:   "Constant Rate Factor (CRF) to record with",
+				EnvVars: []string{"VR_CRF"},
+			},
 			&cli.StringFlag{
 				Name:    "outfile",
 				Value:   "output.mp4",
@@ -143,6 +149,7 @@ func recorder(c *cli.Context) error {
 	vcodec := &X264ImageCustomEncoder{
 		FFMpegBinPath: ffmpeg_path,
 		Framerate:     c.Int("framerate"),
+		ConstantRateFactor: c.Int("crf"),
 	}
 
 	//goland:noinspection GoUnhandledErrorResult