目前正在尝试使用libavcodec将MP4(MPEG4和H264)和MPG(MPEG2)视频文件转码为.MP4,.MPG和.AVI文件。 之前使用FFMpeg.exe并使用'-sameq'标志保留了与输入文件相同/类似质量的输出文件。
现在使用av_open_input_file,av_read_frame和avcodec_decode_video2打开,读取和解码输入文件,然后使用avcodec_encode_video分配AVCodecContext并对数据进行编码。但是输出文件的视频质量很差。
这些是我正在使用的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中需要哪些其他设置来提高输出质量?
答案 0 :(得分:0)
在Libavformat库中进一步测试和使用一些不同的调用之后,我发现只要将输出上下文的bit_rate设置为与输入上下文相同,就可以保持相同的质量。 当从高带宽格式(如MPEG2)转码到H264流时,这不是那么方便,因为输出带宽可能比它需要的大得多,但它是一个解决方案,因此我不会从转码文件中丢失质量