diff --git a/src/render/ffmpeg.rs b/src/render/ffmpeg.rs
index c5557d72fa08e1965af670df720913445a9e9786..b0a63daca5e4ce4fdcf68748fbc1cbe2ff3cd5f0 100644
--- a/src/render/ffmpeg.rs
+++ b/src/render/ffmpeg.rs
@@ -53,6 +53,7 @@ impl FfmpegInput {
 	}
 }
 
+#[derive(Clone, Copy)]
 pub(crate) enum FfmpegOutputFormat {
 	/// AV1 / FLAC
 	Av1Flac,
diff --git a/src/render/mod.rs b/src/render/mod.rs
index 9bb4c3955d7b4fe1cac58deb3cb0dd78ff6855be..3e9e8c8cadc7b7b56c95a044f1b03e4c91cbe054 100644
--- a/src/render/mod.rs
+++ b/src/render/mod.rs
@@ -114,20 +114,23 @@ pub(crate) struct Renderer<'a> {
 	/// The slug (i.e. 23ws-malo2-231016).
 	slug: String,
 	/// The target directory.
-	target: PathBuf
+	target: PathBuf,
+	/// The format to use for intermediate products
+	format: FfmpegOutputFormat
 }
 
 fn svg2mkv(
 	meta: &ProjectSourceMetadata,
 	svg: PathBuf,
 	mkv: PathBuf,
+	format: FfmpegOutputFormat,
 	duration: Time
 ) -> anyhow::Result<()> {
 	let mut ffmpeg = Ffmpeg::new(FfmpegOutput {
 		duration: Some(duration),
 		time_base: Some(meta.source_tbn),
 		fps_mode_vfr: true,
-		..FfmpegOutput::new(FfmpegOutputFormat::Av1Flac, mkv)
+		..FfmpegOutput::new(format, mkv)
 	});
 	ffmpeg.add_input(FfmpegInput {
 		loop_input: true,
@@ -170,10 +173,29 @@ impl<'a> Renderer<'a> {
 		let target = directory.join(&slug);
 		fs::create_dir_all(&target)?;
 
+		let first: PathBuf = directory.join(
+			project
+				.source
+				.files
+				.first()
+				.context("No source files present")?
+		);
+		let height: u32 = ffprobe_video("stream=height", &first)?
+			.split('\n')
+			.next()
+			.unwrap()
+			.parse()?;
+		let format = if height <= 1080 {
+			FfmpegOutputFormat::AvcAac
+		} else {
+			FfmpegOutputFormat::Av1Flac
+		};
+
 		Ok(Self {
 			directory,
 			slug,
-			target
+			target,
+			format
 		})
 	}
 
@@ -244,7 +266,7 @@ impl<'a> Renderer<'a> {
 				.into_bytes()
 		)?;
 		let intro_mkv = self.intro_mkv();
-		svg2mkv(metadata, intro_svg, intro_mkv, INTRO_LEN)?;
+		svg2mkv(metadata, intro_svg, intro_mkv, self.format, INTRO_LEN)?;
 
 		// render outro to svg then mp4
 		let outro_svg = self.target.join("outro.svg");
@@ -253,7 +275,7 @@ impl<'a> Renderer<'a> {
 			outro(source_res).to_string_pretty().into_bytes()
 		)?;
 		let outro_mkv = self.outro_mkv();
-		svg2mkv(metadata, outro_svg, outro_mkv, OUTRO_LEN)?;
+		svg2mkv(metadata, outro_svg, outro_mkv, self.format, OUTRO_LEN)?;
 
 		// copy logo then render to png
 		let logo_svg = self.target.join("logo.svg");
@@ -305,7 +327,7 @@ impl<'a> Renderer<'a> {
 		let output = self.video_file_output();
 		let mut ffmpeg = Ffmpeg::new(FfmpegOutput {
 			video_bitrate: Some(source_res.bitrate() * 3),
-			..FfmpegOutput::new(FfmpegOutputFormat::Av1Flac, output.clone())
+			..FfmpegOutput::new(self.format, output.clone())
 		});
 
 		// add all of our inputs