gpt4 book ai didi

java - 初始化复杂过滤器时出错。从 Kotlin 运行 ffmpeg 时出现无效参数错误

转载 作者:行者123 更新时间:2023-12-01 14:21:19 25 4
gpt4 key购买 nike

我正在为 ffmpeg 创建一个包装器,它具有以下方法:

fun executeCommand(args: Array<String>): AppRunner.AppResult {
return appRunner.run(ffmpegPath, args)
}


class AppRunner {

fun run(
app: String,
args: Array<String>,
timeoutAmount: Long = 60000,
timeoutUnit: TimeUnit = TimeUnit.SECONDS
): AppResult {
val command = mutableListOf(app)
command.addAll(args)

val processResult = ProcessBuilder(command)
.redirectOutput(ProcessBuilder.Redirect.PIPE)
.redirectError(ProcessBuilder.Redirect.PIPE)
.start()
.apply {
waitFor(timeoutAmount, timeoutUnit)
}

val exitCode = processResult.exitValue()
val stdOut = processResult.inputStream.bufferedReader().readText()
val stdErr = processResult.errorStream.bufferedReader().readText()

return AppResult(exitCode, stdOut, stdErr)
}

}

和:
fun concatenateAudioFiles(files: Collection<File>, outFile: File) {
val args = mutableListOf<String>()

files.forEach { file ->
args.add("-i")
args.add(file.absolutePath)
}

// Create filter
val filterStringBuilder = StringBuilder()
filterStringBuilder.append("'")
files.forEachIndexed { index, _ ->
filterStringBuilder.append("[$index:0]")
}
filterStringBuilder.append("concat=n=")
filterStringBuilder.append(files.size)
filterStringBuilder.append(":v=0:a=1[out]")
filterStringBuilder.append("'")

args.add("-filter_complex")
args.add(filterStringBuilder.toString())
args.add("-map")
args.add("'[out]'")
args.add(outFile.absolutePath)
logger.info { "Filter: ${args.joinToString(" ")}" }
val result = executeCommand(args.toTypedArray())
if (!result.isSuccessful()) {
throw FfmpegException(result.toString())
}
}

这种方法生成的args是可以的:
-i silence-0.5.mp3 -i vo_1543189276830.mp3 -i silence-0.5.mp3 -filter_complex '[0:0][1:0][2:0]concat=n=3:v=0:a=1[out]' -map '[out]' vo_final_1543189276833.mp3

如果我从命令行使用这个 args 运行 ffmpeg,它就可以正常工作。

但是在 Kotlin 应用程序中运行时,会出现以下错误:
[AVFilterGraph @ 0x7fd134071500] No such filter: '[0:0][1:0][2:0]concat=n=3:v=0:a=1[out]'
Error initializing complex filters.
Invalid argument

我已经尝试过:
  • 查看类似问题
  • 逃生 '\
  • 替换 '"

  • 结果是一样的。

    FFMPEG 4.1、Kotlin 1.3、Java 1.8、macOS 10.13.6

    最佳答案

    好吧,解决方案是删除'根本:

    fun concatenateAudioFiles(files: Collection<File>, outFile: File) {
    val args = mutableListOf<String>()

    files.forEach { file ->
    args.add("-i")
    args.add(file.absolutePath)
    }

    // Create filter
    val filterStringBuilder = StringBuilder()
    files.forEachIndexed { index, _ ->
    filterStringBuilder.append("[$index:0]")
    }
    filterStringBuilder.append("concat=n=")
    filterStringBuilder.append(files.size)
    filterStringBuilder.append(":v=0:a=1[out]")

    args.add("-filter_complex")
    args.add(filterStringBuilder.toString())
    args.add("-map")
    args.add("[out]")
    args.add(outFile.absolutePath)
    logger.info { "Filter: ${args.joinToString(" ")}" }
    val result = executeCommand(args.toTypedArray())
    if (!result.isSuccessful()) {
    throw FfmpegException(result.toString())
    }
    }

    我确信这是因为 ProcessBuilder 使用 " 转义了参数。 ,所以它们看起来像 "-filter_complex" "'[0:0][1:0][2:0]concat=n=3:v=0:a=1[out]'" ,这是错误的。

    关于java - 初始化复杂过滤器时出错。从 Kotlin 运行 ffmpeg 时出现无效参数错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53473213/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com