短视频编辑中背景音乐选择 音乐频谱波形图

 地址:https://gitee.com/dahai2070/mytx-android  这个是我们的创业项目开源地址,欢迎加入,共谋发展。

目前正在写视频压缩编辑,设置滤镜,添加背景音乐等,写好了以下内容就会同步过期。

 

音频波形图

就是想要上面这样的波形图,一开始在github 找了一个demo,里面有根据音频的pcm 文件,得出波形数组,然后自定义View 绘制,但是从用户选择背景音量到到pcm 数据提取完成,3分钟多一点的mp3 ,在我手机上是15S以上,太慢了,,,

    然后猜想到ffmepg 是否能搞定,网上一搜,果然可以,上面的图片就是我用ffmpeg 绘制出来的png 。

ffmpeg 命令是 :

ffmpeg -i mix_audio_1585037033975.aac -filter_complex "showwavespic=s=1280x120:colors=0xb5b5b6" -frames:v 1 output1.png

 

放一张手机上的效果图,

 

 

下面是java 代码:

生成命令的代码:

* 生成 音频波形PNG图
  * ffmpeg -i mix_audio_1585037033975.aac -filter_complex "showwavespic=s=1280x120" -frames:v 1 output1.png
  * @param audioPath
  * @param output
  * @return
  */
public static String[] generateWavePNG(@NonNull String audioPath, @NonNull String output) {
     List<String> cmdList = new ArrayList<String>();

     cmdList.add("ffmpeg");
     cmdList.add("-i");
     cmdList.add(audioPath);
     cmdList.add("-filter_complex");
     cmdList.add("showwavespic=s=1280x120:colors=0xb5b5b6"); //1280 *120 是尺寸 .colors 后面是绘制的颜色
     cmdList.add("-frames:v");
     cmdList.add("1");
     cmdList.add("-y");
     cmdList.add(output);

     String[] cmds = new String[cmdList.size()];
     cmdList.toArray(cmds);
     return cmds;
 }
生成一个临时文件路径,用来保存生成的png,
String wavePNGPath = PathUtils.getBasePath() + File.separator + "temp_" + System.currentTimeMillis() + ".png";
String[] cmd = CainCommandEditor.generateWavePNG(musicPath, wavePNGPath);
FFmpegCmd.exec(cmd, 20, new FFmpegCmd.OnCmdExecListener() {
    @Override
    public void onSuccess() {
        Log.i(TAG, "onSuccess: 生成波形图完成,,地址是:" + wavePNGPath + "合并所花时间是:" + (System.currentTimeMillis() - start));
        if (hasMusic) {
            ((Activity) context).runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    setWaveData(wavePNGPath);
                }
            });
        }
    }

    @Override
    public void onFailure() {
        Log.e(TAG, "onFailure: ");
    }

    @Override
    public void onProgress(float progress) {

    }
});

FFmpegCmd 是调用ffmpeg 的一个工具类。这个网上很多,过几天也会一并放项目中。

生成成功后,从路径中读取 图片,给到Imageview 显示即可。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值