簡體   English   中英

如何並排快速合並多個視頻4

[英]How to merge multiple videos side by side swift 4

我正在嘗試將多個視頻合並到一個同時播放的視頻中。 我的第一個問題是,在服務器或用戶電話上進行合並更好嗎? 以及如何快速合並視頻? 我試圖通過谷歌搜索找到解決方案,但很快就找不到任何解決方案。 任何幫助,將不勝感激

最好在服務器或用戶的電話上進行合並?

這取決於,真的。 服務器通常很昂貴,但是它們在支持方面給您帶來了更多的靈活性,而且您只需要創建一次功能,而不是每個平台一次。 如果可能,我會一直在設備上進行操作。 因此,就您而言,“設備”似乎是必經之路。

如何在Swift上合並視頻? 我試圖通過谷歌搜索找到解決方案,但是我在Swift上找不到任何解決方案。

Swift本身將無法執行您要求的操作。 您將需要允許此類事情的工具/框架。 您可以在iOS上找到它們。

首先,您應該嘗試指定要執行的操作。 單個視頻(在大多數情況下)包含視頻和音頻軌道。 從標題中我可以推斷出視頻軌道應該並排放置,而沒有關於音頻的信息。 此外,還有一個問題是如何對不具有相同視頻分辨率的視頻進行“並排”。 有幾種可能性。 還有一個問題是,如果不是所有視頻的長度都相同,會發生什么?

在您的情況下,視頻部分可能應該歸結為一定幀速率的圖像。 對於應該在給定時間為每個視頻獲取UIImage iOS,將圖像縫合在一起,然后將新圖像插入縫合的視頻文件中。 因此,您要尋找的是:

  • 在特定時間從視頻獲取UIImage (嘗試此操作
  • 合並圖像一起看起來很有希望在這里
  • 創建一個從視頻UIImage S可需要更多的工作,但檢查

當然,您仍然需要決定選擇哪種輸出視頻。 如何處理不同大小的視頻,以及如何處理不同長度的視頻。 但這只是決定,可以在UIImage級別上完成。

您將需要確定要使用的幀速率。 我猜沒有理由不只使用固定的30FPS,這意味着您要迭代CMTimeMake(i, 30) ,其中i[0, videoDuration*30]范圍內。

剩下的唯一一件事是音頻部分,您可能會在這里找到一些線索。

因此,總體高級代碼應類似於:

func mergeVideos(urls: [URL]) -> URL {
    let overallSize: CGSize = sizeForStichedVideos(urls: urls)
    let overallDuration: TimeInterval = longestVideoFrom(urls: urls)
    let frameRate: Int = decideFrameRateForVideos(urls: urls)

    let stichedVideo: VideoObject = VideoObject(size: overallSize, duration: overallDuration, frameRate: frameRate)

    for frameIndex in 0..<Int(ceil(overallDuration))*frameRate {
        let time = CMTime(value: frameIndex, timescale: frameRate)
        let images: [UIImage?] = imagesFromVideos(urls: urls, at: time)
        let stichedImage: UIImage = stitchImages(images)
        stichedVideo.appendVideoSample(withImage: stichedImage, at: time)
        // TODO: append audio samples
    }
    stichedVideo.finalize()

    return stichedVideo.outputURL
}

玩得開心。

暫無
暫無

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

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