Edição de Vídeo (weizhi:video)
Escopo
| Faz | Não Faz |
|---|---|
probe, extrair quadros/faixas de áudio, exportVideo exportar | Usar webview_exec para decodificar MP4 inteiro |
| v1 remux: cortar início/fim, junção sem fade | Fingir suporte a transcodificação em desktop (pacote não disponível em desktop) |
Protocolo de Início
- Primeiro
load_skill(video-edit) leia este documento. - Antes de escrever
exportVideoou timeline complexa:find_capsuma vez (query comexportVideo weizhi:videoou capacidade específica), siga o exemplo de chamada retornado, não invente nomes de campos. - Coloque scripts em
jobs/*.js, execute comrun_jsusandofile; pode aumentartimeout_ms(limite 600000). - Erros de API no script (ex.:
bad argument,unsupported): execute novamentefind_capspara verificar assinatura e ajuste o script.
Seleção de Rota
| Tarefa | API |
|---|---|
| Apenas cortar um trecho, concatenar vários segmentos sem recodificar | v1 exportVideo({ clips: [{ path, startMs?, endMs? }], output }) |
| Múltiplas faixas, capa com foto, Ken Burns, crossfade | v2 exportVideo({ width, height, tracks, output }) |
Timeline v2 (Pontos Chave)
- Foto / imagem: faixa
type: "image",durationMsobrigatório. - Trecho MP4: faixa
type: "video",inMs/outMs; não coloque imagens em faixa de vídeo. - Crossfade (apenas faixa image): no clipe seguinte, defina
transition: { type: "crossfade", durationMs: D }, e
startMs_next = startMs_prev + durationMs_prev - D(sobreposição exata de D milissegundos). Não existe campocrossfadeMs. - Clipes na mesma faixa sem
transitiondeclarado não podem ter sobreposição temporal; errooverlapping clipsindica verificar a fórmula etransition. transitione keyframes de opacidade escritos no mesmo clipe não podem ser usados simultaneamente.- Faixa de áudio:
type: "audio"como faixa separada.
Exemplo (duas imagens com fade + vídeo em seguida):
import { exportVideo } from "weizhi:video";
const D = 300;
await exportVideo({
width: 720,
height: 1280,
tracks: [
{
type: "image",
clips: [
{ src: "a.jpg", startMs: 0, durationMs: 1000 },
{
src: "b.jpg",
startMs: 1000 - D,
durationMs: 1000,
transition: { type: "crossfade", durationMs: D },
},
],
},
{
type: "video",
clips: [{ src: "clip.mp4", startMs: 1700, inMs: 0, outMs: 5000 }],
},
],
output: "out/final.mp4",
});
Fluxo Recomendado
probeduração e resolução do vídeo fonte.- Se precisar de quadros de capa:
extractFrame/extractFrames(vejafind_caps). - Vídeos complexos: pode exportar
part1.mp4,part2.mp4intermediários com v1, depois concatenar com v1 ou v2; evite sobrepor clipes em uma faixa sem declarar transição. - Trilha sonora: faixa
audioseparada,outMsalinhado à duração total do vídeo.
Organização
- Um único script
jobs/render.jsexecuta sequencialmente: detecção, exportação, verificação (pode usarprobenovamente no resultado). - Não use múltiplas ferramentas externas no lugar de um único script.
Como Falar com o Usuário
Informe o nome do arquivo final e sua duração; use link [Vídeo final](out/xxx.mp4). Evite jargão técnico.