2015-11-02 57 views
1

我用的ffmpeg合併MP4和PNG,我使用兩種方式:合併與ffmpeg的MP4缺少png格式音頻

  1. 使用命令

    字符串CMD = 「-y -i」 + in.mp4 +「-i」+ in.png +「-filter_complex [0:v] [1:v] overlay = 0:0 [out] -preset veryfast -map [out] -map 1:0 -map 0:0 - 編解碼器:副本「+ out.mp4;

輸出文件中丟失的音頻:

  • 使用命令:

    字符串CMD = 「-y -i」 + in.mp4 +「 -i「+ in.png +」-filter_complex [0:v] [1:v] overlay = 0:0 [out] -preset veryfast -map [out] -map 0:a -codec:copy「+ out .MP4;

  • =>有音頻,但一些mp4文件不能與PNG文件 日誌合併:流圖「0:」無流相匹配。

    我的命令在這裏丟失了什麼?

    +0

    你能給出ffprobe的完整結果嗎? –

    +0

    您應該顯示每個命令的完整控制檯輸出/日誌。否則無法提供答案。 – LordNeckbeard

    +0

    我在這裏發現問題。如果視頻沒有聲音,我們不能將地圖0:a(Log:流圖'0:a'不匹配任何流)。現在,我檢查以檢測此視頻是否有音頻或不使濾波器正確。但它會讓更多時間。 – phongvan

    回答

    2

    首先,您需要使用ffmpeg檢查mp4信息。然後你會選擇命令0:一或不

      ffmpeg.execute(("-i " + filepath).split(" "), new ExecuteBinaryResponseHandler() { 
            boolean hasAudio = false; 
    
            @Override 
            public void onProgress(String s) { 
    
             if (s.matches("^\\s+Stream.+Audio.+")) { 
              hasAudio = true; 
             } 
            } 
    
            @Override 
            public void onFinish() { 
    
            } 
           }); 
    
    +0

    感謝您的回答,此解決方案將可行,但我們必須使用ffmpeg運行兩個命令。 – phongvan

    2

    你可以用一個命令做到這一點:

    String cmd = "-y -i " + in.mp4 + " -i " + in.png + " \ 
           -filter_complex [0:v][1:v]overlay=0:0[out] -preset veryfast \ 
           -map [out] -map 0:a? -codec:a copy " + out.mp4; 
    

    ? teels FFMPEG僅當它存在映射流。

    +0

    很好的答案,我會檢查它。謝謝 – phongvan