mirror of
https://gitlab.com/soapbox-pub/ditto.git
synced 2025-12-06 03:19:46 +00:00
transcode: simplify pipe
This commit is contained in:
parent
044930cc8d
commit
462c00a3e7
2 changed files with 5 additions and 30 deletions
|
|
@ -2,7 +2,7 @@ import { transcodeVideo } from './transcode.ts';
|
|||
|
||||
Deno.test('transcodeVideo', async () => {
|
||||
await using file = await Deno.open(new URL('./buckbunny.mp4', import.meta.url));
|
||||
const output = await transcodeVideo(file.readable);
|
||||
const output = transcodeVideo(file.readable);
|
||||
|
||||
await Deno.writeFile(new URL('./buckbunny-transcoded.mp4', import.meta.url), output);
|
||||
});
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
export async function transcodeVideo(input: ReadableStream<Uint8Array>): Promise<ReadableStream<Uint8Array>> {
|
||||
export function transcodeVideo(input: ReadableStream<Uint8Array>): ReadableStream<Uint8Array> {
|
||||
const opts = {
|
||||
'i': 'pipe:0', // Read input from stdin
|
||||
'c:v': 'libx264', // Convert to H.264
|
||||
|
|
@ -18,38 +18,13 @@ export async function transcodeVideo(input: ReadableStream<Uint8Array>): Promise
|
|||
],
|
||||
stdin: 'piped',
|
||||
stdout: 'piped',
|
||||
stderr: 'piped',
|
||||
});
|
||||
|
||||
// Spawn the FFmpeg process
|
||||
const process = command.spawn();
|
||||
|
||||
// Capture stderr for debugging
|
||||
const stderrPromise = new Response(process.stderr).text().then((text) => {
|
||||
if (text.trim()) console.error('FFmpeg stderr:', text);
|
||||
});
|
||||
const child = command.spawn();
|
||||
|
||||
// Pipe the input stream into FFmpeg stdin and ensure completion
|
||||
const writer = process.stdin.getWriter();
|
||||
const reader = input.getReader();
|
||||
input.pipeTo(child.stdin);
|
||||
|
||||
async function pumpInput() {
|
||||
try {
|
||||
while (true) {
|
||||
const { done, value } = await reader.read();
|
||||
if (done) break;
|
||||
await writer.write(value);
|
||||
}
|
||||
} finally {
|
||||
writer.close(); // Close stdin to signal FFmpeg that input is done
|
||||
}
|
||||
}
|
||||
|
||||
// Start pumping input asynchronously
|
||||
pumpInput();
|
||||
|
||||
// Ensure stderr logs are captured
|
||||
stderrPromise.catch(console.error);
|
||||
|
||||
return process.stdout;
|
||||
return child.stdout;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue