Add ffmpeg amd hardware acceleration presets (#324)

This commit is contained in:
bytedream 2024-02-25 18:46:48 +01:00 committed by GitHub
parent 6a50567916
commit 6a7aa25e1a
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -69,6 +69,7 @@ ffmpeg_enum! {
ffmpeg_enum! { ffmpeg_enum! {
enum FFmpegHwAccel { enum FFmpegHwAccel {
Nvidia, Nvidia,
Amd,
Apple Apple
} }
} }
@ -101,7 +102,11 @@ impl FFmpegPreset {
FFmpegHwAccel::all(), FFmpegHwAccel::all(),
FFmpegQuality::all(), FFmpegQuality::all(),
), ),
(FFmpegCodec::Av1, vec![], FFmpegQuality::all()), (
FFmpegCodec::Av1,
vec![FFmpegHwAccel::Amd],
FFmpegQuality::all(),
),
]; ];
let mut return_values = vec![]; let mut return_values = vec![];
@ -285,6 +290,10 @@ impl FFmpegPreset {
crf_quality(); crf_quality();
output.extend(["-c:v", "h264_nvenc", "-c:a", "copy"]) output.extend(["-c:v", "h264_nvenc", "-c:a", "copy"])
} }
FFmpegHwAccel::Amd => {
crf_quality();
output.extend(["-c:v", "h264_amf", "-c:a", "copy"])
}
FFmpegHwAccel::Apple => { FFmpegHwAccel::Apple => {
// Apple's Video Toolbox encoders ignore `-crf`, use `-q:v` // Apple's Video Toolbox encoders ignore `-crf`, use `-q:v`
// instead. It's on a scale of 1-100, 100 being lossless. Just // instead. It's on a scale of 1-100, 100 being lossless. Just
@ -332,8 +341,12 @@ impl FFmpegPreset {
"hvc1", "hvc1",
]) ])
} }
FFmpegHwAccel::Amd => {
crf_quality();
output.extend(["-c:v", "hevc_amf", "-c:a", "copy"])
}
FFmpegHwAccel::Apple => { FFmpegHwAccel::Apple => {
// See the comment that starts on line 287. // See the comment for apple h264 hwaccel
match quality { match quality {
FFmpegQuality::Lossless => output.extend(["-q:v", "61"]), FFmpegQuality::Lossless => output.extend(["-q:v", "61"]),
FFmpegQuality::Normal => (), FFmpegQuality::Normal => (),
@ -356,12 +369,17 @@ impl FFmpegPreset {
} }
} }
FFmpegCodec::Av1 => { FFmpegCodec::Av1 => {
output.extend(["-c:v", "libsvtav1", "-c:a", "copy"]); let mut crf_quality = || match quality {
match quality {
FFmpegQuality::Lossless => output.extend(["-crf", "22"]), FFmpegQuality::Lossless => output.extend(["-crf", "22"]),
FFmpegQuality::Normal => (), FFmpegQuality::Normal => (),
FFmpegQuality::Low => output.extend(["-crf", "35"]), FFmpegQuality::Low => output.extend(["-crf", "35"]),
};
crf_quality();
if let Some(FFmpegHwAccel::Amd) = hwaccel_opt {
output.extend(["-c:v", "av1_amf", "-c:a", "copy"]);
} else {
output.extend(["-c:v", "libsvtav1", "-c:a", "copy"]);
} }
} }
} }