mirror of
https://github.com/ad044/lainTSX.git
synced 2024-10-22 15:09:05 +00:00
move media extraction to it's own module, add voice extraction module
This commit is contained in:
parent
a593447547
commit
48df8be5a9
5 changed files with 3304 additions and 64 deletions
4
.gitignore
vendored
4
.gitignore
vendored
|
@ -11,7 +11,7 @@
|
|||
# production
|
||||
/build
|
||||
|
||||
# misc
|
||||
# progressbar
|
||||
.DS_Store
|
||||
.env.local
|
||||
.env.development.local
|
||||
|
@ -23,9 +23,9 @@ yarn-debug.log*
|
|||
yarn-error.log*
|
||||
|
||||
src/static/media_images
|
||||
src/static/sprite
|
||||
src/static/audio
|
||||
src/static/movie
|
||||
src/static/voice
|
||||
|
||||
scripts/extract/discs
|
||||
scripts/extract/*.log
|
||||
|
|
|
@ -1,7 +1,9 @@
|
|||
import { execSync, exec } from "child_process";
|
||||
import { execSync } from "child_process";
|
||||
import { tmpdir } from "os";
|
||||
import { mkdtempSync, existsSync, mkdirSync, readdirSync, rmSync } from "fs";
|
||||
import { mkdtempSync, rmSync } from "fs";
|
||||
import { join } from "path";
|
||||
import { extract_media } from "./extract_media.mjs";
|
||||
import {extract_voice} from "./extract_voice.mjs";
|
||||
|
||||
const tempdir = mkdtempSync(join(tmpdir(), "extractor-"));
|
||||
console.log(tempdir);
|
||||
|
@ -27,65 +29,7 @@ execSync(
|
|||
{ 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));
|
||||
}
|
||||
extract_media(tempdir, jpsxdec_jar, disc1_index, disc2_index);
|
||||
extract_voice(tempdir, jpsxdec_jar, disc1_index);
|
||||
|
||||
rmSync(tempdir, { recursive: true });
|
||||
|
|
75
scripts/extract/extract_media.mjs
Normal file
75
scripts/extract/extract_media.mjs
Normal file
|
@ -0,0 +1,75 @@
|
|||
import { execSync, exec } from "child_process";
|
||||
import { existsSync, mkdirSync, readdirSync, rmSync } from "fs";
|
||||
import { join } from "path";
|
||||
|
||||
export function extract_media(tempdir, jpsxdec_jar, disc1_index, disc2_index) {
|
||||
// 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");
|
||||
|
||||
// create destination folders
|
||||
|
||||
if (!existsSync(output_movie_folder)) {
|
||||
mkdirSync(output_movie_folder);
|
||||
}
|
||||
|
||||
if (!existsSync(output_audio_folder)) {
|
||||
mkdirSync(output_audio_folder);
|
||||
}
|
||||
|
||||
// convert all movies to webm
|
||||
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));
|
||||
}
|
||||
|
||||
// convert all audio to ogg
|
||||
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));
|
||||
}
|
||||
|
||||
// cleanup source folders
|
||||
rmSync(join(tempdir, 'MOVIE'), {recursive: true});
|
||||
rmSync(join(tempdir, 'MOVIE2'), {recursive: true});
|
||||
rmSync(join(tempdir, 'XA'), {recursive: true});
|
||||
}
|
25
scripts/extract/extract_voice.mjs
Normal file
25
scripts/extract/extract_voice.mjs
Normal file
|
@ -0,0 +1,25 @@
|
|||
import { FileWriter } from "wav";
|
||||
import { execSync } from "child_process";
|
||||
import { readFileSync, existsSync, mkdirSync } from "fs";
|
||||
import { join } from "path";
|
||||
|
||||
export function extract_voice(tempdir, jpsxdec_jar, disc1_index) {
|
||||
execSync(
|
||||
`java -jar ${jpsxdec_jar} -x "${disc1_index}" -i VOICE.BIN -dir "${tempdir}"`,
|
||||
{ stdio: "inherit" }
|
||||
);
|
||||
const voice_files = JSON.parse(readFileSync('voice.json'))
|
||||
|
||||
let voice_data = readFileSync(join(tempdir, "VOICE.BIN"));
|
||||
let output_folder = join("..", "..", "src", "static", "voice");
|
||||
if(!existsSync(output_folder)) {
|
||||
mkdirSync(output_folder);
|
||||
}
|
||||
|
||||
for (let voice_file of voice_files) {
|
||||
let path = join(output_folder, voice_file.translated_name);
|
||||
let wav_file = new FileWriter(path, {sampleRate: 22050, channels:1, bitDepth: 16});
|
||||
wav_file.write(voice_data.slice(voice_file.offset, voice_file.offset + voice_file.size));
|
||||
wav_file.end();
|
||||
}
|
||||
}
|
3196
scripts/extract/voice.json
Normal file
3196
scripts/extract/voice.json
Normal file
File diff suppressed because it is too large
Load diff
Loading…
Reference in a new issue