[英]Encoding Video and Audio together is much slower than encoding each separately
使用 Media Foundation 分別編碼音頻和視頻,然后使用 ffmpeg 進行多路復用,這比在 Media Foundation 中同時編碼音頻和視頻要快得多。 我很想知道為什么?
我正在編碼 aac 音頻和 h264 視頻; 輸入到編碼器的視頻以可變幀速率(非常低)。 如果視頻輸入處於恆定幀速率(與輸出相同),我得到的速度可能是我所期望的。
Notably, if I write all the audio(video) stream then the video(audio) stream, all the time encoding is taken writing the first stream, and the second stream is written near instantly.
有人可以告訴我發生了什么嗎?
首先,您必須使用 ffmpeg 進行所有工作,“Media Foundation”是一個微軟應用程序,大多數應用程序(實際上是 100%)使用 ffmpeg 進行編碼等。
您可以為音頻和視頻編寫代碼,(分開),然后將所有視頻和音頻組合在一起。
例如,我們有一個名為“pagameloquemedebes.avi”的獨特文件
ffmpeg -i "pagameloquemedebes.avi"
讓我們展示文件的 map 和所有流 stream 0:0 mpeg 視頻 stream 0:1 WMA 音頻
好的,讓 go 創建一個 h264 視頻和 acc 音頻,我們將創建一個文件夾“paso1”
對於視頻編碼-an audio none -sn subtitle none -dn data none etc...如果你想要相同的 fps,請使用 -r 24 (fps) ffmpeg -i pagameloquemedebes.avi -map 0:0 -c:v libx264 -預設非常快 -an -sn -dn -map_metadata -1 -map_chapters -1./paso1/video.mp4
現在音頻
ffmpeg -i pagameloquemedebes.avi -map 0:1 -c:a aac -vn -sn -dn -map_metadata -1 -map_chapters -1 ./paso1/audio.aac
現在在文件夾 paso1 中,我們運行
ffmpeg -i video.mp4 -c:a aac -i audio.aac -c copy -map 0:v -map 1:a:0 disposition:a:0 default -strict -2 -sn -dn -map_metadata -1 -map_chapters -1 -movflags faststart end_newfile.mp4
享受你的工作,問候
為什么這個 API 越野車可能不是一個很好的問題。
我決定用CreateProcess
調用 ffmpeg 來進行多路復用。
我可能需要學會期待這種事情,而不是擔心添加 ffmpeg 依賴項,尤其是在實現如此微不足道的情況下。
多路復用器可能會限制輸入的視頻分支,因為生成的文件至少在默認設置下具有將與關閉時間點相關的視頻和音頻數據打包在一起的布局。
默認情況下,接收器編寫器的 IMFSinkWriter::WriteSample 方法通過阻塞調用線程來限制數據速率。 這可以防止應用程序太快地交付樣本。 要禁用此行為,請在創建接收器寫入器時將
MF_SINK_WRITER_DISABLE_THROTTLING
屬性設置為 TRUE。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.