The problem is not in the Delphi code. Quite possibly your ffmpeg
executable uses GetCommandLineA
rather than GetCommandLineW
to read the command line and the conversion from UTF-16 to ANSI fails.
There are various options but I rather suspect that the easiest will be to specify the working directory for the new process to the directory containing the file. That way ffmpeg
does not need to see the troublesome characters – ShellExecuteW
deals with them:
ShellExecute(
0,
nil,
'ffmpeg.exe',
'MORE_COMMANDS_HERE -f flv test.flv',
'E:\ół test',
SW_HIDE
);
That said, I would suggest that CreateProcess
is a better way to start an external process. You get more control that way. You can more cleanly make sure that the console window is not shown.