2014-11-04 47 views
1

我試圖編碼(VP8編解碼器)並使用FFMPEG(版本2.3.3)和Python編寫視頻。但是,在完成對視頻編碼後,我得到這些對角線綠色條紋文物,但我找不到原因。使用FFMPEG和Python編碼視頻時出現綠色條紋文物

我有幀存儲器中的序列中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和通信,但都產生綠色條紋問題。下面是我如何與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()) 

然而,當我的視頻完成編碼,這是我所看到的:

Image with green stripe artifacts

是什麼原因造成的?

+1

這通常與寬度不能被4或8或其他類似數字整除。該模式看起來很正常,所以可能沒有隨機垃圾進入。但你也可以檢查它,例如換行符/回車符由於行結束規則而進入/正在進行轉換。 – njahnke 2014-11-05 03:13:13

+0

寬度可以由八整除我的問題。非常感謝。如果你願意,你可以正式回答這個問題,我會給你正確的答案。 – trianta2 2014-11-05 18:27:08

回答

3

這通常與寬度不能被4或8或其他類似數字整除。