【发布时间】:2016-06-16 18:11:35
【问题描述】:
我正在开发一个项目,该项目需要打开 .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 转换为一系列无损静止图像?
-
嗯,我正在尝试将 .mp4 文件拆分为帧,压缩它们并通过网络发送它们。在另一端,这些帧将被连接回一个 .mp4 文件。
-
这有什么意义?并且压缩无损图像是没有意义的。mp4格式已经被设计为一个高效的容器。这个过程很慢,处理器密集,带宽效率低等。
-
这是因为我需要找出多个编解码器之间的差异,主要目标是将 4k 视频分割成帧,压缩它们并通过 1Gbit 连接发送。所以我需要找出哪个编解码器是最好的压缩方式。作为一个例子,我有我需要做实验的高清文件。
标签: c video ffmpeg mp4 libavcodec