mirror of
https://github.com/ad044/lainTSX.git
synced 2024-10-22 23:19:06 +00:00
add arguments to extraction script, split audio and video extraction
This commit is contained in:
parent
0c51877652
commit
42c24178e5
6 changed files with 314 additions and 21160 deletions
5
.gitignore
vendored
5
.gitignore
vendored
|
@ -23,9 +23,8 @@ yarn-debug.log*
|
|||
yarn-error.log*
|
||||
|
||||
src/static/media_images
|
||||
src/static/audio
|
||||
src/static/movie
|
||||
src/static/voice
|
||||
src/static/media/*
|
||||
src/static/voice/*
|
||||
|
||||
scripts/extract/discs
|
||||
scripts/extract/*.log
|
||||
|
|
21269
package-lock.json
generated
21269
package-lock.json
generated
File diff suppressed because it is too large
Load diff
|
@ -47,6 +47,7 @@
|
|||
"homepage": ".",
|
||||
"devDependencies": {
|
||||
"eslint-loader": "^4.0.2",
|
||||
"wav": "^1.0.2"
|
||||
"wav": "^1.0.2",
|
||||
"yargs": "^16.2.0"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,35 +1,94 @@
|
|||
import { execSync } from "child_process";
|
||||
import { tmpdir } from "os";
|
||||
import { mkdtempSync, rmdirSync } from "fs";
|
||||
import { mkdtempSync, rmSync, mkdirSync } from "fs";
|
||||
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 yargs from "yargs";
|
||||
import { hideBin } from "yargs/helpers";
|
||||
|
||||
const tempdir = mkdtempSync(join(tmpdir(), "extractor-"));
|
||||
console.log(tempdir);
|
||||
const argv = yargs(hideBin(process.argv))
|
||||
.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 disc1_index = join(tempdir, "disc1.idx");
|
||||
const disc2_index = join(tempdir, "disc2.idx");
|
||||
const disc1_index = join(argv.tempdir, "disc1.idx");
|
||||
const disc2_index = join(argv.tempdir, "disc2.idx");
|
||||
|
||||
// generate disc indexes
|
||||
execSync(
|
||||
`java -jar ${jpsxdec_jar} -f ${join(
|
||||
"discs",
|
||||
"disc1.bin"
|
||||
)} -x "${disc1_index}"`,
|
||||
{ stdio: "inherit" }
|
||||
);
|
||||
if (!argv.no_index) {
|
||||
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" }
|
||||
);
|
||||
execSync(
|
||||
`java -jar ${jpsxdec_jar} -f ${join(
|
||||
"discs",
|
||||
"disc2.bin"
|
||||
)} -x "${disc2_index}"`,
|
||||
{ stdio: "inherit" }
|
||||
);
|
||||
}
|
||||
|
||||
extract_media(tempdir, jpsxdec_jar, disc1_index, disc2_index);
|
||||
extract_voice(tempdir, jpsxdec_jar, disc1_index);
|
||||
if (!argv.no_video) {
|
||||
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 { existsSync, mkdirSync, readdirSync, rmdirSync } from "fs";
|
||||
import { mkdirSync, readdirSync, rmdirSync } from "fs";
|
||||
import { join } from "path";
|
||||
|
||||
export function extract_media(tempdir, jpsxdec_jar, disc1_index, disc2_index) {
|
||||
// extract all video and audio
|
||||
export function extract_video(
|
||||
tempdir,
|
||||
jpsxdec_jar,
|
||||
disc1_index,
|
||||
disc2_index,
|
||||
no_delete
|
||||
) {
|
||||
// extract all video
|
||||
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(
|
||||
"..",
|
||||
"..",
|
||||
|
@ -32,23 +28,9 @@ export function extract_media(tempdir, jpsxdec_jar, disc1_index, disc2_index) {
|
|||
"media",
|
||||
"movie"
|
||||
);
|
||||
const output_audio_folder = join(
|
||||
"..",
|
||||
"..",
|
||||
"src",
|
||||
"static",
|
||||
"media",
|
||||
"audio"
|
||||
);
|
||||
|
||||
// create destination folders
|
||||
if (!existsSync(output_movie_folder)) {
|
||||
mkdirSync(output_movie_folder);
|
||||
}
|
||||
|
||||
if (!existsSync(output_audio_folder)) {
|
||||
mkdirSync(output_audio_folder);
|
||||
}
|
||||
// create destination folder
|
||||
mkdirSync(output_movie_folder, { recursive: true });
|
||||
|
||||
// convert all movies to mp4
|
||||
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
|
||||
for (let file of readdirSync(`${join(tempdir, "XA")}`)) {
|
||||
exec(
|
||||
|
@ -77,8 +96,8 @@ export function extract_media(tempdir, jpsxdec_jar, disc1_index, disc2_index) {
|
|||
).stderr.on("data", (data) => console.log(data));
|
||||
}
|
||||
|
||||
// cleanup source folders
|
||||
rmdirSync(join(tempdir, "MOVIE"), { recursive: true });
|
||||
rmdirSync(join(tempdir, "MOVIE2"), { recursive: true });
|
||||
rmdirSync(join(tempdir, "XA"), { recursive: true });
|
||||
if (!no_delete) {
|
||||
// cleanup source folder
|
||||
rmdirSync(join(tempdir, "XA"));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
import { FileWriter } from "wav";
|
||||
import { execSync } from "child_process";
|
||||
import { readFileSync, existsSync, mkdirSync, writeFileSync } from "fs";
|
||||
import { readFileSync, mkdirSync, writeFileSync } from "fs";
|
||||
import { join } from "path";
|
||||
|
||||
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 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) {
|
||||
let path = join(output_folder, voice_file.translated_name);
|
||||
|
|
Loading…
Reference in a new issue