2

現在、libavcodec を使用して、MP4 (MPEG4 および H264) および MPG (MPEG2) ビデオ ファイルを .MP4、.MPG、および .AVI ファイルにトランスコードしようとしています。入力ファイルと同じ/類似した品質の出力ファイルを保持するために、「-sameq」フラグを使用してFFMpeg.exeを使用してこれを以前に行っていました。

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 に答える