输入路径中的Android ffmpeg空白导致“没有此类文件或目录”

时间:2018-07-28 17:09:46

标签: android ffmpeg

我正在使用WritingMinds/ffmpeg-android-java库的最新版本。

我已经尝试过单引号/双引号,但是没有成功。

我在执行后记录了命令, 请查看子目录包含whiteSpace的输入路径,空格之间已添加逗号:

ffmpeg, -i, "storage/emulated/0/Telegram/Telegram, Video/4_5828137322067002802.mp4", -vf...

我这样分割并运行命令:

String crop = "-ss " + skipTimeForCrop + " -noautorotate -i " + newPath + " -vframes 10 -vf cropdetect=24:16:0 -f null -";
String[] cropCommand = crop.trim().split(" ");
execFFmpegForCrop(cropCommand);
  

存储/仿真/ 0 /电报/电报:没有此类文件或目录

对此有任何想法吗?

4 个答案:

答案 0 :(得分:1)

我相信将命令添加为List并将其转换为数组将解决此问题,

这样,逗号仅应添加到每个命令的末尾。我将向您展示如何:

List<String> commandList = new LinkedList<>();
commandList.add("-ss");
commandList.add("00:00:00");
commandList.add("-noautorotate");
commandList.add("-i");
commandList.add("storage/emulated/0/Telegram/Telegram Video/4_5828137322067002802.mp4");
commandList.add("-vframes");
commandList.add("10");
commandList.add("-vf");
commandList.add("-cropdetect=24:16:0");
.
.
.

 String[] cropCommand  = commandList.toArray(new String[commandList.size()]);
 execFFmpegForCrop(cropCommand);

这将是输出:

"[-ss, 00:00:00, -noautorotate, -i, storage/emulated/0/Telegram/Telegram Video/4_5828137322067002802.mp4, -vframes, 10, -vf, -cropdetect=24:16:0, ...]";

答案 1 :(得分:1)

因为您使用命令String[] cropCommand = crop.trim().split(" "); 这将剪切包含空格“”的文件名,并且输入文件将失败

答案 2 :(得分:0)

尝试在空格前使用双反斜杠: "storage/emulated/0/Telegram/Telegram,\\ Video/4_5828137322067002802.mp4"

答案 3 :(得分:0)

首先用一些令人毛骨悚然的字符串替换文件路径的空白,然后在运行ffmpeg.execute()时用空格替换该令人毛骨悚然的字符串。

喜欢:

String input_path = txt_selected_file.getText().toString().replace(" ","%20");

String cmd = "-i "+ input_path+" -vn -ab 320 -preset ultrafast /storage/emulated/0/Movies/Messenger/test.mp3";
                executeCmd(cmd);

in executecmd() method

private void executeCmd(final String command) {

        try {
            String[] cmd = command.split(" ");
            for(int i = 0; i<cmd.length;i++){
                cmd[i] = cmd[i].replace("%20"," ");
            }

}