ffmpeg の例、decoding_encoding.c と filtering_video.c に従って、iPhone で撮影した 1 つのビデオ ファイルを処理します。ビデオ ファイル: .mov、ビデオ サイズ。480x272、ビデオ コーデック: H.264/AVC、毎秒 30 フレーム、ビットレート: 605 kbps。
まず、YUV である各フレームを抽出します。YUV を RGB24 に変換し、RGB24 を処理してから、RGB24 を .ppm ファイルに書き込みます。.ppm ファイルが正しいことを示しています。
次に、処理された RGB24 フレームをビデオ ファイルにエンコードする予定です。MPEG は RGB24 の画像フォーマットをサポートしていないため、AV_CODEC_ID_HUFFYUV を使用しました。ただし、出力ビデオ ファイル (18.5 MB を表示) は再生されません。Ubuntu の Movie Player はエラーを主張します: ストリームのタイプを特定できませんでした。VCLでも試してみました。エラー情報がなければ、単に機能しません。
2 番目の質問は次のとおりです。入力ビデオ ファイルから抽出された各フレームについて、filtering_video.c に従って次のようにそのポイントを取得します。
frame->pts = av_frame_get_best_effort_timestamp(frame);
各フレームのポイントを出力すると、以下のように 20 ずつ増加することがわかります。
pFrameRGB_count: 0, frame->pts: 0
pFrameRGB_count: 1, frame->pts: 20
pFrameRGB_count: 2, frame->pts: 40
pFrameRGB_count: 3, frame->pts: 60
ここで、frame は入力ビデオから抽出されたフレームであり、pFrameRGB_count は RGB24 形式で処理されたフレームのカウントです。
なぜ彼らは間違っているのですか?