Как конвертировать видео файл в аудио файл с помощью FFMPEG? - PullRequest
0 голосов
/ 14 января 2020

Я делаю видео в аудио конвертер, но мне нужна помощь, чтобы конвертировать видео в аудио с помощью ffmpeg. Я проверил много ответов и веб-сайтов, но их ответы нелегко понять, и я запутался с командой, которая используется для преобразования. Что такое правильная команда для преобразования видео в аудио и выполняю ли я команду правильно?

public class VideoConvertActivity extends AppCompatActivity {

    private VideoView videoView;
    private Button convertButton;
    private String filePath;
    private FFmpeg ffmpeg;


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

        videoView = findViewById(R.id.videoviewID);
        convertButton = findViewById(R.id.convertbuttonID);

        ffmpeg = FFmpeg.getInstance(VideoConvertActivity.this);

// in variable video i'm getting the path of video path from previous activity through intent and that video will have to convert to audio file
        Intent extras = getIntent();
        final String video = extras.getStringExtra("video");

        videoView.setVideoPath(video);
        videoView.start();

        convertButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                try {

                    File moviesDir = Environment.getExternalStoragePublicDirectory(
                            Environment.DIRECTORY_MUSIC
                    );

                    String filePrefix = "convert_audio";
                    String fileExtn = ".mp3";
                    File dest = new File(moviesDir, filePrefix + fileExtn);

                    int fileNo = 0;
                    while (dest.exists()) {
                        fileNo++;
                        dest = new File(moviesDir, filePrefix + fileNo + fileExtn);
                    }
                    filePath = dest.getAbsolutePath();

                    // to execute "ffmpeg -version" command you just need to pass "-version"
                    String[] command = {"-y", "-i", video, "-vn", "-ar", "44100", "-ac", "2", "-b:a", "256k", "-f", "mp3", filePath};
                    ffmpeg.execute(command, new ExecuteBinaryResponseHandler() {

                        @Override
                        public void onStart() {
                            Toast.makeText(VideoConvertActivity.this,"Started",Toast.LENGTH_LONG).show();
                        }

                        @Override
                        public void onProgress(String message) {
                            Toast.makeText(VideoConvertActivity.this,"Progress",Toast.LENGTH_LONG).show();
                        }

                        @Override
                        public void onFailure(String message) {
                            Toast.makeText(VideoConvertActivity.this,"Failed",Toast.LENGTH_LONG).show();
                        }

                        @Override
                        public void onSuccess(String message) {
                            Toast.makeText(VideoConvertActivity.this,"Succeed",Toast.LENGTH_LONG).show();
                        }

                        @Override
                        public void onFinish() {
                            Toast.makeText(VideoConvertActivity.this,"Finished",Toast.LENGTH_LONG).show();
                        }
                    });
                } catch (FFmpegCommandAlreadyRunningException e) {
                    // Handle if FFmpeg is already running
                }

                 Toast.makeText(VideoConvertActivity.this,"Converted Successfully",Toast.LENGTH_SHORT).show();

            }
        });

    }

}

Ответы [ 3 ]

0 голосов
/ 14 января 2020

любой конверт рекомендует, вы должны поместить его в command переменную

, поэтому инстрад этой рекомендации

String[] command = {"-y", "-i", video, "-vn", "-ar", "44100", "-ac", "2", "-b:a", "256k", "-f", "mp3", filePath};

используйте этот

ffmpeg -i video.mp4 -f mp3 -ab 192000 -vn music.mp3

или вы можно отформатировать ваш комментарий так же, как вы сделали для команды массив:

   String[] command = {"-y", "-i", video, "-f", "mp3", "-ab", "192000", "-vn", filePath};
0 голосов
/ 15 января 2020

Я дал разрешение на чтение в манифесте, но забыл дать разрешение на запись

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
0 голосов
/ 14 января 2020

Main - это не то место, которое вы должны поместить некоторое время l oop, это вызовет проблемы. Поскольку main - это все oop, в нем вы должны использовать thread, чтобы сделать что-то в фоновом режиме, а не прерывать поток программы. В этом случае if будет делать.

Вот пример игрока, чтобы вы могли понять, как он работает: https://developer.android.com/guide/topics/media/exoplayer

Если вы не решите это в Через несколько часов я не смогу помочь тебе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...