This repository has been archived on 2025-10-08. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
vencoder/solid-src/src/components/encoders/libaom.tsx
T
linesofcodes 64cfdce699
Build / build (push) Has been cancelled
H.264 & H.265 QuickSync
2025-10-02 15:59:39 +07:00

119 lines
4.0 KiB
TypeScript

import {
DEFAULT_BITRATE,
type CodecInfo,
type FFmpegParamChangedFunc,
type FFmpegParams,
} from "@/util/ffmpeg";
import { os } from "@neutralinojs/lib";
import BreezeIcon from "@/components/BreezeIcon";
import { createEffect, createSignal, Show } from "solid-js";
const DEFAULT_CRF = 23;
function LibaomOptions(props: {
codec: CodecInfo | undefined;
params: FFmpegParams;
onParamChanged: FFmpegParamChangedFunc;
}) {
const [rateControlMode, setRateControlMode] = createSignal("Constant");
createEffect(() => {
const mode = rateControlMode();
props.onParamChanged("twopass", mode === "2PassABR");
switch (mode) {
case "Constant":
props.onParamChanged("crf", props.params.crf ?? DEFAULT_CRF);
props.onParamChanged("vbitrate", undefined);
break;
case "Constrained":
props.onParamChanged("crf", props.params.crf ?? DEFAULT_CRF);
props.onParamChanged(
"vbitrate",
props.params.vbitrate ?? DEFAULT_BITRATE,
);
break;
case "2PassABR":
case "ABR":
props.onParamChanged("crf", undefined);
props.onParamChanged(
"vbitrate",
props.params.vbitrate ?? DEFAULT_BITRATE,
);
break;
}
});
return (
<section id="encoderOptions" class="k-form">
<label>Help</label>
<div>
<button
class="icon-button"
onclick={() =>
os.open(
"https://trac.ffmpeg.org/wiki/Encode/AV1#libaom",
)
}
title="Click to view the documentation for this encoder."
>
<BreezeIcon icon="help-about" alt="Help" />
</button>
</div>
<label for="rateControlMode">Rate-control modes</label>
<select
class="k-dropdown"
onchange={(e) => setRateControlMode(e.target.value)}
name="rateControlMode"
id="rateControlMode"
>
<option value="Constant">Constant Quality</option>
<option value="Constrained">Constrained Quality</option>
<option value="2PassABR">2-Pass Average Bitrate</option>
<option value="ABR">1-Pass Average Bitrate</option>
</select>
<Show
when={
rateControlMode() === "Constant" ||
rateControlMode() === "Constrained"
}
>
<label for="crf">CRF</label>
<input
type="number"
name="crf"
id="crf"
min="1"
max="63"
value={props.params.crf ?? DEFAULT_CRF}
oninput={(e) => {
props.onParamChanged("crf", parseInt(e.target.value));
}}
/>
</Show>
<Show when={rateControlMode() !== "Constant"}>
<label for="bitrate">Bitrate</label>
<div class="row gap2 align-items-center">
<input
type="number"
name="bitrate"
id="bitrate"
aria-label="Kbps"
value={props.params.vbitrate ?? DEFAULT_BITRATE}
oninput={(e) => {
props.onParamChanged(
"vbitrate",
parseInt(e.target.value),
);
}}
/>
<span>Kbps</span>
</div>
</Show>
</section>
);
}
export default LibaomOptions;