2

目前正在尝试使用 libavcodec 将 MP4(MPEG4 和 H264)和 MPG (MPEG2) 视频文件转码为 .MP4、.MPG 和 .AVI 文件。以前使用 FFMpeg.exe 并使用“-sameq”标志完成此操作,以保留与输入文件相同/相似的质量输出文件。

现在使用 av_open_input_file、av_read_frame 和 avcodec_decode_video2 打开、读取和解码输入文件,然后分配一个 AVCodecContext 并使用 avcodec_encode_video 对数据进行编码。但是输出文件的视频质量很差。

这些是我正在使用的 AVCodecContext 设置?:-

codecContextOutput->width = SAME AS INPUT FILE;
codecContextOutput->height = SAME AS INPUT FILE;
codecContextOutput->pix_fmt = SAME AS INPUT FILE;
/* frames per second */
AVRational ar; 
ar.num = 1;
ar.den = 25;
codecContextOutput->time_base = ar;
codecContextOutput->gop_size = 10; /* emit one intra frame every ten frames */
codecContextOutput->max_b_frames=1;
codecContextOutput->bit_rate = 480000;

有人知道模拟“-sameq”设置所需的额外设置或 AVCodecContext 中需要哪些额外设置来提高输出质量?

4

1 回答 1

0

在进一步测试和使用 Libavformat 库中的一些不同调用之后,我发现只要将输出上下文的 bit_rate 设置为与输入上下文相同,就可以保持相同的质量。当从 MPEG2 等高带宽格式转码到 H264 流时,这并不是那么方便,因为输出带宽可能比它需要的大得多,但它是一种解决方案,这样我就不会从转码文件中丢失质量.

于 2011-06-15T09:56:59.583 回答