【问题标题】:FFmpeg is not working with the media file path containing whitespace in nameFFmpeg 不适用于名称中包含空格的媒体文件路径
【发布时间】:2021-06-23 17:11:16
【问题描述】:

我正在使用 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-native ffmpeg


    【解决方案1】:

    工作解决方案

    参数显然需要是字符串以保证它们正常工作。正如 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"`])
    

    【讨论】:

    • 试过还是没有运气。 React native package for ffmpeg handle uri 与命令数组中的空格而不仅仅是一个单引号字符串,我已经能够在包含空格的 uri 上成功运行一个简单的命令。我认为问题在于我发布的命令参数。
    • 那么三个建议,尝试去掉文件以外的所有参数,看看是否有效,如果是,则一一添加参数。两个看看你是否可以让它记录执行的确切命令,看看问题是否明显。最后,如果您使用相对路径,请尝试使用绝对路径,以防万一:)
    • 是的,问题出在 -t 持续时间参数上,因为在将其转换为字符串后它是一个整数。
    • @VivekThummar 从 Kamran Ashiq 的发现来看,我怀疑你做不到。不知道你为什么想要这样,保持它像数组一样具有巨大的优势,即框架可以以一致且可预测的方式为你处理转义
    • @VivekThummar 你不能,目的是在命令数组中单独写入密钥对(参数)。
    猜你喜欢
    • 2014-05-11
    • 1970-01-01
    • 2012-12-26
    • 1970-01-01
    • 2013-04-07
    • 1970-01-01
    • 1970-01-01
    • 2011-12-22
    相关资源
    最近更新 更多