fix(canvas): 视频片段 - 精确裁切视频并提取音轨

Co-authored-by: dlh <2773843782@qq.com>
Original-PR: https://github.com/ddcat-ai/open-ai-canvas/pull/224
This commit is contained in:
dlh
2026-08-14 20:45:26 +08:00
committed by ddCat
parent ff7a27494a
commit b531c47fd5
4 changed files with 42 additions and 12 deletions

View File

@@ -0,0 +1,19 @@
import { describe, expect, test } from "bun:test";
import { buildExtractAudioArgs, buildSegmentTrimArgs, SEGMENT_INPUT_NAME, SEGMENT_OUTPUT_NAME } from "../src/lib/canvas/canvas-video-segment-args";
describe("buildSegmentTrimArgs seek 顺序", () => {
test("-ss 必须放在 -i 之后(输出 seek):输入 seek 按关键帧对齐,切点会偏移最多一个 GOP", () => {
const args = buildSegmentTrimArgs("10.5", "4");
expect(args.indexOf("-ss")).toBeGreaterThan(args.indexOf("-i"));
expect(args).toEqual(["-i", SEGMENT_INPUT_NAME, "-ss", "10.5", "-t", "4", "-c:v", "libx264", "-preset", "veryfast", "-crf", "20", "-c:a", "aac", "-movflags", "+faststart", SEGMENT_OUTPUT_NAME]);
});
});
describe("buildExtractAudioArgs seek 顺序", () => {
test("音频提取与裁切路径一致,同样使用输出 seek", () => {
const args = buildExtractAudioArgs("libmp3lame", "10.5", "4");
expect(args.indexOf("-ss")).toBeGreaterThan(args.indexOf("-i"));
expect(args).toEqual(["-i", SEGMENT_INPUT_NAME, "-ss", "10.5", "-t", "4", "-vn", "-c:a", "libmp3lame", "-q:a", "2", SEGMENT_OUTPUT_NAME]);
});
});