我还检查了几个或多个类似的帖子,但没有一个人有任何令人满意的答案。
我的要求是大约压缩视频。 1-2分钟。 我的应用中的视频大小限制为500 MB,持续时间限制为4分钟。
命令,我试过 -
-i /storage/sdcard0/Videos/Lat_test.mp4 -r 20 -vcodec mpeg4 -preset ultrafast -c:copy -tune fastdecode -strict -2 -b:v 150k /storage/sdcard0/Videos/output.mp4
-y -i /storage/sdcard0/Videos/test3.mp4 -crf 24 -vcodec mpeg4 -preset ultrafast -c:copy -me_method zero -tune fastdecode -tune zerolatency -strict -2 -b:v 1000k -pix_fmt yuv420p /storage/sdcard0/Videos/output.mp4
还有一些提及here
1)https://github.com/Tourenathan-G5organisation/SiliCompressor(使用MediaCodec的那个,而不是FFMPEG)。
2)https://github.com/lalongooo/VideoCompressor
尝试使用三星Galaxy Grand GT-i9082 5.0.1版(已植根)时,失败并出现以下错误 -
> java.lang.IllegalStateException
> at android.media.MediaCodec.native_dequeueOutputBuffer(Native Method)
> at android.media.MediaCodec.dequeueOutputBuffer(MediaCodec.java:1033)
> at com.iceteck.silicompressorr.videocompression.MediaController.convertVideo(MediaController.java:491)
> at com.iceteck.silicompressorr.SiliCompressor.compressVideo(SiliCompressor.java:300)
> at com.iceteck.silicompressor.SelectPictureActivity$VideoCompressAsyncTask.doInBackground(SelectPictureActivity.java:379)
> at com.iceteck.silicompressor.SelectPictureActivity$VideoCompressAsyncTask.doInBackground(SelectPictureActivity.java:358)
> at android.os.AsyncTask$2.call(AsyncTask.java:288)
> at java.util.concurrent.FutureTask.run(FutureTask.java:237)
> at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
> at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
> at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
> at java.lang.Thread.run(Thread.java:818)
请建议如何解决此问题。
或please suggest any other better video compressing approach / sample / reference
,如果可能的话
我尝试过各种使用FFMPEG的视频压缩样本,以及MediaCodec,但它们都没有运行良好。有些非常慢。并且在一些设备中休息失败。