Запуск процесса FFprobe в XCode для возврата данных о продолжительности файла - PullRequest
1 голос
/ 24 октября 2019

Используя в этом примере , я смог создать процесс для запуска ffmpeg из основного набора ресурсов приложения MacOS. Однако тот факт, что мне удалось заставить его работать, был действительно глупой удачей.

Но теперь мне нужно иметь возможность сделать что-то похожее с ffprobe в соответствии с тем, что обсуждается в . этот пост , чтобы получить продолжительность аудиофайла, чтобы обрезать заданное количество секунд после его конца, используя эти аргументы:

ffprobe -v 0 -show_entries format=duration -of compact=p=0:nk=1 input.m4b

Но яне знаю, как это реализовать. Это в основном то, чего я хочу достичь:

    func insertTrimArguments() {
        conversionSelection()
        if trimStartEndClipsCheckbox.state == .on {
            ffmpegArguments.insert(contentsOf: ["-ss", "00:00:02.000", /*"-t", "duration minus 4.2secs"]*/, at: 3)
        }
        else {
        }
    }

Я давно не программирую на Swift, и процессы для меня совершенно новые, и я никогда не рассматривал их ни в одном из учебных пособий по основам. учился, прежде чем я начал свой проект. Используя подход monkey-see / monkey-do из первого примера, который я связал, я могу начать имитировать его для своей функции ffprobe, но я понятия не имею, правильно ли я это делаю или куда идти с этимздесь.

Это все, что у меня есть.

    // get file duration and subtract 4.2 seconds if "trim audible clips is enabled, then insert additional arguments into conversionSelection arrays
    func getFileDuration() {
        guard let ffprobePath = Bundle.main.path(forResource: "ffprobe", ofType: "") else { return }
        do {
            let ffprobeTask: Process = Process()
            ffprobeTask.launchPath = ffprobePath
            ffprobeTask.arguments = [
                "-v", "error",
                "-show_entries",
                "format=duration", "-of",
                "compact=p=0:nk=1",
                "\(inputFilePath)"]
            ffprobeTask.standardInput = FileHandle.nullDevice
            ffprobeTask.launch()
            ffprobeTask.waitUntilExit()
        }
    }

Как мне адаптировать этот процесс так, чтобы вместо преобразования и вывода нового файла он возвращал продолжительность входного файлачтобы я мог сделать необходимую математику и включить ее в свои аргументы?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...