mirror of
https://github.com/ad044/lainTSX.git
synced 2024-10-22 23:19:06 +00:00
92 lines
2.4 KiB
JavaScript
92 lines
2.4 KiB
JavaScript
|
import { execSync, exec } from "child_process";
|
||
|
import { tmpdir } from "os";
|
||
|
import { mkdtempSync, existsSync, mkdirSync, readdirSync, rmSync } from "fs";
|
||
|
import { join } from "path";
|
||
|
|
||
|
const tempdir = mkdtempSync(join(tmpdir(), "extractor-"));
|
||
|
console.log(tempdir);
|
||
|
|
||
|
const jpsxdec_jar = join("jpsxdec", "jpsxdec.jar");
|
||
|
const disc1_index = join(tempdir, "disc1.idx");
|
||
|
const disc2_index = join(tempdir, "disc2.idx");
|
||
|
|
||
|
// generate disc indexes
|
||
|
execSync(
|
||
|
`java -jar ${jpsxdec_jar} -f ${join(
|
||
|
"discs",
|
||
|
"disc1.bin"
|
||
|
)} -x "${disc1_index}"`,
|
||
|
{ stdio: "inherit" }
|
||
|
);
|
||
|
|
||
|
execSync(
|
||
|
`java -jar ${jpsxdec_jar} -f ${join(
|
||
|
"discs",
|
||
|
"disc2.bin"
|
||
|
)} -x "${disc2_index}"`,
|
||
|
{ stdio: "inherit" }
|
||
|
);
|
||
|
|
||
|
// extract all video and audio
|
||
|
execSync(
|
||
|
`java -jar ${jpsxdec_jar} -x "${disc1_index}" -a video -dir "${tempdir}" -quality high -vf avi:rgb -up Lanczos3`,
|
||
|
{ stdio: "inherit" }
|
||
|
);
|
||
|
|
||
|
execSync(
|
||
|
`java -jar ${jpsxdec_jar} -x "${disc1_index}" -a audio -dir "${tempdir}"`,
|
||
|
{ stdio: "inherit" }
|
||
|
);
|
||
|
|
||
|
execSync(
|
||
|
`java -jar ${jpsxdec_jar} -x "${disc2_index}" -a video -dir "${tempdir}" -quality high -vf avi:rgb -up Lanczos3`,
|
||
|
{ stdio: "inherit" }
|
||
|
);
|
||
|
|
||
|
execSync(
|
||
|
`java -jar ${jpsxdec_jar} -x "${disc2_index}" -a audio -dir "${tempdir}"`,
|
||
|
{ stdio: "inherit" }
|
||
|
);
|
||
|
|
||
|
const output_movie_folder = join("..", "..", "src", "static", "movie");
|
||
|
const output_audio_folder = join("..", "..", "src", "static", "audio");
|
||
|
|
||
|
if (!existsSync(output_movie_folder)) {
|
||
|
mkdirSync(output_movie_folder);
|
||
|
}
|
||
|
|
||
|
if (!existsSync(output_audio_folder)) {
|
||
|
mkdirSync(output_audio_folder);
|
||
|
}
|
||
|
|
||
|
for (let file of readdirSync(`${join(tempdir, "MOVIE")}`)) {
|
||
|
if (file.endsWith(".wav")) continue;
|
||
|
exec(
|
||
|
`ffmpeg -i "${join(tempdir, "MOVIE", file)}" -n ${join(
|
||
|
output_movie_folder,
|
||
|
file.replace("avi", "webm")
|
||
|
)}`
|
||
|
).stderr.on("data", (data) => console.log(data));
|
||
|
}
|
||
|
|
||
|
for (let file of readdirSync(`${join(tempdir, "MOVIE2")}`)) {
|
||
|
if (file.endsWith(".wav")) continue;
|
||
|
exec(
|
||
|
`ffmpeg -i "${join(tempdir, "MOVIE", file)}" -n ${join(
|
||
|
output_movie_folder,
|
||
|
file.replace("avi", "webm")
|
||
|
)}`
|
||
|
).stderr.on("data", (data) => console.log(data));
|
||
|
}
|
||
|
|
||
|
for (let file of readdirSync(`${join(tempdir, "XA")}`)) {
|
||
|
exec(
|
||
|
`ffmpeg -i "${join(tempdir, "XA", file)}" -n ${join(
|
||
|
output_audio_folder,
|
||
|
file.replace("wav", "ogg")
|
||
|
)}`
|
||
|
).stderr.on("data", (data) => console.log(data));
|
||
|
}
|
||
|
|
||
|
rmSync(tempdir, { recursive: true });
|