Closed shinra-electric closed 8 months ago
I edited my original post to add successful and broken logs.
You can see that the issues start at line 1707.
In the working one is trying to get data from a mylist.txt
file:
Input #0, concat, from '/Users/user/Library/Stratagus/data.War1gus/videos/mylist.txt':
But in the broken one it can't find this file because it is not parsing the escaping \
in the Application Support folder correctly:
/Users/user/Library/Application: No such file or directory
I went through the files and only the following files will fail to convert:
cave.ogv
hintro.ogv
ointro.ogv
title.ogv
Edit: Going by this, I think the issue is somewhere in the MuxAllIntroVideos() function
Just retested and this issue is still there.
I'm pretty sure the solution is just to enclose the appropriate var in quotation marks (which will allow using paths with spaces in them), but I can't find which is the correct variable...
@Jarod42 If you'd be able to point me in the right direction, I'll make a PR to try and fix this. It should be an easy fix, but I can't find where the appropriate path variable is...
I found "Application\ Support" in stratagus repo in
stratagus\gameheaders\stratagus-game-launcher.h
stratagus\src\stratagus\parameters.cpp
I think it should simply be "Application Support"...
You probably should have warning for "\ "
as space is not a valid escape sequence...
So not the fix we are looking for.
You can see that the issues start at line 1707.
It is even more likely the source:
in war1gus repo: war1gus\war1tool.cpp:1832
const char* cmd1v = "ffmpeg -y -f concat -safe 0 -i %s "
should probably be
const char* cmd1v = "ffmpeg -y -f concat -safe 0 -i \"%s\" "
and all other cmd
in fact
const char* cmd1a = "ffmpeg -y -f concat -safe 0 -i \"%s\" "
Hmm, I edited the \"%s\"
in the six cmd
but it didn't affect anything...
I found "Application\ Support" in stratagus repo in stratagus\gameheaders\stratagus-game-launcher.h stratagus\src\stratagus\parameters.cpp I think it should simply be "Application Support"... You probably should have warning for
"\ "
as space is not a valid escape sequence... So not the fix we are looking for.
I don't think this is the issue, because War1gus/Wargus/Stargus can all find the Application Support folder. I'll try removing the \
on the off-chance it helps with something...
Edit: Removing the \
didn't make any noticeable difference. War1gus could still find the app support folder, video muxing still failed.
You still have "/Users/user/Library/Application: No such file or directory"? How did you run war1tool?
You still have "/Users/user/Library/Application: No such file or directory"? How did you run war1tool?
I get:
[AVFormatContext @ 0x151606650] Unable to choose an output format for '/Users/user/Library/Application'; use a standard extension for the filename or specify the format manually.
[out#0 @ 0x6000028f09c0] Error initializing the muxer for /Users/user/Library/Application: Invalid argument
Error opening output file /Users/user/Library/Application.
Error opening output files: Invalid argument
I'm running war1tool not through the command line, just by opening the app. It says no data found on launch (correct, I'm deleting the data each time) and asks me to find an installer.
The GoG installer exe is not recognised, but I use innoextract on it and then point war1tool to DATA.WAR
.
Almost all of the war1tool steps are working, it just seems to be the muxing that is not. If you look at previous ffmpeg actions, they all correctly identify the App Support folder. I should probably also mention that wartool works correctly as well.
Here is an updated terminal output: war1tool output.txt
Edit: Errors start at line 1710
output parameters also need quoting: 1833:
const char* cmd1v = "ffmpeg -y -f concat -safe 0 -i \"%s\" "
"-codec:v huffyuv \"%s/%s/hintro_v.avi\"";
I'm getting there, but the final .ogv is not getting saved.
Here is the latest output:
So you can see that the first steps are successful, but the last step fails.
These are the adjustments I made (just for hintro
:
// Castle sequence
// const char* cmd1v = "ffmpeg -y -i %s/%s/hintro1.avi -i %s/%s/hintro2.avi "
// "-filter_complex '[0:0][1:0]concat=n=2:v=1:a=0[out]' "
// "-map '[out]' -codec:v huffyuv %s/%s/hintro_v.avi";
mylist = fopen(listfile, "w");
#ifdef WIN32
fprintf(mylist, "file '%s'\n", "hintro1.avi");
fprintf(mylist, "file '%s'\n", "hintro2.avi");
#else
fprintf(mylist, "file '%s/%s/%s'\n", Dir, VIDEO_PATH, "hintro1.avi");
fprintf(mylist, "file '%s/%s/%s'\n", Dir, VIDEO_PATH, "hintro2.avi");
#endif
fclose(mylist);
const char* cmd1v = "ffmpeg -y -f concat -safe 0 -i \"%s\" "
"-codec:v huffyuv \"%s/%s/hintro_v.avi\"";
snprintf(cmd, STATIC_CMD_SIZE - 1, cmd1v, listfile, Dir, VIDEO_PATH);
system(cmd);
// const char* cmd1a = "ffmpeg -y -f concat -safe 0 -i -i %s/%s/intro_1.wav -i %s/%s/intro_2.wav "
// "-filter_complex '[0:0][1:0]concat=n=2:v=0:a=1[out]' "
// "-map '[out]' %s/%s/hintro_a.wav";
mylist = fopen(listfileSound, "w");
#ifdef WIN32
fprintf(mylist, "file '%s'\n", "intro_1.wav");
fprintf(mylist, "file '%s'\n", "intro_2.wav");
#else
fprintf(mylist, "file '%s/%s/%s'\n", Dir, SOUND_PATH, "intro_1.wav");
fprintf(mylist, "file '%s/%s/%s'\n", Dir, SOUND_PATH, "intro_2.wav");
#endif
fclose(mylist);
const char* cmd1a = "ffmpeg -y -f concat -safe 0 -i \"%s\" "
" \"%s/%s/hintro_a.wav\"";
snprintf(cmd, STATIC_CMD_SIZE - 1, cmd1a, listfileSound, Dir, SOUND_PATH);
system(cmd);
const char* cmd1 = "ffmpeg -y -i \"%s/%s/hintro_v.avi\" -i \"%s/%s/hintro_a.wav\" "
"-codec:v libtheora -qscale:v 31 -pix_fmt yuv420p -vb 4000k -codec:a libvorbis -qscale:a 15 \"%s/%s/hintro.ogv\"";
snprintf(cmd, STATIC_CMD_SIZE - 1, cmd1, Dir, VIDEO_PATH, Dir, SOUND_PATH, Dir, VIDEO_PATH);
system(cmd);
So the last place where there is an issue should be :
const char* cmd1 = "ffmpeg -y -i \"%s/%s/hintro_v.avi\" -i \"%s/%s/hintro_a.wav\" "
"-codec:v libtheora -qscale:v 31 -pix_fmt yuv420p -vb 4000k -codec:a libvorbis -qscale:a 15 \"%s/%s/hintro.ogv\"";
snprintf(cmd, STATIC_CMD_SIZE - 1, cmd1, Dir, VIDEO_PATH, Dir, SOUND_PATH, Dir, VIDEO_PATH);
system(cmd);
But I can't see an issue in there...
I suggest to create a (Draft) PR with your changes. Might be simpler to follow the changes, and spot missing ones.
From what I see from log, there are still some missing quotes...
https://github.com/shinra-electric/war1gus/tree/war1tool-path
Your help is appreciated 😅
Fixed by #450
A recent PR in Stratagus moves the data & config files to
~/Library/Application\ Support/
folder. This fixes launching Wargus and War1gus from the app bundle directly. (No need to launch from terminal anymore).However, when using the extraction tool for War1gus, ffmpeg does not save some video conversions.
The error message is:
/Users/user/Library/Application: No such file or directory
It looks like it is not recognising the escaping slash in the directory name.
Here are two logs: War1gus broken.txt war1gus working.txt
Edit: I should mention that it is just SOME videos that are affected. The rest of the data is extracted correctly.