lainTSX/scripts/extract/extract_media.mjs

113 lines
2.4 KiB
JavaScript

import { spawnSync, spawn } from "child_process";
import { mkdirSync, readdirSync, rmSync } from "fs";
import { join } from "path";
export function extract_video(tempdir, jpsxdec_jar, no_delete) {
// extract all video
for (const disc_index of ["disc1.idx", "disc2.idx"]) {
spawnSync(
"java",
[
"-jar",
jpsxdec_jar,
"-x",
join(tempdir, disc_index),
"-a",
"video",
"-dir",
tempdir,
"-quality",
"high",
"-vf",
"avi:rgb",
"-up",
"Lanczos3",
],
{ stdio: "inherit" }
);
}
const output_movie_folder = join(
"..",
"..",
"src",
"static",
"media",
"movie"
);
// create destination folder
mkdirSync(output_movie_folder, { recursive: true });
// convert all movies to mp4
for (const movieDir of ["MOVIE", "MOVIE2"]) {
for (let file of readdirSync(`${join(tempdir, movieDir)}`)) {
if (file.endsWith(".wav")) continue;
spawnSync(
"ffmpeg",
[
"-i",
join(tempdir, movieDir, file),
"-pix_fmt",
"yuv420p",
"-n",
join(output_movie_folder, file.replace("avi", "mp4")),
],
{ stdio: "inherit" }
);
}
}
if (!no_delete) {
// cleanup source folders
rmSync(join(tempdir, "MOVIE"), { recursive: true });
rmSync(join(tempdir, "MOVIE2"), { recursive: true });
}
}
export function extract_audio(tempdir, jpsxdec_jar, no_delete) {
// extract all audio
for (const disc_index of ["disc1.idx", "disc2.idx"]) {
spawnSync(
"java",
[
"-jar",
jpsxdec_jar,
"-x",
join(tempdir, disc_index),
"-a",
"audio",
"-dir",
tempdir,
],
{ stdio: "inherit" }
);
}
const output_audio_folder = join(
"..",
"..",
"src",
"static",
"media",
"audio"
);
// create destination folder
mkdirSync(output_audio_folder, { recursive: true });
// convert all audio to mp4
for (let file of readdirSync(`${join(tempdir, "XA")}`)) {
spawnSync("ffmpeg", [
"-i",
join(tempdir, "XA", file),
"-n",
join(output_audio_folder, file.replace("wav", "mp4")),
], {stdio:'inherit'});
}
if (!no_delete) {
// cleanup source folder
rmSync(join(tempdir, "XA"), { recursive: true });
}
}