mirror of
https://github.com/ad044/lainTSX.git
synced 2024-10-22 23:19:06 +00:00
merge
This commit is contained in:
commit
65d16f7e3f
6 changed files with 488 additions and 1466 deletions
5
.gitignore
vendored
5
.gitignore
vendored
|
@ -23,9 +23,8 @@ yarn-debug.log*
|
||||||
yarn-error.log*
|
yarn-error.log*
|
||||||
|
|
||||||
src/static/media_images
|
src/static/media_images
|
||||||
src/static/audio
|
src/static/media/*
|
||||||
src/static/movie
|
src/static/voice/*
|
||||||
src/static/voice
|
|
||||||
|
|
||||||
scripts/extract/discs
|
scripts/extract/discs
|
||||||
scripts/extract/*.log
|
scripts/extract/*.log
|
||||||
|
|
1749
package-lock.json
generated
1749
package-lock.json
generated
File diff suppressed because it is too large
Load diff
|
@ -51,6 +51,7 @@
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"eslint-loader": "^4.0.2",
|
"eslint-loader": "^4.0.2",
|
||||||
"replace-in-file": "^6.2.0",
|
"replace-in-file": "^6.2.0",
|
||||||
"wav": "^1.0.2"
|
"wav": "^1.0.2",
|
||||||
|
"yargs": "^16.2.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,35 +1,94 @@
|
||||||
import { execSync } from "child_process";
|
import { execSync } from "child_process";
|
||||||
import { tmpdir } from "os";
|
import { tmpdir } from "os";
|
||||||
import { mkdtempSync, rmdirSync } from "fs";
|
import { mkdtempSync, rmSync, mkdirSync } from "fs";
|
||||||
import { join } from "path";
|
import { join } from "path";
|
||||||
import { extract_media } from "./extract_media.mjs";
|
import { extract_video, extract_audio } from "./extract_media.mjs";
|
||||||
import { extract_voice } from "./extract_voice.mjs";
|
import { extract_voice } from "./extract_voice.mjs";
|
||||||
|
import yargs from "yargs";
|
||||||
|
import { hideBin } from "yargs/helpers";
|
||||||
|
|
||||||
const tempdir = mkdtempSync(join(tmpdir(), "extractor-"));
|
const argv = yargs(hideBin(process.argv))
|
||||||
console.log(tempdir);
|
.option("tempdir", {
|
||||||
|
type: "string",
|
||||||
|
description: "Path to a temporary directory",
|
||||||
|
default: mkdtempSync(join(tmpdir(), "extractor-")),
|
||||||
|
})
|
||||||
|
.option("no_index", {
|
||||||
|
type: "boolean",
|
||||||
|
description:
|
||||||
|
"Don't generate an index file for each disc, the index files MUST exist already",
|
||||||
|
})
|
||||||
|
.option("no_video", {
|
||||||
|
type: "boolean",
|
||||||
|
description: "Don't extract video",
|
||||||
|
})
|
||||||
|
.option("no_audio", {
|
||||||
|
type: "boolean",
|
||||||
|
description: "Don't extract audio",
|
||||||
|
})
|
||||||
|
.option("no_voice", {
|
||||||
|
type: "boolean",
|
||||||
|
description: "Don't extract voice.bin",
|
||||||
|
})
|
||||||
|
.option("no_delete", {
|
||||||
|
type: "boolean",
|
||||||
|
description:
|
||||||
|
"Don't delete any temporary files or directories, useful when using --tempdir (WARNING: uses 6+ GB of space)",
|
||||||
|
})
|
||||||
|
.option("no_audio", {
|
||||||
|
type: "boolean",
|
||||||
|
description: "Don't extract audio",
|
||||||
|
}).argv;
|
||||||
|
|
||||||
|
mkdirSync(argv.tempdir, { recursive: true });
|
||||||
|
|
||||||
const jpsxdec_jar = join("jpsxdec", "jpsxdec.jar");
|
const jpsxdec_jar = join("jpsxdec", "jpsxdec.jar");
|
||||||
const disc1_index = join(tempdir, "disc1.idx");
|
const disc1_index = join(argv.tempdir, "disc1.idx");
|
||||||
const disc2_index = join(tempdir, "disc2.idx");
|
const disc2_index = join(argv.tempdir, "disc2.idx");
|
||||||
|
|
||||||
// generate disc indexes
|
// generate disc indexes
|
||||||
execSync(
|
if (!argv.no_index) {
|
||||||
|
execSync(
|
||||||
`java -jar ${jpsxdec_jar} -f ${join(
|
`java -jar ${jpsxdec_jar} -f ${join(
|
||||||
"discs",
|
"discs",
|
||||||
"disc1.bin"
|
"disc1.bin"
|
||||||
)} -x "${disc1_index}"`,
|
)} -x "${disc1_index}"`,
|
||||||
{ stdio: "inherit" }
|
{ stdio: "inherit" }
|
||||||
);
|
);
|
||||||
|
|
||||||
execSync(
|
execSync(
|
||||||
`java -jar ${jpsxdec_jar} -f ${join(
|
`java -jar ${jpsxdec_jar} -f ${join(
|
||||||
"discs",
|
"discs",
|
||||||
"disc2.bin"
|
"disc2.bin"
|
||||||
)} -x "${disc2_index}"`,
|
)} -x "${disc2_index}"`,
|
||||||
{ stdio: "inherit" }
|
{ stdio: "inherit" }
|
||||||
);
|
);
|
||||||
|
}
|
||||||
|
|
||||||
extract_media(tempdir, jpsxdec_jar, disc1_index, disc2_index);
|
if (!argv.no_video) {
|
||||||
extract_voice(tempdir, jpsxdec_jar, disc1_index);
|
extract_video(
|
||||||
|
argv.tempdir,
|
||||||
|
jpsxdec_jar,
|
||||||
|
disc1_index,
|
||||||
|
disc2_index,
|
||||||
|
argv.no_delete
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
rmdirSync(tempdir, { recursive: true });
|
if (!argv.no_audio) {
|
||||||
|
extract_audio(
|
||||||
|
argv.tempdir,
|
||||||
|
jpsxdec_jar,
|
||||||
|
disc1_index,
|
||||||
|
disc2_index,
|
||||||
|
argv.no_delete
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!argv.no_voice) {
|
||||||
|
extract_voice(argv.tempdir, jpsxdec_jar, disc1_index);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!argv.no_delete) {
|
||||||
|
rmSync(argv.tempdir, { recursive: true });
|
||||||
|
}
|
||||||
|
|
|
@ -1,29 +1,25 @@
|
||||||
import { execSync, exec } from "child_process";
|
import { execSync, exec } from "child_process";
|
||||||
import { existsSync, mkdirSync, readdirSync, rmdirSync } from "fs";
|
import { mkdirSync, readdirSync, rmdirSync } from "fs";
|
||||||
import { join } from "path";
|
import { join } from "path";
|
||||||
|
|
||||||
export function extract_media(tempdir, jpsxdec_jar, disc1_index, disc2_index) {
|
export function extract_video(
|
||||||
// extract all video and audio
|
tempdir,
|
||||||
|
jpsxdec_jar,
|
||||||
|
disc1_index,
|
||||||
|
disc2_index,
|
||||||
|
no_delete
|
||||||
|
) {
|
||||||
|
// extract all video
|
||||||
execSync(
|
execSync(
|
||||||
`java -jar ${jpsxdec_jar} -x "${disc1_index}" -a video -dir "${tempdir}" -quality high -vf avi:rgb -up Lanczos3`,
|
`java -jar ${jpsxdec_jar} -x "${disc1_index}" -a video -dir "${tempdir}" -quality high -vf avi:rgb -up Lanczos3`,
|
||||||
{ stdio: "inherit" }
|
{ stdio: "inherit" }
|
||||||
);
|
);
|
||||||
|
|
||||||
execSync(
|
|
||||||
`java -jar ${jpsxdec_jar} -x "${disc1_index}" -a audio -dir "${tempdir}"`,
|
|
||||||
{ stdio: "inherit" }
|
|
||||||
);
|
|
||||||
|
|
||||||
execSync(
|
execSync(
|
||||||
`java -jar ${jpsxdec_jar} -x "${disc2_index}" -a video -dir "${tempdir}" -quality high -vf avi:rgb -up Lanczos3`,
|
`java -jar ${jpsxdec_jar} -x "${disc2_index}" -a video -dir "${tempdir}" -quality high -vf avi:rgb -up Lanczos3`,
|
||||||
{ stdio: "inherit" }
|
{ stdio: "inherit" }
|
||||||
);
|
);
|
||||||
|
|
||||||
execSync(
|
|
||||||
`java -jar ${jpsxdec_jar} -x "${disc2_index}" -a audio -dir "${tempdir}"`,
|
|
||||||
{ stdio: "inherit" }
|
|
||||||
);
|
|
||||||
|
|
||||||
const output_movie_folder = join(
|
const output_movie_folder = join(
|
||||||
"..",
|
"..",
|
||||||
"..",
|
"..",
|
||||||
|
@ -32,23 +28,9 @@ export function extract_media(tempdir, jpsxdec_jar, disc1_index, disc2_index) {
|
||||||
"media",
|
"media",
|
||||||
"movie"
|
"movie"
|
||||||
);
|
);
|
||||||
const output_audio_folder = join(
|
|
||||||
"..",
|
|
||||||
"..",
|
|
||||||
"src",
|
|
||||||
"static",
|
|
||||||
"media",
|
|
||||||
"audio"
|
|
||||||
);
|
|
||||||
|
|
||||||
// create destination folders
|
// create destination folder
|
||||||
if (!existsSync(output_movie_folder)) {
|
mkdirSync(output_movie_folder, { recursive: true });
|
||||||
mkdirSync(output_movie_folder);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!existsSync(output_audio_folder)) {
|
|
||||||
mkdirSync(output_audio_folder);
|
|
||||||
}
|
|
||||||
|
|
||||||
// convert all movies to mp4
|
// convert all movies to mp4
|
||||||
for (const movieDir of ["MOVIE", "MOVIE2"]) {
|
for (const movieDir of ["MOVIE", "MOVIE2"]) {
|
||||||
|
@ -67,6 +49,43 @@ export function extract_media(tempdir, jpsxdec_jar, disc1_index, disc2_index) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!no_delete) {
|
||||||
|
// cleanup source folders
|
||||||
|
rmdirSync(join(tempdir, "MOVIE"));
|
||||||
|
rmdirSync(join(tempdir, "MOVIE2"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export function extract_audio(
|
||||||
|
tempdir,
|
||||||
|
jpsxdec_jar,
|
||||||
|
disc1_index,
|
||||||
|
disc2_index,
|
||||||
|
no_delete
|
||||||
|
) {
|
||||||
|
// extract all audio
|
||||||
|
execSync(
|
||||||
|
`java -jar ${jpsxdec_jar} -x "${disc1_index}" -a audio -dir "${tempdir}"`,
|
||||||
|
{ stdio: "inherit" }
|
||||||
|
);
|
||||||
|
|
||||||
|
execSync(
|
||||||
|
`java -jar ${jpsxdec_jar} -x "${disc2_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
|
// convert all audio to mp4
|
||||||
for (let file of readdirSync(`${join(tempdir, "XA")}`)) {
|
for (let file of readdirSync(`${join(tempdir, "XA")}`)) {
|
||||||
exec(
|
exec(
|
||||||
|
@ -77,8 +96,8 @@ export function extract_media(tempdir, jpsxdec_jar, disc1_index, disc2_index) {
|
||||||
).stderr.on("data", (data) => console.log(data));
|
).stderr.on("data", (data) => console.log(data));
|
||||||
}
|
}
|
||||||
|
|
||||||
// cleanup source folders
|
if (!no_delete) {
|
||||||
rmdirSync(join(tempdir, "MOVIE"), { recursive: true });
|
// cleanup source folder
|
||||||
rmdirSync(join(tempdir, "MOVIE2"), { recursive: true });
|
rmdirSync(join(tempdir, "XA"));
|
||||||
rmdirSync(join(tempdir, "XA"), { recursive: true });
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
import { FileWriter } from "wav";
|
import { FileWriter } from "wav";
|
||||||
import { execSync } from "child_process";
|
import { execSync } from "child_process";
|
||||||
import { readFileSync, existsSync, mkdirSync, writeFileSync } from "fs";
|
import { readFileSync, mkdirSync, writeFileSync } from "fs";
|
||||||
import { join } from "path";
|
import { join } from "path";
|
||||||
|
|
||||||
export function extract_voice(tempdir, jpsxdec_jar, disc1_index) {
|
export function extract_voice(tempdir, jpsxdec_jar, disc1_index) {
|
||||||
|
@ -12,9 +12,8 @@ export function extract_voice(tempdir, jpsxdec_jar, disc1_index) {
|
||||||
|
|
||||||
let voice_data = readFileSync(join(tempdir, "VOICE.BIN"));
|
let voice_data = readFileSync(join(tempdir, "VOICE.BIN"));
|
||||||
let output_folder = join("..", "..", "src", "static", "voice");
|
let output_folder = join("..", "..", "src", "static", "voice");
|
||||||
if (!existsSync(output_folder)) {
|
|
||||||
mkdirSync(output_folder);
|
mkdirSync(output_folder, { recursive: true });
|
||||||
}
|
|
||||||
|
|
||||||
for (let voice_file of voice_files) {
|
for (let voice_file of voice_files) {
|
||||||
let path = join(output_folder, voice_file.translated_name);
|
let path = join(output_folder, voice_file.translated_name);
|
||||||
|
|
Loading…
Reference in a new issue