我正在尝试使用FFmpeg的GUI包装器。我决定围绕二进制文件而不是库来构建我的程序。我想与我的程序并行调用ffmpeg.exe并立即获取控制台输出以解析它并向用户显示进度条或其他内容。
所以我找到了popen
,当它出现时它会向我发送输出,所以我可以用它做我想做的事。但是在Windows上popen
中的路径存在一些问题。
当我尝试ffmpeg.exe -i TEST.mkv TEST.mp4
时(当我从start或chdir进入ffmpeg.exe和我的源文件的文件夹时)它运行良好,我得到了我想要的东西。
但是当我做的时候
bin/ffmpeg.exe -i TEST.mkv TEST.mp4
(可执行文件显然在bin
文件夹中),它找不到命令bin
:
'bin' is not recognized as an internal or external command, operable program or batch file.
它也不适用于路径周围的引号:
"bin/ffmpeg.exe" -i TEST.mkv TEST.mp4
但它确实适用于绝对路径和引号:
"C:/PATH/TO/USER/FFmpeg GUI/bin/ffmpeg.exe" -i jellyfish.mkv jellyfish.mp4
。
但它变得更有趣。
如果我使用相对路径作为源和输出,它可以工作。
"C:/Users/tibtw_000/Raccourci/Code/FFmpeg GUI/bin/ffmpeg.exe" -i videos/jellyfish.mkv videos/jellyfish.mp4
但是,如果我想将绝对路径放到我的源文件或输出文件中,它现在不起作用。
"C:/PATH/TO/USER/FFmpeg GUI/bin/ffmpeg.exe" -i "C:/PATH/TO/USER/FFmpeg GUI/videos/jellyfish.mkv"
现在返回
'C:/PATH/TO/USER/FFmpeg' is not recognized as an internal or external command, operable program or batch file.
现在我开始怀疑我路径中的空间是否有问题。它就是。当我使用
在popen中
C:/PATH/TO/USER/FFmpegGUI/bin/ffmpeg.exe -i C:/PATH/TO/USER/FFmpegGUI/videos/jellyfish.mkv C:/PATH/TO/USER/FFmpegGUI/videos/jellyfish.mp4
一切都很完美。
那我该怎么办?我是否强制用户不将其文件放在带空格的路径中?是否有一个特殊字符可以放在路径中而不是正常空间中,以使popen
理解我想要它做什么?