首页 > 解决方案 > FFmpeg 不适用于名称中包含空格的媒体文件路径

问题描述

我正在使用 react-native-ffmpeg 和 react native 进行基本的视频编辑,但是如果媒体文件 uri 包含空格然后 ffmpeg 任务失败并显示错误消息“没有这样的文件或目录”,我将面临这个问题。

我试过了:

  1. RNFmeg.executeWithArguments 但应用程序崩溃而没有任何错误消息。这是我的命令数组。

    RNFFmpeg.executeWithArguments(["-i", videoPath, "-i", songPath, "-c:v", "copy", "-c:a", "aac", "-map", "0:v :0"、"-map"、"1:a:0"、"-t"、持续时间、${path}${timeStamp}.mp4])

  2. 我不想使用的另一种解决方案是将我从设备本地存储中选择的媒体文件复制到具有新名称的缓存目录,以消除空格。

标签: react-nativeffmpeg

解决方案


工作解决方案

参数显然需要是字符串以保证它们正常工作。正如 Kamran Ashiq 发现的那样,-t参数 ( duration) 必须转换为字符串

替代建议(这个框架不应该是这种情况,但有用的一般解决方案)

最有可能发生的是 ffmpeg 将空格视为更多参数(例如多个文件)的分隔符。

您应该能够引用或转义路径,因此 ffmpeg 将其视为一个参数而不是多个参数。

例如,在命令行上调用它时,要么这样做:

$ ffmpeg -some -parameters "foo bar.mp4"
# or
$ ffmpeg -some -parameters foo\ bar.mp4

在您的代码中类似,您可能应该这样做:

RNFFmpeg.executeWithArguments(["-i", videoPath, "-i", songPath, "-c:v", "copy", "-c:a", "aac", "-map", "0:v:0", "-map", "1:a:0", "-t", duration, `"${path}${timeStamp}.mp4"`])

推荐阅读