diff --git a/src/project.rs b/src/project.rs
index a16da81faaff76e77571212637c81e731db0663d..36113178480edaf3be8076560c70abc586fe7625 100644
--- a/src/project.rs
+++ b/src/project.rs
@@ -51,7 +51,7 @@ impl Resolution {
 	}
 
 	pub(crate) fn default_codec(self) -> FfmpegOutputFormat {
-		if self.width <= 1920 {
+		if self.width > 1920 {
 			FfmpegOutputFormat::Av1Opus
 		} else {
 			FfmpegOutputFormat::AvcAac
diff --git a/src/render/ffmpeg.rs b/src/render/ffmpeg.rs
index 87721363c4b458b5834af4b7414ae740b5bcd47e..af4109561ea465c96d44ed2c5da6f41334afa38b 100644
--- a/src/render/ffmpeg.rs
+++ b/src/render/ffmpeg.rs
@@ -63,8 +63,14 @@ pub(crate) enum FfmpegOutputFormat {
 	AvcAac
 }
 
+pub(crate) enum FfmpegOutputQuality {
+	Default,
+	VisuallyLossless
+}
+
 pub(crate) struct FfmpegOutput {
 	pub(crate) format: FfmpegOutputFormat,
+	pub(crate) quality: FfmpegOutputQuality,
 	pub(crate) audio_bitrate: Option<u64>,
 	pub(crate) video_bitrate: Option<u64>,
 
@@ -89,6 +95,7 @@ impl FfmpegOutput {
 	pub(crate) fn new(format: FfmpegOutputFormat, path: PathBuf) -> Self {
 		Self {
 			format,
+			quality: FfmpegOutputQuality::Default,
 			audio_bitrate: None,
 			video_bitrate: None,
 
@@ -117,7 +124,7 @@ impl FfmpegOutput {
 		self
 	}
 
-	fn append_to_cmd(self, cmd: &mut Command, venc: bool, _aenc: bool, mut vaapi: bool) {
+	fn append_to_cmd(self, cmd: &mut Command, venc: bool, _aenc: bool, vaapi: bool) {
 		// select codec and bitrate/crf
 		if venc {
 			let vcodec = match (self.format, vaapi) {
@@ -133,10 +140,23 @@ impl FfmpegOutput {
 			if vcodec == "libsvtav1" {
 				cmd.arg("-svtav1-params").arg("fast-decode=1");
 				cmd.arg("-preset").arg("7");
-				cmd.arg("-crf").arg("28");
+				cmd.arg("-crf").arg(match self.quality {
+					FfmpegOutputQuality::Default => "28",
+					FfmpegOutputQuality::VisuallyLossless => "18"
+				});
 			} else if vcodec == "h264" {
-				cmd.arg("-preset").arg("slow");
-				cmd.arg("-crf").arg("21");
+				match self.quality {
+					FfmpegOutputQuality::Default => {
+						cmd.arg("-preset").arg("slow");
+						cmd.arg("-crf").arg("21");
+					},
+					FfmpegOutputQuality::VisuallyLossless => {
+						// the quality is not impacted by speed, only the bitrate, and
+						// for this setting we don't really care about bitrate
+						cmd.arg("-preset").arg("veryfast");
+						cmd.arg("-crf").arg("17");
+					}
+				}
 			} else if let Some(bv) = self.video_bitrate {
 				cmd.arg("-b:v").arg(bv.to_string());
 			}
diff --git a/src/render/mod.rs b/src/render/mod.rs
index 1e361cc04db534165e8512f008e33f2a116731b6..1845862606cb39af8b83732b60c5efee2f242c26 100644
--- a/src/render/mod.rs
+++ b/src/render/mod.rs
@@ -15,6 +15,7 @@ use crate::{
 use anyhow::{bail, Context};
 use camino::{Utf8Path as Path, Utf8PathBuf as PathBuf};
 use console::style;
+use ffmpeg::FfmpegOutputQuality;
 use std::{
 	borrow::Cow,
 	collections::VecDeque,
@@ -377,6 +378,7 @@ impl<'a> Renderer<'a> {
 
 		let output = self.video_file_output();
 		let mut ffmpeg = Ffmpeg::new(FfmpegOutput {
+			quality: FfmpegOutputQuality::VisuallyLossless,
 			video_bitrate: Some(source_res.bitrate() * 3),
 			..FfmpegOutput::new(self.format, output.clone())
 		});