我正在开发一个项目,需要打开.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