From b268768c3666b02a0d35d314fa551390e66b2444 Mon Sep 17 00:00:00 2001 From: Snider Date: Mon, 24 Jan 2022 07:43:24 +0000 Subject: [PATCH] Switching machines, ffmpeg + readable byte stream --- .dataset/Dont-Panic.webp | Bin 0 -> 14730 bytes .run/Test.run.xml | 5 +++++ README.md | 2 ++ deno.json | 3 ++- lib/log.ts | 14 ++++++++++++++ lib/media/video/fmpeg.ts | 21 +++++++++++++++++++++ lib/parse/file.test.ts | 9 +++++++++ lib/parse/file.ts | 33 +++++++++++++++++++++++++++++++++ 8 files changed, 86 insertions(+), 1 deletion(-) create mode 100644 .dataset/Dont-Panic.webp create mode 100644 .run/Test.run.xml create mode 100644 lib/log.ts create mode 100644 lib/media/video/fmpeg.ts create mode 100644 lib/parse/file.test.ts create mode 100644 lib/parse/file.ts diff --git a/.dataset/Dont-Panic.webp b/.dataset/Dont-Panic.webp new file mode 100644 index 0000000000000000000000000000000000000000..250243e12f76c36837bbc1b2bbe20f399f062fc9 GIT binary patch literal 14730 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
a=3dvOnk?dH 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 T-$-U0VJ-=ShAfW#P20f>= literal 0 HcmV?d00001 diff --git a/.run/Test.run.xml b/.run/Test.run.xml new file mode 100644 index 0000000..26b72b7 --- /dev/null +++ b/.run/Test.run.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/README.md b/README.md index 27ceb35..ba906fd 100644 --- a/README.md +++ b/README.md @@ -12,3 +12,5 @@ Do not edit, EXTEND or otherwise play with ANY variable, unless you UNDERSTAND t [Read Before Use](DISCLAIMER.md) you've been warned. +- ffmpeg + `deno run --unstable --allow-read --allow-run https://github.com/Snider/Enchatrix/lib/media/video/fmpeg.ts` diff --git a/deno.json b/deno.json index 00f78ac..5a3e9fc 100644 --- a/deno.json +++ b/deno.json @@ -2,7 +2,8 @@ "compilerOptions": { "target": "esnext", "lib": [ - "deno.ns" + "deno.ns", + "dom" ] }, "lint": { diff --git a/lib/log.ts b/lib/log.ts new file mode 100644 index 0000000..80444bb --- /dev/null +++ b/lib/log.ts @@ -0,0 +1,14 @@ +export class EnchantrixLog { + + constructor(entry: string, level: number = 1) { + switch (level) { + case 0: + break; + case 1: + console.log(entry) + break + case 2: + console.warn(entry) + } + } +} diff --git a/lib/media/video/fmpeg.ts b/lib/media/video/fmpeg.ts new file mode 100644 index 0000000..8f232cc --- /dev/null +++ b/lib/media/video/fmpeg.ts @@ -0,0 +1,21 @@ +#!deno run --unstable --allow-read --allow-run + +import { ffmpeg } from "https://deno.land/x/fast_forward@0.1.6/ffmpeg.ts"; + +await ffmpeg("https://www.w3schools.com/html/mov_bbb.mp4") + // Global encoding options (applied to all outputs). + .audioBitrate("192k") + .videoBitrate("1M") + .width(480) + .height(640) + // Ouput 1. + .output("output.mp4") + .audioCodec("aac") + .videoCodec("libx264") + // Ouput 2. + .output("output.webm") + .audioCodec("libvorbis") + .videoCodec("libvpx-vp9") + .encode(); + +console.log("All encodings done!"); diff --git a/lib/parse/file.test.ts b/lib/parse/file.test.ts new file mode 100644 index 0000000..fe583ac --- /dev/null +++ b/lib/parse/file.test.ts @@ -0,0 +1,9 @@ +import { assertEquals } from "https://deno.land/std@0.122.0/testing/asserts.ts"; +import { EnchantrixParseFile } from "./file.ts"; + +// Compact form: name and function +Deno.test("IN: Snider OUT: r3dinS", () => { + const x = new EnchantrixParseFile(".dataset/Dont-Panic.webp").load(); + assertEquals(x, "r3dinS"); +}); + diff --git a/lib/parse/file.ts b/lib/parse/file.ts new file mode 100644 index 0000000..7d8f531 --- /dev/null +++ b/lib/parse/file.ts @@ -0,0 +1,33 @@ +#!deno run --allow-read --allow-net + +import * as path from "https://deno.land/std@0.122.0/path/mod.ts"; +import { readableStreamFromReader } from "https://deno.land/std@0.122.0/streams/mod.ts"; +import {EnchantrixLog} from '../log.ts'; + +export class EnchantrixParseFile { + + protected _input: string; + protected _data: any; + + constructor(file: string) { + this._input = file; + } + + load() { + + try { + this._data = Deno.openSync(this._input, { read: true }); + const stat = this._data.statSync(); + + } catch { + throw new EnchantrixLog('Failed to load file') + } + +// Build a readable stream so the file doesn't have to be fully loaded into +// memory while we send it + const readableStream = readableStreamFromReader(this._data); + + return readableStream + + } +}