Anglais | 中文
Webav est un SDK pour créer / modifier des fichiers vidéo sur la plate-forme Web, construit sur WebCodecs.
Compatible avec Chrome 102+
Le projet Webav offre une variété d'expériences de démonstration rapides. Visitez la page d'accueil de démonstration pour vérifier la compatibilité de votre appareil actuel.
Remarque: Les ressources vidéo de test sont hébergées sur les pages GitHub, donc le démarrage d'une démo peut nécessiter un certain temps de chargement réseau.
Voici quelques démos de fonctionnalités qui pourraient vous intéresser:
av-cliper est le SDK fondamental pour le traitement des données audio et vidéo. Il fournit des classes et des fonctions de base pour aider les développeurs à atteindre rapidement leurs fonctionnalités cibles.
Voici une brève introduction à l'API principale de av-cliper :
IClip résume des matériaux audio et vidéo, analyses des ressources audio et vidéo, image et sous-titre, et fournit des données à d'autres modules.Sprite<IClip> attache des attributs spatiaux et temporels aux matériaux, permettant le contrôle de la position spatiale et du décalage du temps de la vidéo dans le matériau, atteignant la collaboration multi-matériaux, l'animation et d'autres fonctions.Combinator peut ajouter plusieurs sprites et en fonction de leurs positions, couches et compensations de temps, synthétiser et sortir en tant que fichier vidéo. import {
ImgClip ,
MP4Clip ,
OffscreenSprite ,
renderTxt2ImgBitmap ,
Combinator ,
} from '@webav/av-cliper' ;
const spr1 = new OffscreenSprite (
new MP4Clip ( ( await fetch ( './video/bunny.mp4' ) ) . body ) ,
) ;
const spr2 = new OffscreenSprite (
new ImgClip (
await renderTxt2ImgBitmap (
'Watermark' ,
`font-size:40px; color: white; text-shadow: 2px 2px 6px red;` ,
) ,
) ,
) ;
spr2 . time = { offset : 0 , duration : 5e6 } ;
spr2 . setAnimation (
{
'0%' : { x : 0 , y : 0 } ,
'25%' : { x : 1200 , y : 680 } ,
'50%' : { x : 1200 , y : 0 } ,
'75%' : { x : 0 , y : 680 } ,
'100%' : { x : 0 , y : 0 } ,
} ,
{ duration : 4e6 , iterCount : 1 } ,
) ;
spr2 . zIndex = 10 ;
spr2 . opacity = 0.5 ;
const com = new Combinator ( {
width : 1280 ,
height : 720 ,
} ) ;
await com . addSprite ( spr1 ) ;
await com . addSprite ( spr2 ) ;
com . output ( ) ; // => ReadableStream av-canvas s'appuie sur les capacités de base de av-cliper et fournit une toile qui répond aux opérations utilisateur sur les sprites (glisser, mise à l'échelle, rotation), permettant une mise en œuvre rapide de produits comme l'édition vidéo et les postes de travail en streaming en direct.
import {
ImgClip ,
MP4Clip ,
VisibleSprite ,
renderTxt2ImgBitmap ,
} from '@webav/av-cliper' ;
import { AVCanvas } from '@webav/av-canvas' ;
const avCvs = new AVCanvas ( document . querySelector ( '#app' ) , {
width : 1280 ,
height : 720 ,
} ) ;
const spr1 = new VisibleSprite (
new MP4Clip ( ( await fetch ( './video/bunny.mp4' ) ) . body ) ,
) ;
const spr2 = new VisibleSprite (
new ImgClip (
await renderTxt2ImgBitmap (
'Watermark' ,
`font-size:40px; color: white; text-shadow: 2px 2px 6px red;` ,
) ,
) ,
) ;
await avCvs . add ( spr1 ) ;
await avCvs . add ( spr2 ) ;
// Export user-edited materials into a video
// (await avCvs.createCombinator()).output()
// Capture stream from the canvas (MediaStream) for live streaming or video recording
// avCvs.captureStream() av-recorder enregistre MediaStream et publie le flux de fichiers vidéo au format MP4.
import { AVRecorder } from '@webav/av-recorder' ;
const mediaStream = await navigator . mediaDevices . getUserMedia ( {
video : true ,
audio : true ,
} ) ;
const recorder = new AVRecorder ( mediaStream ) ;
recorder . start ( ) ; // => ReadableStream pnpm install && pnpm build dans le répertoire racinepnpm devconcat-media.htmlhttp://localhost:6066/concat-media.htmlpnpm testpnpm install && pnpm build dans le répertoire racinedoc-site et exécuter pnpm devSi vous êtes un débutant dans le domaine de l'audio et de la vidéo Web, vous pouvez commencer par apprendre les bases:
Articles de l'auteur
Graphique de connaissances audio et vidéo
Si ce projet vous a été utile, veuillez parrainer l'auteur à un thé au lait :)
Paypal.me