簡體   English   中英

使用AVAssetReader和AVAssetWriter將* .mp3與* .mov文件合並

[英]Merging *.mp3 with *.mov file using AVAssetReader and AVAssetWriter

我能夠使用AVAssetWriter創建一個* .mov文件。 我使用AVCaptureSession獲得的截圖圖像和音頻CMSampleBuffer,並將其傳遞給AVAssetWriter的輸入,並且它工作正常。

現在我想將* .mov文件與來自ipod / iphone音樂庫的音樂合並(很可能是* .mp3)。 所以我最初的想法是使用AVAssetReader從* .mp3和* .mov文件中獲取樣本,並將樣本傳遞給AVAssetWriter。 這會有用嗎? 只是通過閱讀文檔,我認為它可能。

我玩了一下這個想法,但我不能讓它起作用。

我的第一次嘗試是使用2個AVAssetReaders,每個文件一個。 我使用AVAssetReaderAudioMixOutput作為第一個讀取器的輸出,然后使用AVAssetReaderVideoCompositionOutput作為第二個讀取器的輸出。 問題是使用AVAssetReaderVideoCompositionOutput要求您傳遞AVVideoComposition。 我在創建AVVideoComposition / AVMutableVideoComposition時遇到了問題,所以我放棄了這個解決方案。 我不明白為什么我需要傳遞一個AVVideoComposition,我只是想得到電影的樣本。

所以我的第二次嘗試是類似的,但我沒有使用AVAssetReaderVideoCompositionOutput作為第二個閱讀器的輸出,而是使用了2個AVAssetReaderTrackOutput。 所以現在我有2個閱讀器,共有3個輸出,我嘗試使用輸出中的樣本並將其傳遞給AVAssetWriter以創建* .mov文件。 我能夠運行它,沒有錯誤/崩潰。 但是我無法播放生成的* .mov文件。 它的播放持續時間為0.再次,AVAssetReader + AVAssetWriter想法沒有運氣。

所以我的問題:您可以使用AVAssetReader和AVAssetWriter合並兩個文件嗎? 有沒有人試過這樣做並讓它起作用? 我應該只使用AVMutableVideoComposition嗎?

如有必要,我會發布我的代碼。

您可以使用AVAssetReader和AVAssetWriter合並這兩個文件,但這可能比您需要的控制/功率曲線更進一步。

AVAssetExportSession可能更合適,因為您可以在幾行代碼中合並音頻和視頻軌道:

  1. 創建一個包含mp3和mov作為AVCompositionTracks的AVComposition
  2. 使用AVAssetExportSession導出AVComposition。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM