FFmpeg解码.mp4视频文件

Sir*_*Lot 2 c video mp4 ffmpeg libavcodec

我正在开发一个需要打开.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
Run Code Online (Sandbox Code Playgroud)

到目前为止,我遇到了几个问题.例如,如果我想使用av_interleaved_write_frame()函数保存框架,我无法打开输入.mp4文件,avformat_open_input()因为它将使用输入文件名填充结构的filename一部分,AVFormatContext因此我无法"写入"该文件.我尝试过不同的解决方案,av_guess_format()但是当我使用i转储格式时,我dump_format()什么都没得到,所以我找不到关于它使用哪种编解码器的流信息.

所以如果有人有任何建议,我会非常感激他们.先感谢您.

Ron*_*tje 5

请参阅多路复用文档中的"详细说明" .您:

  1. 设置则将ctx-> oformat使用av_guess_format
  2. 使用avio_open2设置ctx-> pb
  3. 为输出文件中的每个流调用avformat_new_stream.如果要重新编码,可以将输入文件的每个流添加到输出文件中.
  4. 调用avformat_write_header
  5. 在循环中调用av_interleaved_write_frame
  6. 调用av_write_trailer
  7. 关闭文件(avio_close)并清除所有已分配的内存