Add umd output and update browser apps

This commit is contained in:
Jerome Wu 2022-09-23 18:16:34 +08:00
parent edb05a6572
commit c38ab7551b
11 changed files with 1377 additions and 32 deletions

View File

@ -40,7 +40,7 @@ FROM ffmpeg-builder AS ffmpeg-wasm-builder
COPY src/bind /src/wasm/bind
COPY src/fftools /src/wasm/fftools
COPY build/ffmpeg-wasm.sh build.sh
RUN mkdir -p /src/dist/cjs && bash -x /src/build.sh -o dist/cjs/ffmpeg.js
RUN mkdir -p /src/dist/umd && bash -x /src/build.sh -o dist/umd/ffmpeg.js
RUN mkdir -p /src/dist/esm && bash -x /src/build.sh -sEXPORT_ES6 -o dist/esm/ffmpeg.js
# Export ffmpeg-core.wasm to dist/, use `docker buildx build -o . .` to get assets

View File

@ -0,0 +1,35 @@
<html>
<head>
<link rel="stylesheet" href="style.css">
</head>
<body>
<h3>Upload a video to transcode to mp4 (x264) and play!</h3>
<video id="output-video" controls></video><br/>
<input type="file" id="uploader">
<p id="message"></p>
<script type="module">
import createFFmpeg from "../../packages/ffmpeg/dist/esm/ffmpeg.js";
import { fetchFile } from "../../packages/util/dist/esm/index.js";
let ffmpeg = null;
const transcode = async ({ target: { files } }) => {
const message = document.getElementById('message');
if (ffmpeg === null) {
ffmpeg = await createFFmpeg();
ffmpeg.setProgress((progress) => { console.log(progress * 100); });
}
const { name } = files[0];
ffmpeg.FS.writeFile(name, await fetchFile(files[0]));
message.innerHTML = 'Start transcoding';
await ffmpeg.exec('-i', name, 'output.mp4');
message.innerHTML = 'Complete transcoding';
const data = ffmpeg.FS.readFile('output.mp4');
const video = document.getElementById('output-video');
video.src = URL.createObjectURL(new Blob([data.buffer], { type: 'video/mp4' }));
}
const elm = document.getElementById('uploader');
elm.addEventListener('change', transcode);
</script>
</body>
</html>

View File

@ -1,6 +1,8 @@
<html>
<head>
<link rel="stylesheet" href="style.css">
<script src="../../packages/ffmpeg/dist/umd/ffmpeg.js"></script>
<script src="../../packages/util/dist/umd/index.js"></script>
</head>
<body>
<h3>Upload a video to transcode to mp4 (x264) and play!</h3>
@ -8,8 +10,7 @@
<input type="file" id="uploader">
<p id="message"></p>
<script type="module">
import createFFmpeg from "../../packages/ffmpeg/dist/esm/ffmpeg.js";
import { fetchFile } from "../../packages/util/dist/esm/index.js";
const { fetchFile } = FFmpegUtil;
let ffmpeg = null;
const transcode = async ({ target: { files } }) => {

View File

@ -1,18 +1,8 @@
<html>
<head>
<script src="/dist/ffmpeg.dev.js"></script>
<style>
html, body {
margin: 0;
width: 100%;
height: 100%
}
body {
display: flex;
flex-direction: column;
align-items: center;
}
</style>
<link rel="stylesheet" href="style.css">
<script src="../../packages/ffmpeg/dist/umd/ffmpeg.js"></script>
<script src="../../packages/util/dist/umd/index.js"></script>
</head>
<body>
<h3>Upload a mp4 (x264) video and trim its first 1 seconds and play!</h3>
@ -20,19 +10,22 @@
<input type="file" id="uploader">
<p id="message"></p>
<script>
const { createFFmpeg, fetchFile } = FFmpeg;
const ffmpeg = createFFmpeg({ log: true });
const { fetchFile } = FFmpegUtil;
let ffmpeg = null;
const trim = async ({ target: { files } }) => {
const message = document.getElementById('message');
if (ffmpeg === null) {
ffmpeg = await createFFmpeg();
ffmpeg.setProgress((progress) => { console.log(progress * 100) });
}
const { name } = files[0];
message.innerHTML = 'Loading ffmpeg-core.js';
await ffmpeg.load();
message.innerHTML = 'Start trimming';
ffmpeg.FS('writeFile', name, await fetchFile(files[0]));
await ffmpeg.run('-i', name, '-ss', '0', '-to', '1', 'output.mp4');
ffmpeg.FS.writeFile(name, await fetchFile(files[0]));
await ffmpeg.exec('-i', name, '-ss', '0', '-to', '1', 'output.mp4');
message.innerHTML = 'Complete trimming';
const data = ffmpeg.FS('readFile', 'output.mp4');
const data = ffmpeg.FS.readFile('output.mp4');
const video = document.getElementById('output-video');
video.src = URL.createObjectURL(new Blob([data.buffer], { type: 'video/mp4' }));

1307
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -2,13 +2,13 @@
"name": "@ffmpeg/ffmpeg-mt",
"version": "0.11.5",
"description": "FFmpeg WebAssembly version w/ multi-thread",
"main": "./dist/cjs/ffmpeg.js",
"main": "./dist/umd/ffmpeg.js",
"types": "./types/ffmpeg.d.ts",
"exports": {
".": {
"types": "./types/ffmpeg.d.ts",
"import": "./dist/esm/ffmpeg.js",
"require": "./dist/cjs/ffmpeg.js"
"require": "./dist/umd/ffmpeg.js"
}
},
"scripts": {

View File

@ -9,7 +9,7 @@
<div id="mocha"></div>
<script src="../../../node_modules/mocha/mocha.js"></script>
<script src="../../../node_modules/chai/chai.js"></script>
<script src="../dist/cjs/ffmpeg.js"></script>
<script src="../dist/umd/ffmpeg.js"></script>
<script src="./constants.js"></script>
<script>mocha.setup('bdd');</script>
<script src="./ffmpeg.test.js"></script>

View File

@ -2,13 +2,13 @@
"name": "@ffmpeg/ffmpeg",
"version": "0.11.5",
"description": "FFmpeg WebAssembly version",
"main": "./dist/cjs/ffmpeg.js",
"main": "./dist/umd/ffmpeg.js",
"types": "./types/ffmpeg.d.ts",
"exports": {
".": {
"types": "./types/ffmpeg.d.ts",
"import": "./dist/esm/ffmpeg.js",
"require": "./dist/cjs/ffmpeg.js"
"require": "./dist/umd/ffmpeg.js"
}
},
"scripts": {

View File

@ -9,7 +9,7 @@
<div id="mocha"></div>
<script src="../../../node_modules/mocha/mocha.js"></script>
<script src="../../../node_modules/chai/chai.js"></script>
<script src="../dist/cjs/ffmpeg.js"></script>
<script src="../dist/umd/ffmpeg.js"></script>
<script src="./constants.js"></script>
<script>mocha.setup('bdd');</script>
<script src="./ffmpeg.test.js"></script>

View File

@ -13,7 +13,7 @@
},
"scripts": {
"dev": "tsc -p tsconfig-esm.json --watch",
"build": "rimraf dist && tsc -p tsconfig-esm.json && tsc -p tsconfig-cjs.json",
"build": "rimraf dist && tsc -p tsconfig-esm.json && tsc -p tsconfig-cjs.json && webpack",
"lint": "eslint src"
},
"files": [
@ -46,6 +46,7 @@
"@typescript-eslint/parser": "^5.37.0",
"eslint": "^8.23.1",
"rimraf": "^3.0.2",
"typescript": "^4.8.3"
"typescript": "^4.8.3",
"webpack-cli": "^4.10.0"
}
}

View File

@ -0,0 +1,12 @@
const path = require("path");
module.exports = {
mode: "production",
entry: "./dist/cjs/index.js",
output: {
library: "FFmpegUtil",
libraryTarget: "umd",
filename: "index.js",
path: path.resolve(__dirname, "dist", "umd"),
},
};