2012-03-08 66 views
3

在Linux下運行Matlab R2011b,我正在使用VideoWriter生成視頻。我的代碼如下所示:在導出視頻時Axes背景顏色渲染不正確

h_fig = figure(); 
set(h_fig, 'Visible', 'on') 
set(h_fig, 'Position', [300,200,898,720]); 
h_axs = axes('Parent', h_fig); 
set(h_axs,'nextplot','replacechildren'); 
vidObj = VideoWriter('leadfollow3.avi'); 
... 
for i = 1:n 
    h_axs_a = subplot(3,2,[1 2]); 
    plot(h_axs_a, x, a_mag_lead, x, a_mag_follow, 'r'); 
    ... 

該圖由幾個子圖組成。第一個子圖呈現良好,但對於其餘的圖形,軸背景保持灰色而不是白色。更糟的是,對於某些幀,它會切換到白色,導致視頻中出現惱人的閃爍(see example video here)。視頻編寫器循環外部的單個繪圖不顯示此工件。什麼可能是解決這個問題的最佳策略?

編輯:在我有機會在Windows上嘗試此代碼後,似乎該問題僅限於Linux。儘管如此,我仍然非常想知道一個可能的解決方案,因爲我沒有經常訪問可以進行計算的Windows框。

+3

在Linux上,我更喜歡將每個幀導出爲png,並使用ffmpeg進行壓縮。 – Memming 2012-03-08 14:06:57

+0

這似乎是一個常見的主題......我簡單地嘗試了這種方法,它有點慢,導致幀率不正確;我想我會再試一次。 – 2012-03-08 20:30:12

+0

我更喜歡保存爲jpge,並使用滑稽命令'cat * .jpg> out.mjpeg'創建mjpeg - 然後您可以使用ffmpeg將其轉換爲您想要的。與@Memming同樣的故事,但我用mjpeg開頭的ffmpeg比嘗試傳遞瘋狂的參數更好。 – alexplanation 2012-07-11 15:27:06

回答

0

您錯過了將圖形轉換爲圖像並將其發送給VideoWriter的關鍵代碼行,因此很難獲得很多幫助。但是,如果您還沒有這樣做,我建議您使用export_fig來完成此任務。