我还检查了一些或多个类似的已发布的问题,但没有一个有任何令人满意的回复 .

我的要求是大约压缩视频 . 1-2分钟 . 我的应用中的视频大小限制为500 MB,持续时间限制为4分钟 .

这些命令,我试过 -

-i /storage/sdcard0/Videos/Lat_test.mp4 -r 20 -vcodec mpeg4 -preset ultrafast -c:a 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:a 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,但它们都没有运行良好 . 有些非常慢 . 并且在一些设备中休息失败 .