FFMPEG (バージョン 2.3.3) と Python を使用してエンコード (VP8 コーデック) し、ビデオを書き込もうとしています。しかし、ビデオのエンコードが終了した後、これらの斜めの緑のストライプ アーティファクトが発生し、その理由がわかりません。
メソッドを使用してテスト目的で合成的に生成するnumpy ndarraysの形式でメモリ内に一連のフレームがあります。
def _generate_test_images(self, samples=50):
'''
Creates an image array gradually changing from black to white
'''
pixelValues = np.linspace(0, 255, samples)
imageList = [np.full((100, 100, 3), pixelValue, dtype=np.uint8)
for pixelValue in pixelValues]
return np.array(imageList)
次に、Python サブプロセス モジュールを使用して FFMPEG へのパイプを開き、画像データを書き込みます。stdin.write と communicate を使用してみましたが、両方とも緑色のストライプの問題が発生します。FFMPEG と対話する方法は次のとおりです。
import subprocess as sp
params = get_params() #provides info like threads, frame size, etc.
command = list()
command.extend(['/opt/ffmpeg/bin/ffmpeg'])
command.extend(['-y'])
command.extend(['-f', 'rawvideo'])
command.extend(['-vcodec', 'rawvideo'])
command.extend(['-s', params['frameSize']])
command.extend(['-pix_fmt', 'bgr24'])
command.extend(['-r', '1'])
command.extend(['-an'])
command.extend(['-i', '-'])
command.extend(['-an'])
command.extend(['-codec:v', 'libvpx'])
command.extend(['-quality', 'good'])
command.extend(['-cpu-used', '0'])
command.extend(['-b:v', params['bitrate']])
command.extend(['-qmin', '4'])
command.extend(['-qmax', '42'])
command.extend(['-maxrate', '1M'])
command.extend(['-bufsize', '2M'])
command.extend(['-threads', params['threads']])
command.extend(['-f', 'webm'])
command.extend([params['target']])
pipe = sp.Popen(command, stdin=sp.PIPE, stdout=sp.PIPE, stderr=sp.PIPE, bufsize=-1)
pipe.communicate(input=frameArray.tostring())
ただし、ビデオのエンコードが完了すると、次のように表示されます。
これは何が原因ですか?