这个命令
ffmpeg -i video.webm -i audio.m4a -c 复制 output.mkv
对于任何大文件(例如大于 700mb),在转换结束时总是会在 android 中产生 ANR 错误。
ANR 错误仅在成功生成输出后的转换过程结束时产生,而不是在中间或开始时等。
所以我怀疑它最后与一些 I/O 的东西有关。
有人可以对此有所了解,并帮助消除此 ANR 问题吗?
最佳答案
默认情况下, ffmpeg 产生进度输出〜每 500 毫秒。一路FFmpeg-Android处理此输出,它将进度消息返回到您的 onProgress()
回调,并将所有这些(相对较短的)消息附加到一个字符串中,该字符串在 onSuccess()
中返回.
发生的情况是,对于大型视频文件,内存可能会耗尽,或者至少垃圾收集器会非常努力地工作。这些字符串操作发生在主线程上,很容易导致 ANR。
作为一种快速解决方法,您可以通过 -nostats
到 ffmpeg 命令行:
ffmpeg -i video.webm -i audio.m4a -c copy output.mkv -nostats
要解决此问题,请查看 https://github.com/bravobit/FFmpeg-Android/pull/128 .
关于android - FFmpeg - 混合视频和音频时大文件的 ANR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57067507/