Я создаю оболочку для 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())
}
}
Аргументы, сгенерированные этим методом, в порядке:
-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
И если я запускаю 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
IУже пытались:
- Проверить похожие вопросы
- Escape
'
с \
- Заменить
'
с "
Результат тот же.
FFMPEG 4.1, Kotlin 1.3, Java 1.8, macOS 10.13.6