Android去掉视频声音

【Android】使用MediaExtractor、MediaMuxer去掉视频文件中的音频数据_android 去掉视频音频_little_fat_sheep的博客-CSDN博客

java 复制代码
void removeSound() {
    try {
        String path = Environment.getExternalStorageDirectory().getPath();
        String filename = "no_sound_" + input_path.substring(input_path.lastIndexOf("/") + 1);
        String output_path = path + File.separator + filename;
        MediaExtractor mediaExtractor = new MediaExtractor();
        mediaExtractor.setDataSource(input_path);
        MediaMuxer mediaMuxer = new MediaMuxer(output_path, MediaMuxer.OutputFormat.MUXER_OUTPUT_MPEG_4);
        int input_size = 0;
        int videoTrackIndex = -1;
        int count = mediaExtractor.getTrackCount(); //获取轨道数
        for (int i = 0; i < count; i++) {
            MediaFormat format = mediaExtractor.getTrackFormat(i);
            String mime = format.getString(MediaFormat.KEY_MIME);
            if (mime.startsWith("video/")) { // mp4为"video/avc"
                input_size = format.getInteger(MediaFormat.KEY_MAX_INPUT_SIZE);
                mediaExtractor.selectTrack(i);
                videoTrackIndex = mediaMuxer.addTrack(format);
                break;
            }
        }
        mediaMuxer.start();
        int sampleSize = 0;
        MediaCodec.BufferInfo info = new MediaCodec.BufferInfo();
        ByteBuffer buffer = ByteBuffer.allocate(input_size); //也可以设置为:500*1024
        while ((sampleSize = mediaExtractor.readSampleData(buffer, 0)) > 0) {
            info.offset = 0;
            info.size = sampleSize;
            info.flags = mediaExtractor.getSampleFlags();
            info.presentationTimeUs = mediaExtractor.getSampleTime();
            mediaMuxer.writeSampleData(videoTrackIndex, buffer, info); //写入数据
            mediaExtractor.advance(); //下一帧
        }
        mediaExtractor.release();
        mediaMuxer.stop();
        mediaMuxer.release();
        MediaScannerConnection.scanFile(MainActivity.this, new String[]{ output_path }, null, null);
        Toast.makeText(getApplicationContext(), "视频生成完成:" + output_path, Toast.LENGTH_SHORT).show();
    } catch (Exception e) {
        Toast.makeText(getApplicationContext(), e.toString(), Toast.LENGTH_SHORT).show();
        Log.e(Thread.currentThread().getStackTrace()[2] + "", e.toString());
    }
}

选择视频文件

java 复制代码
String input_path = "";

void chooseFile() {    
    int CHOOSE_VIDEO = 200;
    Intent intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Video.Media.EXTERNAL_CONTENT_URI);
    startActivityForResult(intent, CHOOSE_VIDEO);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == RESULT_OK) {
        Uri uri = data.getData();
        String[] proj = { MediaStore.Video.Media.DATA };
        Cursor cursor = managedQuery(uri, proj, null, null, null);
        int column_index = cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DATA);
        cursor.moveToFirst();
        input_path = cursor.getString(column_index);
        Log.e(Thread.currentThread().getStackTrace()[2] + "", input_path);
    }
}
相关推荐
码农阿强5 分钟前
技术解析|doubao‑seedance 全系列模型深度解读:API 开放生态赋能 AI 视频生成工程化
人工智能·音视频
大拿爱科技5 分钟前
声音克隆接入短视频流程时,哪些环节最容易出问题?
人工智能·aigc·音视频·语音识别
逸Y 仙X7 分钟前
文章二十九:ElasticSearch分桶聚合
android·大数据·elasticsearch·搜索引擎·全文检索
DogDaoDao18 分钟前
libaom源码search_intra_modes_in_interframe函数深度分析
音视频·视频编解码·av1·libaom·帧内预测·预测编码·预测模式
陆业聪25 分钟前
网络监控与容灾:让网络问题无处遁形
android·性能优化·启动优化
网管NO.127 分钟前
视频核心技术 03:H.264 / H.265 / AV1 编码标准对比 —— 压缩率、复杂度、适用场景
音视频·h.265·h.264
黄昏恋慕黎明29 分钟前
音视频测试
音视频
问心无愧051334 分钟前
ctf show web入门 89
android·前端·笔记
高旭的旭1 小时前
Android Perfetto Profilers Skills 简明使用指南
android
果果开发ggdoc.cn1 小时前
我找到一个在线视频处理工具,不用上传,本地就能转格式、提取音频和字幕
音视频