所以回答我自己的问题。在这方面没有得到太多帮助,因此决定将库切换到 FFmpeg。
分级
implementation 'com.writingminds:FFmpegAndroid:0.3.2'
加载库:
FFmpeg fFmpeg;
private void LoadFfmpegLibrary(){
SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yyyy_hh-mm", Locale.CANADA);
Date now = new Date();
String videoFileName = "Video-" + formatter.format(now) + ".mp4";
if(fFmpeg == null){
fFmpeg = FFmpeg.getInstance(context);
try {
fFmpeg.loadBinary(new LoadBinaryResponseHandler() {
@Override
public void onStart() {
}
@Override
public void onFailure() {
}
@Override
public void onSuccess() {
}
@Override
public void onFinish() {
Compress(videoFileName);
}
});
} catch (FFmpegNotSupportedException e) {
e.printStackTrace();
}
} else {
Compress(videoFileName);
}
}
然后压缩视频
private void Compress(String fileName){
String outputPath = getExternalFilesDir("/").getAbsolutePath() + "/My Folder/" + fileName;
String[] commandArray;
commandArray = new String[]{"-y", "-i", originalFileUriStr, "-s", "720x480", "-r", "25", "-vcodec", "mpeg4", "-b:v", "300k", "-b:a", "48000", "-ac", "2", "-ar", "22050", outputPath};
final ProgressDialog dialog = new ProgressDialog(activity);
try {
fFmpeg.execute(commandArray, new ExecuteBinaryResponseHandler() {
@Override
public void onStart() {
dialog.setMessage("Compressing... please wait");
}
@Override
public void onProgress(String message) {
Log.e("FFmpeg onProgress? ", message);
}
@Override
public void onFailure(String message) {
Log.e("FFmpeg onFailure? ", message);
}
@Override
public void onSuccess(String message) {
Log.e("FFmpeg onSuccess? ", message);
}
@Override
public void onFinish() {
Uri compressedOutputUri = Uri.fromFile(new File(outputPath));
}
});
} catch (FFmpegCommandAlreadyRunningException e) {
e.printStackTrace();
}
}
现在声音效果完美。