Android ffmpeg 无法将音频(.wav 文件)与视频(.mp4 文件)合并

Posted

技术标签:

【中文标题】Android ffmpeg 无法将音频(.wav 文件)与视频(.mp4 文件)合并【英文标题】:Android ffmpeg unable to merge audio(.wav file) with video(.mp4 file) 【发布时间】:2015-04-08 05:00:30 【问题描述】:

我正在研究 FFMPEG 库,我正在将音频(.wav 文件)与视频(.mp4 文件)合并,因为我在这里使用以下命令:

*String commandStr=    "ffmpeg,-y,-i,mnt/sdcard/Scatta/Scattatemp.mp4,-i,/storage/emulated/0/MicDroid/recordings/video.wav ,-strict,experimental,-map,0:0,-map,1:0,-vcodec,mpeg4,-vb,15496k,-ab,128k,-ac,2,-ar,22050,-shortest,mnt/sdcard/Scatta/mergedFile.mp4";

因为我正在使用以下代码,但我的命令不起作用,我收到 Commandvalidation failed 异常

GeneralUtils.deleteFileUtil(workFolder + "/vk.log");

        PowerManager powerManager = (PowerManager)_act.getSystemService(Activity.POWER_SERVICE);
        WakeLock wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "VK_LOCK"); 
        Log.d("Prefs.TAG", "Acquire wake lock");
        wakeLock.acquire();
String commandStr=  "ffmpeg,-y,-i,mnt/sdcard/Scatta/Scattatemp.mp4,-i,/storage/emulated/0/MicDroid/recordings/video.wav ,-strict,experimental,-map,0:0,-map,1:0,-vcodec,mpeg4,-vb,15496k,-ab,128k,-ac,2,-ar,22050,-shortest,mnt/sdcard/Scatta/mergedFile.mp4"   ;

LoadJNI vk = new LoadJNI();
        try 

            vk.run(GeneralUtils.utilConvertToComplex(commandStr), workFolder, getApplicationContext());
            GeneralUtils.copyFileToFolder(vkLogPath, demoVideoFolder);

         catch (CommandValidationException e) 
            Log.e("Prefs.TAG", "vk run exeption.", e);
            commandValidationFailedFlag = true;
         catch (Throwable e) 
            Log.e("Prefs.TAG", "vk run exeption.", e);
        
        finally 
            if (wakeLock.isHeld())
                wakeLock.release();
            else
                Log.i("Prefs.TAG", "Wake lock is already released, doing nothing");
            
        
        Log.i("Prefs.TAG", "doInBackground finished");
    
    catch(Exception e)
        e.printStackTrace();
        System.out.println(".exception"+e.toString());
    

我收到以下异常

 04-08 10:00:38.891: D/ffmpeg4android(7781): deleteing: /data/data/org.scatta.androidclient/files//vk.log isdeleted: false
 04-08 10:00:38.891: D/Prefs.TAG(7781): Acquire wake lock
 04-08 10:00:38.896: I/System.out(7781): <--- command strffmpeg -i  mnt/sdcard/Scatta/Scattatemp.mp4 -i    /storage/emulated/0/MicDroid/recordings/video.wav -acodec copy mnt/sdcard/Scatta/mergedFile.mp4
 04-08 10:00:38.896: E/ffmpeg4android(7781): Command validation failed.
 04-08 10:00:38.896: E/ffmpeg4android(7781): Check if input file exists: /storage/emulated/0/MicDroid/recordings/video.wav
    04-08 10:00:38.896: E/Prefs.TAG(7781): vk run exeption.
  04-08 10:00:38.896: E/Prefs.TAG(7781): com.netcompss.ffmpeg4android.CommandValidationException
    04-08 10:00:38.896: E/Prefs.TAG(7781):  at com.netcompss.loader.LoadJNI.run(LoadJNI.java:26)
  04-08 10:00:38.896: E/Prefs.TAG(7781):    at com.scatta.androidclient.ui.PlaybackScreen$TranscdingBackground.doInBackground(PlaybackScreen.java:159)
   04-08 10:00:38.896: E/Prefs.TAG(7781):   at com.scatta.androidclient.ui.PlaybackScreen$TranscdingBackground.doInBackground(PlaybackScreen.java:1)
   04-08 10:00:38.896: E/Prefs.TAG(7781):   at android.os.AsyncTask$2.call(AsyncTask.java:287)
    04-08 10:00:38.896: E/Prefs.TAG(7781):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
    04-08 10:00:38.896: E/Prefs.TAG(7781):  at java.util.concurrent.FutureTask.run(FutureTask.java:137)
  04-08 10:00:38.896: E/Prefs.TAG(7781):    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
   04-08 10:00:38.896: E/Prefs.TAG(7781):   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
  04-08 10:00:38.896: E/Prefs.TAG(7781):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
 04-08 10:00:38.896: E/Prefs.TAG(7781):     at java.lang.Thread.run(Thread.java:856)

【问题讨论】:

您好 navya 我的命令中有问题 @AnandMakwana 是的先生..但我没有找到我做错的地方 "检查输入文件是否存在:/storage/emulated/0/MicDroid/recordings/video.wav" (你忘了写@slhck)你可以使用Java检查文件是否存在。你为什么认为文件在那里?你确定在你指定的位置有video.wav吗? 【参考方案1】:

-您可以看到调用检查您的文件时出错,因此首先检查您的 文件 是否真的存在,是否您正在尝试合并。

另一件事是检查你的命令

Check here

-以上是与您的答案相关的链接,谢谢!

【讨论】:

以上是关于Android ffmpeg 无法将音频(.wav 文件)与视频(.mp4 文件)合并的主要内容,如果未能解决你的问题,请参考以下文章

将 wav 和 mp4 与 ffmpeg 合并时,音视频同步漂移缓慢

在 django 中使用 FFMPEG 在网络上上传后从视频中提取 WAV 音频文件

求ffmpeg音频压缩代码(wav压缩成wma)

FFMPEG 音频转换命令

ffmpeg sox 音频转换 MP3 转 wav

wav_pcm 的 FFmpeg 奇怪的编解码器 ID