簡體   English   中英

如何從已保存的視頻中刪除聲音

[英]How to remove sound from already saved video

我正在嘗試從圖庫中已存儲的視頻中刪除聲音,然后將其保存回無聲音的狀態。 我進行了很多研究,但沒有找到適合我的問題的答案。 我也嘗試過JAVE,但它只是從目標視頻中提取聲音。 以下是我的代碼,請建議我如何解決此問題。 提前致謝 :)

public class MainActivity extends AppCompatActivity implements EasyVideoCallback {

    private static final String TAG = "MainActivity";
    private EasyVideoPlayer player;

    //variables for path
    private static final int SELECT_VIDEO = 1;
    private String selectedVideoPath;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        player = (EasyVideoPlayer) findViewById(R.id.player);
        assert player != null;
        player.setCallback(this);

        Intent intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Video.Media.EXTERNAL_CONTENT_URI);
        startActivityForResult(Intent.createChooser(intent,"Select Video"), SELECT_VIDEO);
    }

    @Override
    protected void onPause() {
        super.onPause();
        player.pause();
    }

    @Override
    public void onStarted(EasyVideoPlayer player) {
    }

    @Override
    public void onPaused(EasyVideoPlayer player) {
    }

    @Override
    public void onPreparing(EasyVideoPlayer player) {
        Log.d("EVP-Sample", "onPreparing()");
    }

    @Override
    public void onPrepared(EasyVideoPlayer player) {
        Log.d("EVP-Sample", "onPrepared()");
        player.setVolume(0,0);
        player.save
    }

    @Override
    public void onBuffering(int percent) {
        Log.d("EVP-Sample", "onBuffering(): " + percent + "%");
    }

    @Override
    public void onError(EasyVideoPlayer player, Exception e) {
        Log.d("EVP-Sample", "onError(): " + e.getMessage());
        new MaterialDialog.Builder(this)
                .title(R.string.error)
                .content(e.getMessage())
                .positiveText(android.R.string.ok)
                .show();
    }

    @Override
    public void onCompletion(EasyVideoPlayer player) {
        Log.d("EVP-Sample", "onCompletion()");
    }

    @Override
    public void onRetry(EasyVideoPlayer player, Uri source) {
//        Toast.makeText(this, "Retry", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onSubmit(EasyVideoPlayer player, Uri source) {
        Toast.makeText(this, "Save", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onClickVideoFrame(EasyVideoPlayer player) {
//        Toast.makeText(this, "Click video frame.", Toast.LENGTH_SHORT).show();
    }

    @ Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (resultCode == RESULT_OK) {
            if (requestCode == SELECT_VIDEO) {

                Uri selectedImageUri = data.getData();

                // OI FILE Manager
                String filemanagerstring = selectedImageUri.getPath();

                // MEDIA GALLERY

                selectedVideoPath = getPath(data.getData());
                if(selectedVideoPath == null) {
                    Log.i(TAG, "selected video path = null!");
                } else {
                    player.setSource(selectedImageUri);
                    Log.e(TAG, "selected video path: " + selectedVideoPath);
                }
            }
        }
    }

    public String getPath(Uri uri) {
        String[] projection = { MediaStore.Video.Media.DATA };
        Cursor cursor = getContentResolver().query(uri, projection, null, null, null);
        if (cursor != null) {
            // HERE YOU WILL GET A NULLPOINTER IF CURSOR IS NULL
            // THIS CAN BE, IF YOU USED OI FILE MANAGER FOR PICKING THE MEDIA
            int column_index = cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DATA);
            cursor.moveToFirst();
            return cursor.getString(column_index);
        } else
            return null;
    }
}

如果要從視頻中刪除聲音,請使用FFmpeg庫。 該庫的完整文檔在這里

FFmpeg在android中的實現在這里查看

您需要編寫刪除視頻中音頻的命令,這是命令。

   ffmpeg -i example.mkv -c copy -an example-nosound.mkv

只需在ffmpeg中傳遞此命令,然后輸入輸入視頻位置和輸出位置即可。

我在Android中使用FFMPG庫來做到這一點。 你可以在Android中搜索如何使用FFMPG庫

https://github.com/WritingMinds/ffmpeg-android

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM