Java 如何使用FFMPEG将视频文件转换为音频文件?

Java 如何使用FFMPEG将视频文件转换为音频文件?,java,android,ffmpeg,Java,Android,Ffmpeg,我正在制作视频到音频转换器应用程序,但需要帮助使用ffmpeg将视频转换为音频。我检查了许多答案和网站,但他们的答案不容易理解,我对用于转换的命令感到困惑。将视频转换为音频的正确命令是什么?我是否以正确的方式执行该命令 公共类VideoConvertActivity扩展了AppCompatActivity{ 私人视频视图; 私人按钮; 私有字符串文件路径; 私有FFmpeg-FFmpeg; @凌驾 创建时受保护的void(Bundle savedInstanceState){ super.onC

我正在制作视频到音频转换器应用程序,但需要帮助使用ffmpeg将视频转换为音频。我检查了许多答案和网站,但他们的答案不容易理解,我对用于转换的命令感到困惑。将视频转换为音频的正确命令是什么?我是否以正确的方式执行该命令

公共类VideoConvertActivity扩展了AppCompatActivity{
私人视频视图;
私人按钮;
私有字符串文件路径;
私有FFmpeg-FFmpeg;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u video\u convert);
videoView=findviewbyd(R.id.videoviewID);
convertButton=findViewById(R.id.convertbuttonID);
ffmpeg=ffmpeg.getInstance(VideoConvertActivity.this);
//在variable video中,我通过intent获得了先前活动的视频路径,该视频必须转换为音频文件
Intent extras=getIntent();
最终字符串视频=extras.getStringExtra(“视频”);
videoView.setVideoPath(视频);
videoView.start();
convertButton.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
试一试{
文件moviesDir=Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY\u音乐
);
String filePrefix=“转换音频”;
字符串fileExtn=“.mp3”;
File dest=新文件(moviesDir,filePrefix+fileExtn);
int fileNo=0;
while(dest.exists()){
fileNo++;
dest=新文件(moviesDir,filePrefix+fileNo+fileExtn);
}
filePath=dest.getAbsolutePath();
//要执行“ffmpeg-version”命令,只需传递“-version”
字符串[]命令={“-y”、“-i”、视频、“-vn”、“-ar”、“44100”、“-ac”、“2”、“-b:a”、“256k”、“-f”、“mp3”、文件路径};
execute(命令,新的ExecuteBinaryResponseHandler(){
@凌驾
public void onStart(){
Toast.makeText(VideoConvertActivity.this,“start”,Toast.LENGTH_LONG.show();
}
@凌驾
公共void onProgress(字符串消息){
Toast.makeText(VideoConvertActivity.this,“Progress”,Toast.LENGTH_LONG.show();
}
@凌驾
公共void onFailure(字符串消息){
Toast.makeText(VideoConvertActivity.this,“失败”,Toast.LENGTH_LONG.show();
}
@凌驾
成功时公共无效(字符串消息){
Toast.makeText(VideoConvertActivity.this,“success”,Toast.LENGTH_LONG.show();
}
@凌驾
公共无效onFinish(){
Toast.makeText(VideoConvertActivity.this,“Finished”,Toast.LENGTH_LONG.show();
}
});
}捕获(FFmpegCommandAlreadyRunningException e){
//处理FFmpeg是否已在运行
}
Toast.makeText(VideoConvertActivity.this,“已成功转换”,Toast.LENGTH_SHORT.show();
}
});
}
}

Main不是一个地方,你应该放置一个while循环,这会导致问题。因为Main本身就是一个循环,你应该在后台使用线程来做一些事情,而不是中断程序的流程。 在这种情况下,如果可以的话

以下是一个播放器示例,您可以了解它的工作原理:


如果你在几个小时内还没有解决它,我会看看我能做些什么来帮助你。

你应该把它放在你的
命令
变量中

因此,instrad对此表示赞赏

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};

我在清单中授予了读取权限,但忘记了授予写入权限

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>


我没有使用exo播放器,在android中,什么是将视频转换为音频的正确且简单的方法?我的其余代码呢?将视频转换为音频是真的吗将您的过程转换为异步任务或可运行可能是个好主意,但是我认为您的代码很好…我使用com.arthenica.mobileffmeg.FFmpeg,具有相同的功能,并且工作正常,因此有两种可能,您忘记将ndk添加到项目中,或者你设置的文件是错误的。我没有添加任何ndk。这是强制性的吗?我没有收到任何错误或崩溃