avconvを使って生のビデオの解像度を下げようとしています。出力は同じ生のビデオフォーマットを維持する必要があります。後で、非常にうるさくて他の種類の入力を受け入れない別のプログラムに読み込む必要があるためです。今、私は次のことを試しました。
avconv -i myvideo.avi -s 88x72 -vcodec rawvideo myvideo-small.avi
これで縮小されたビデオは正常に生成されますが、フォーマットが正確に同じではないようです。avconvによると、読み込まれた入力は
Stream #0.0: Video: rawvideo, pal8, 352x288, 30 fps, 30 tbr, 30 tbn
生成された出力は
Stream #0.0: Video: rawvideo, yuv420p, 88x72, q=2-31, 200 kb/s, 30 tbn, 30 tbc
どちらも rawvideo ですが、入力は「pal8」で、出力は「yuv420p」です。この 2 つの形式の違いはわかりませんが、出力を入力とまったく同じ形式にする必要があります。どうすればいいでしょうか?
答え1
avconv
現時点では入力に pal8 のみをサポートしているようです。確認するには、次のコマンドを実行します。
$ avconv -pix_fmts |grep pal8
私の出力は次のとおりです:
avconv version v12_dev0-498-g2e09359, Copyright (c) 2000-2014 the Libav developers
built on Dec 5 2014 09:32:02 with gcc 4.8 (Ubuntu 4.8.2-19ubuntu1)
I..P. pal8 1 8
最初の部分の凡例は次のとおりです。
I.... = Supported Input format for conversion
.O... = Supported Output format for conversion
..H.. = Hardware accelerated format
...P. = Paletted format
....B = Bitstream format
つまり、pal8 は読み取りはできますが、書き込みはできません。つまり、ストリームをこの形式に積極的にエンコードする方法はありません。フレームのサイズを変更する場合は、エンコードする必要があります。
pal8 以外に、あなたの「こだわり」のあるソフトウェアが受け入れ、 でエンコードできる別のピクセル形式が見つかった場合はavconv
、次のオプションを使用してその特定の形式を選択できます-pix_fmt
。
avconv -i in.avi -s 88x72 -pix_fmt FORMAT -c:v rawvideo out.avi