9

Firewire天文学カメラからグレースケールビデオストリームが出ています。FFmpegを使用してビデオストリームを圧縮したいのですが、MPEG1VIDEOコーデックのシングルバイトピクセル形式を受け入れません。FFmpeg APIを使用して、グレースケールビデオフレームをFFmpegで受け入れられるフレーム形式に変換するにはどうすればよいですか?

4

4 に答える 4

11

MPEG-1はYUVのみを受け入れるため、フレームをYUV形式に変換する必要があります。SwsContextを呼び出して作成した構造を使用してsws_getContext()から、を使用しますsws_scale()

于 2011-12-02T08:34:22.123 に答える
8

グレースケールとYUVの関係は非常に単純です-YUVの「Y」はグレースケールとまったく同じです。

グレースケールをYUVに変換する簡単な方法は次のとおりです。

スケール間の変換については、次のリファレンスを参照してください

によると :

Y =(0.257 * R)+(0.504 * G)+(0.098 * B)+ 16
Cr = V =(0.439 * R)-(0.368 * G)-(0.071 * B)+ 128
Cb = U =-(0.148 * R)-(0.291 * G)+(0.439 * B)+ 128

今:
グレースケール画像(W)の場合:

R = W;
G = W;
B = W;

これを維持する:

Y [i] = 0.895 * W [i]+16。
U [i] = 128(固定値)
V [i] = 128(固定値)

実際には、ほぼ同じY [i] =W[i]を使用できます。128の値は、0〜256の符号付きから符号なしへの変換のスケーリング/シフトされたベースの「0」を表します。

したがって、保持する必要があるのは、この他のメモリ領域YとUを固定値として作成し、このフレームをffmpegに提供することだけです。

よくわかりませんが、FFMPEGに適切に伝えることで、これは内部でのみ行われます。あなたが提供するRGB値も同様にカバーされています。これもMPEGにネイティブではありません。

それで、これを可能にするFFMPEGのAPIを探してください。

ボーナス
古き良き時代には白黒(グレースケール)のテレビがあったことを忘れないでください。新しいカラーテレビセットは、古いものに準拠する必要があるため、色情報はUとVの形式で追加されます(YCbCrとも呼ばれます-CbとCrはクロマと呼ばれ、それぞれUVの線形変化ですこのコンテキスト)。

于 2011-12-16T03:50:25.447 に答える
0

単に「色相」フィルターを使用する場合に機能します。このような:

ffmpeg -i inputfile.ogv -vf hue=s=0 outputfile-unsat.ogv
于 2014-10-26T17:17:12.943 に答える
-2

ffmpegに問題がある場合は、最初に最新バージョンをダウンロードする必要があります。これにより、いくつかのバグが修正されます。

https://ffmpeg.org/download.html#build-windows
于 2021-06-28T18:47:17.947 に答える