如何使用ffmpeg进行多线程?

how to multi thread with ffmpeg?

我正在尝试拆分、转换和合并音频。我为 Android 使用了 writingMinds FFmpeg 构建。但是长时间的音频会花费很多时间。

为了加快速度,我尝试在具有 8 个内核的 phone 上使用 "thread -4" 命令,但它并没有提高性能。

然后我将音频分成 4 个部分(使用 4 个线程),然后在单独的线程中调用 FFmpeg.execute() 以进行多线程处理。但是 FFmpeg 库按顺序处理文件。 ffmpeg是否可以在4个线程中并行处理这4个部分?如果有怎么办?

更新
参见 。 在这种情况下,也是因为FFmpegExecuteAsyncTask的调用方法作为Asynctask的执行方法class在现代API中一次只允许一个实例运行。 解决方法是使用此检查。

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { // Android 3.0 to
                    // Android 4.3
                    // Parallel AsyncTasks are not possible unless using executeOnExecutor
                    ffmpegExecuteAsyncTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
                } else { // Below Android 3.0
                    // Parallel AsyncTasks are possible, with fixed thread-pool size
                    ffmpegExecuteAsyncTask.execute();
                }

你是对的。这个 Java 包装器确保对 ffmpeg 的所有调用都是顺序的。如果你放弃这个工具并自己加载二进制文件,你可以 运行 并行处理多个 ffmpeg 进程。请注意,它们不是线程,而是成熟的进程,因此这样做的成本可能比您预期的要高。