我正在開發一個項目,需要打開.mp4文件格式,逐幀讀取它的幀,將它們解碼並使用更好類型的無損壓縮對它們進行編碼並將它們保存到文件中。FFmpeg解碼.mp4視頻文件
如果我對做事的順序有誤,請糾正我,因爲我不是100%確定應該如何做這件事情。從我的理解,它應該是這樣的:
1. Open input .mp4 file
2. Find stream info -> find video stream index
3. Copy codec pointer of found video stream index into AVCodecContext type pointer
4. Find decoder -> allocate codec context -> open codec
5. Read frame by frame -> decode the frame -> encode the frame -> save it into a file
到目前爲止,我遇到了幾個問題。例如,如果我想使用av_interleaved_write_frame()
函數保存一個幀,我無法使用avformat_open_input()
打開輸入.mp4文件,因爲它將填充AVFormatContext
結構的一部分,輸入文件名爲filename
,因此我無法「寫入」文件。我試過使用av_guess_format()
不同的解決方案,但是當我使用dump_format()
轉儲格式時,我什麼也沒得到,所以我找不到有關使用哪個編解碼器的流信息。
所以如果有人有任何建議,我會非常感激他們。先謝謝你。
你們是不是要一個的MP4轉換爲一系列的無損的靜止圖像? – Eugene
嗯,我試圖將.mp4文件拆分爲幀,壓縮它們並通過網絡發送它們。另一方面,這些幀將連接回.mp4文件。 –
這是什麼意思?壓縮無損圖像毫無意義.mp4格式已被設計爲一個高效的容器。這個過程很慢,處理器密集,帶寬效率低下等。 – Eugene