如何使用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 进程。请注意,它们不是线程,而是成熟的进程,因此这样做的成本可能比您预期的要高。
我正在尝试拆分、转换和合并音频。我为 Android 使用了 writingMinds FFmpeg 构建。但是长时间的音频会花费很多时间。
为了加快速度,我尝试在具有 8 个内核的 phone 上使用 "thread -4" 命令,但它并没有提高性能。
然后我将音频分成 4 个部分(使用 4 个线程),然后在单独的线程中调用 FFmpeg.execute() 以进行多线程处理。但是 FFmpeg 库按顺序处理文件。 ffmpeg是否可以在4个线程中并行处理这4个部分?如果有怎么办?
更新
参见
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 进程。请注意,它们不是线程,而是成熟的进程,因此这样做的成本可能比您预期的要高。