1
0
mirror of https://github.com/robonen/tools.git synced 2026-03-20 02:44:45 +00:00
* chore(repo): update deps in cli

* refactor(packages/tsconfig): change target to ESNext

* chore(deps): update all deps

* feat(apps/vhs): add vhs app

* chore(deps): sync with master
This commit is contained in:
2024-09-28 02:09:29 +07:00
committed by GitHub
parent 65312d007e
commit 9805b30c75
9 changed files with 78 additions and 5 deletions

2
apps/vhs/.gitignore vendored Normal file
View File

@@ -0,0 +1,2 @@
bin/**
!bin/.gitkeep

1
apps/vhs/README.md Normal file
View File

@@ -0,0 +1 @@
# @robonen/vhs

0
apps/vhs/bin/.gitkeep Normal file
View File

5
apps/vhs/jsr.json Normal file
View File

@@ -0,0 +1,5 @@
{
"name": "@robonen/vhs",
"version": "0.0.0",
"exports": "./src/index.ts"
}

26
apps/vhs/package.json Normal file
View File

@@ -0,0 +1,26 @@
{
"name": "@robonen/vhs",
"private": true,
"version": "0.0.1",
"license": "UNLICENSED",
"description": "",
"keywords": [],
"author": "Robonen Andrew <robonenandrew@gmail.com>",
"repository": {
"type": "git",
"url": "git+https://github.com/robonen/tools.git",
"directory": "./apps/vhs"
},
"packageManager": "pnpm@9.11.0",
"engines": {
"bun": ">=1.1.27"
},
"type": "module",
"scripts": {
"start": "bun run src/index.ts"
},
"devDependencies": {
"@robonen/tsconfig": "workspace:*",
"@types/bun": "^1.1.10"
}
}

36
apps/vhs/src/index.ts Normal file
View File

@@ -0,0 +1,36 @@
import { version } from '../package.json';
import { resolve } from 'path';
import { $, Glob } from 'bun';
async function ffmpegMergeAndTranscodeAvi(files: Set<string>) {
const ffmpeg = resolve('bin/ffmpeg');
const output = resolve('output.mp4');
const input = Array.from(files).toSorted((a, b) => a.localeCompare(b)).join('|');
const shell = $`${ffmpeg} -i "concat:${input}" -stats -c:v libx264 -crf 23 -preset veryfast -c:a aac ${output}`;
for await (const line of shell.lines()) {
console.log(line);
}
}
const path = Bun.argv[2];
if (!path) {
console.error('Please provide a path to a file or directory');
process.exit(1);
}
console.info(`Welcome to VHS v${version} 📼`);
console.info(`Scanning ${path}...`);
const glob = new Glob(resolve(path));
const files = new Set<string>();
for await (const file of glob.scan({ followSymlinks: false })) {
files.add(file);
}
console.info(`Found ${files.size} files`);
console.info(await ffmpegMergeAndTranscodeAvi(files));

3
apps/vhs/tsconfig.json Normal file
View File

@@ -0,0 +1,3 @@
{
"extends": "@robonen/tsconfig/tsconfig.json"
}

8
cli.ts
View File

@@ -3,10 +3,10 @@ import { defineCommand, runMain } from 'citty';
import { resolve } from 'pathe';
import { splitByCase } from 'scule';
const PACKAGE_MANAGER = 'pnpm@9.1.3';
const NODE_VERSION = '>=20.13.1';
const VITE_VERSION = '^5.2.11';
const VITE_DTS_VERSION = '^3.9.1';
const PACKAGE_MANAGER = 'pnpm@9.11.0';
const NODE_VERSION = '>=20.17.0';
const VITE_VERSION = '^5.4.8';
const VITE_DTS_VERSION = '^4.2.2';
const PATHE_VERSION = '^1.1.2'
const DEFAULT_DIR = 'packages';

View File

@@ -3,7 +3,7 @@
"display": "Base TypeScript Configuration",
"compilerOptions": {
/* Basic Options */
"module": "Preserve",
"module": "ESNext",
"noEmit": true,
"lib": ["ESNext"],
"moduleResolution": "Bundler",