2014-01-25 52 views
-2

我想用mp4,mp3,avi和wmv等格式將歌曲結合到一個單獨的文件中,如同在我的服務器中那樣,我只有JDK環境,到目前爲止我正在使用核心Java文件操作代碼。如下。如何在覈心Java代碼中結合兩首歌曲?

String str="E:\\Movies\\Dark Skies (2013)\\Dark.mp4"; 

    String ftr="F:\\CRS\\stv.mp4"; 

    File file=new File(str); 
    File Kile=new File(ftr); 

    FileInputStream fis=new FileInputStream(file); 

    FileOutputStream fos=new FileOutputStream(Kile); 

    int luffersize=102400000; 
    byte[] luffer=new byte[luffersize]; 

    int lenght=(int) fis.available(); 


    if ((fis.read(luffer)) != 0) { 
      try { 
       fos.write(luffer, 0, lenght); 
       System.out.println("working"); 

      } catch (IOException e) { 

       e.printStackTrace(); 
      }finally{ 
       fis.close(); 
       fos.close(); 

      } 
     } 
} 
+1

不同的文件類型包含不同的信息。你不能簡單地把所有的字節都放到一個文件中,並希望它能正常工作。您需要找到一個編寫的庫來適當地修改MP3/MP4/AVI/etc文件並使用它。 –

+2

「結合」是什麼意思? 1.混合他們? 2.一個接一個地放? 3.或者只是把它們放在一個容器中(比如在ZIP中)?如果您選擇1或2,您需要先仔細研究MP3格式的規格。 –

+0

合併文件意味着「在單個文件中寫入兩個文件的字節流,並在播放音頻或視頻時應該一個接一個地播放」 –

回答

1

下面是一些代碼,我刮起來演示如何連接(順序合併)兩個文件一起。

這並沒有考慮到MP4文件格式。我不熟悉MP4,但MP3只是一系列帶有任意ID3頭的512字節塊。如果你可以去掉第二個文件的標題,兩個音樂文件的通用連接(即「cat song1.mp song2.mp3> newsong.mp3」)確實可以工作。但我對MP4並不熟悉,我很確定它可以支持各種編解碼器。因此,YMMV採用這種解決方案。否則,請使用編解碼器庫進行正式解析和流式傳輸。

在任何情況下,這裏的一些示例代碼,將兩個文件結合起來:

public void CombineFiles(String filename1, String filename2, String filenameOuput) throws IOException 
{ 
    FileInputStream stream1 = new FileInputStream(filename1); 
    FileInputStream stream2 = new FileInputStream(filename2); 
    FileOutputStream streamOut = new FileOutputStream(filenameOuput); 
    FileInputStream stream = stream1; 

    byte [] buffer = new byte[8192]; // 8K temp buffer should suffice 

    while (true) 
    { 
     int bytesread = stream.read(buffer); 
     if (bytesread != -1) 
     { 
      streamOut.write(buffer, 0, bytesread); 
     } 
     else 
     { 
      // handle end of file and moving to the next file 
      if (stream == stream2) 
       break; 
      else 
       stream = stream2; 
     } 
    } 

    streamOut.close(); 
    stream1.close(); 
    stream2.close(); 
} 
+0

感謝上面的代碼SELBIE! 上面給出的代碼工作完美地結合了mp3文件(通常是音頻歌曲), ,但在mp4格式(視頻文件)結合時,它正確地寫入第一個fileinputstream,但無法在同一文件中寫入第二個文件流。任何幫助MP4或AVI(視頻格式) 文件。在此先感謝 –

+0

任何幫助串聯視頻文件(MP4格式)通過Java代碼!在此先感謝 –

+0

@IrfanPervez - 如果您喜歡複選框,請給它一個upvote。 MP3既是一種編解碼器,又是一種容器格式。它對基本的分割和連接起到很好的作用。但MP4只是一種容器格式。兩個不同的MP4文件可以是完全不同的編碼和流類型。因此,將以720p錄製的H264視頻文件與僅有AAC音頻的另一個文件連接起來是什麼意思?您需要找到一個MP4解析/寫入庫,以便您讀取和寫入原始編解碼器流。另一個人發佈了,然後收回了這個鏈接:https://code.google.com/p/mp4parser/ – selbie