A command line program playing with the cutscenes files (USM) from Genshin Impact.
Able to extract the USM files, decrypt the tracks and convert them into readable formats, then merge them into a single MKV file. The final MKV file can then be played like a small movie, with the subtitles correctly formatted like in the game. Sometimes, subtitles can be desynchronized with the audio, but that's also the case in game (and not this program's fault).
Also includes CBT3, which has the same files than the live version
If you want to extract newer cutscenes but the versions.json
in the released zip is outdated, simply download the updated file in the project tree (here) and replace the file.
This file will be updated with the version key every time a new version drops.
Feel free to make a pull request if you have some keys unavailable in the versions file, any help is welcome on that part.
I made a python tool a year ago (as a proof of concept) in order to be able to rewatch any cutscenes from the game. As a first C# program, I thought it would be a good idea to rewrite it. I haven't invented the code for HCA conversion and USM demuxing, I just readapted it in C# from other projects.
- Extract video and audio (and video decryption)
- Audio (hca) decryption
- HCA conversion to WAV (a more commonly readable format)
- Subtitles support from the gamedata, reformatted from
.srt
to.ass
and font included in the default style (repositories available in Issues) - MKV merging with video, audio, subtitles and fonts without any additional software (but also supports the use of mkvmerge and FFMPEG)
- Multithreaded audio decoding
This program uses the .NET framework version 7.0, so you will need the .NET SDK.
You can open this project in Visual Studio 2022 and build the solution, or use the dotnet CLI : dotnet publish -c Release -r [platform]
.
Otherwise, you can also modify the script build-all.sh
with the desired runtimes.
You can follow the next steps to use this program :
Grab the latest release for your platform from the release page, download the ZIP file and extract it. For each platform (Windows, Linux, MacOS), two binaries are available:
- a standalone build (self-contained executable) which can be run without dotnet installed
- a framework dependant build (if you already have dotnet installed on your machine), much lighter but requires the dotnet runtime
You can also get a GUI version in this repository (thanks to SuperZombi)
Starting from version 0.4.0, an merging solution was integrated without relying on external programs. However, if you wish to use other merging solutions than the one integrated, you can install MKVToolNix (which provides mkvmerge) or FFMPEG.
appsettings.json
contains a configuration sample with the following keys :
- "MkvMergePath" : The path where mkvmerge is installed. Leave it empty if you installed mkvtoolnix (the package/program providing mkvmerge) in the default path. However, change it to the path of the mkvmerge file in case you're using a different installation path or you're using the portable MKVToolNix version.
- "FfmpegPath" : The path to the ffmpeg binary. Leave it empty if the binary is in the PATH of your operating system.
- "SubsFolder" : The path of the folder containing the subtitles of the video divided into language folders. Default is "./GenshinData/Subtitle", the right folder if you copy this repository in the same folder than the tool. You can follow the next section to clone the repository with the right path.
- "SubsStyle" : The style of the subtitles, according to the SubStation Alpha file format. If you need to modify the size, color or position, you can modify the parameters of it.
Execute the following lines in the directory where the tool is :
git clone --depth 1 --filter=blob:none --sparse [repository URL]
cd GenshinData
git sparse-checkout set Subtitle
If you don't have git installed, you can download the zip file of the repository and unzip it in the program folder.
No font file is provided in this repository, so you will have to get them in the game files.
You should find them in [Game Directory]\Genshin Impact game\GenshinImpact_Data\StreamingAssets\MiHoYoSDKRes\HttpServerResources\font
.
You can then copy these two TTF files without renaming them in the tool's directory.
There are 3 different commands available to be used on the files :
demuxUsm
to demux a specific USM file, extracting audio and video and convert extracted HCA files into WAVbatchDemux
to demux all USM files into a specific folderconvertHca
to convert a HCA file into WAV
Several options are available for most of the commands :
--output
allows to choose the output folder--merge
adds a merging step, putting the video, the audio (and the subtitles if the--subs
option is also there) into a single MKV file. Subtitles will be automatically converted to the SSA format and stored in theSubs
folder in the output directory if the--no-cleanup
option is entered.--no-cleanup
disables the suppression of the extracted files after merging--mkv-engine
specifies the merging program used (eitherinternal
,mkvmerge
orffmpeg
, using the internal method by default)--audio-format
and--video-format
can be used to select codecs. If at least one option is chosen, the merging engine is changed to FFMPEG.
Maintenance commands and options:
update
retrieves the latestversions.json
file from the repository and checks if a new version has to be downloaded. It can take several optional parameters as follows :--no-browser
to not automatically open the browser if a new version is available--proxy <uri>
to specify a web proxy for the requests
reset
resets the configuration file (appsettings.json
) to its default state--stack-trace
enable the stack trace print of errors in the terminal
GICutscenes -h
displays the help menuGICutscenes batchDemux "[Game directory]\Genshin Impact game\GenshinImpact_Data\StreamingAssets\VideoAssets\StandaloneWindows64" --output "./output" --merge --subs --no-cleanup
will extract every USM file into theoutput
directory, merge them with subtitles in a MKV file and will not cleanup the extracted filesGICutscenes batchDemux cutscenes/ -o ./output -m -s -e ffmpeg
will extract every USM file into the output directory, merging the files (-m
) and the subs (-s
) using FFMPEG (-e
).GICutscenes demuxUsm hello.usm -b 00112233 -a 44556677
decrypts the filehello.usm
withkey1=00112233
andkey2=44556677
and extracts the tracks.GICutscenes convertHca hello_0.hca
decodes the file and converts it into a WAV file
The video is extracted as an IVF file (which makes codec detection (VP9) easier for mkvmerge). In order to watch it, you can open it into VLC or change the extension to .m2v
.