allow ajust sentences
This commit is contained in:
@@ -239,9 +239,13 @@ function sentenceRow(video, sentence) {
|
||||
}
|
||||
});
|
||||
saveContainer.append(save);
|
||||
const timeContainer = document.createElement("td");
|
||||
const startLabel = document.createElement("span");
|
||||
startLabel.textContent = formatDuration(sentence.start_ms);
|
||||
timeContainer.append(startLabel, " — ", boundaryControl(video, sentence));
|
||||
row.append(
|
||||
textCell(String(sentence.index + 1)),
|
||||
textCell(`${formatDuration(sentence.start_ms)} - ${formatDuration(sentence.end_ms)}`),
|
||||
timeContainer,
|
||||
textContainer,
|
||||
languageContainer,
|
||||
saveContainer,
|
||||
@@ -249,6 +253,50 @@ function sentenceRow(video, sentence) {
|
||||
return row;
|
||||
}
|
||||
|
||||
function boundaryControl(video, sentence) {
|
||||
const container = document.createElement("div");
|
||||
container.className = "boundary-control";
|
||||
const label = document.createElement("span");
|
||||
label.className = "boundary-time";
|
||||
label.textContent = formatDuration(sentence.end_ms);
|
||||
const status = document.createElement("span");
|
||||
status.className = "boundary-status";
|
||||
|
||||
async function adjust(deltaMs, changedButton) {
|
||||
const buttons = [minus, plus];
|
||||
buttons.forEach((item) => { item.disabled = true; });
|
||||
status.textContent = "";
|
||||
try {
|
||||
await api(
|
||||
`/api/v1/admin/videos/${video.video_hash}/sentences/${sentence.index}/boundary`,
|
||||
{
|
||||
method: "PUT",
|
||||
headers: { "Content-Type": "application/json" },
|
||||
body: JSON.stringify({ delta_ms: deltaMs }),
|
||||
},
|
||||
);
|
||||
await openSentences(video);
|
||||
} catch (error) {
|
||||
elements.serviceState.textContent = `分割点调整失败: ${error.message}`;
|
||||
status.textContent = "失败";
|
||||
buttons.forEach((item) => { item.disabled = false; });
|
||||
window.setTimeout(() => { status.textContent = ""; }, 1800);
|
||||
}
|
||||
if (changedButton) {
|
||||
window.setTimeout(() => {
|
||||
changedButton.textContent = deltaMs < 0 ? "−0.1" : "+0.1";
|
||||
}, 900);
|
||||
}
|
||||
}
|
||||
|
||||
const minus = button("−0.1", (event) => adjust(event.shiftKey ? -10 : -100, minus));
|
||||
const plus = button("+0.1", (event) => adjust(event.shiftKey ? 10 : 100, plus));
|
||||
minus.title = "结束点提前 0.1 秒;按住 Shift 微调 0.01 秒";
|
||||
plus.title = "结束点延后 0.1 秒;按住 Shift 微调 0.01 秒";
|
||||
container.append(minus, label, plus, status);
|
||||
return container;
|
||||
}
|
||||
|
||||
async function reprocess(videoHash) {
|
||||
try {
|
||||
await api(`/api/v1/admin/videos/${videoHash}/process`, { method: "POST" });
|
||||
|
||||
Reference in New Issue
Block a user