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.