视频压缩后Silicompressor没有声音

时间:2021-02-27 18:54:49

标签: android compression

我一直在压缩图像,没有任何问题。最近我的应用需要添加视频压缩功能。同样,Silicompressor 完成了这项工作,但由于某种原因,输出文件中没有音频。

我在 Runnable 中使用代码

String videoUriStr; // Passed as a variable

String folderPath = activity.getExternalFilesDir("/").getAbsolutePath() + "/My Folder";
String videoPath = SiliCompressor.with(context).compressVideo(videoUriStr, folderPath);

我可以无声地播放压缩视频(虽然在上传到 firebase 存储时,url 显示黑屏但视频长度正确。但我会弄清楚的)。我最关心的是声音。

我在谷歌上搜索了很多,找到了 2 个解决方案,其中第二个似乎很有希望,但正在寻找实现它的方法。

首先是将 implementation 'com.googlecode.mp4parser:isoparser:1.1.22' 降级为 implementation 'com.googlecode.mp4parser:isoparser:1.0.6',这不起作用。

第二个,我找到了 here,它说“问题似乎出在音频编码器上,我将音频编码器更改为 HE_AAC,它现在可以工作了”。可以请任何人帮助我吗?

1 个答案:

答案 0 :(得分:0)

所以回答我自己的问题。在这方面没有得到太多帮助,因此决定将库切换到 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();
    }
}

现在声音完美无缺。