2017-07-13 19 views
0

我有模板圖像(template.jpg),我在其上繪製一些文本(13.07.2017。),並將其保存到另一個位置(temp/intro.jpg )。編輯並保存在C#中的圖像無法被ffmpeg讀取

比我想用ffmpeg將那個和其他一些圖像轉換成視頻。

如果我運行命令

ffmpeg.exe -f concat -safe 0 -i input.txt -c:v libx264 -vf "fps=25,format=yuv420p" out.mp4 

這些圖像得到濃縮成一個視頻文件。問題在於,通過C#編輯的此圖像在最終視頻中是黑色的。

例如,如果我打開C#在Adobe Fireworks中創建的圖像並保存(CTRL + S)而不更改任何內容,並重新運行ffmpeg命令,那麼一切正常。

這是我使用將文本添加到模板圖像

//INTRO IMAGE CREATION 
Bitmap image = new Bitmap(1280, 720); 
image.SetResolution(image.HorizontalResolution, image.VerticalResolution); 
Graphics g = Graphics.FromImage(image); 
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; 
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic; 
g.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighQuality; 
g.TextRenderingHint = TextRenderingHint.AntiAliasGridFit; 
StringFormat format = new StringFormat() 
{ 
    Alignment = StringAlignment.Near, 
    LineAlignment = StringAlignment.Near 
}; 

//template 
Bitmap back = new Bitmap(Application.StartupPath + @"\Templates\template.jpg"); 
g.DrawImage(back, 0, 0, image.Width, image.Height); 

//date 
string Date = dateIntro.Value.ToString("dd.MM.yyyy."); 
var brush = new SolidBrush(Color.FromArgb(255, 206, 33, 39)); 
Font font = new Font("Ubuntu", 97, FontStyle.Bold, GraphicsUnit.Pixel); 
float x = 617; 
float y = 530; 

g.DrawString(Date, font, brush, x, y, format); 
g.Flush(); 
image.Save(Application.StartupPath + @"\temp\intro.jpg", ImageFormat.Jpeg); 
image.Dispose(); 

圖像創建這樣可以打開和除了轉換爲具有FFMPEG視頻中的任何程序代碼觀察。

在C#中添加文本和保存圖像時是否有任何缺失?

+0

工作正常,我。難道ffmpeg被迫輸出一個你的播放器不喜歡的色彩空間?你可以在製作MP4時用'-vf format = yuv420p'強制它嗎? – Dan

+0

我不明白,但它實際上是通過用'-vf format = yuv420p'替換'-vf「fps = 25,format = yuv420p」''''謝謝。 – mmijic

回答

0

正如丹在他的評論中使用的代碼寫

工作正常,我。難道是ffmpeg被迫輸出你的玩家不喜歡的顏色空間嗎? ?製作MP4時,你可以用-vf format=yuv420p強制它嗎?

使用代碼改變

-vf "fps=25,format=yuv420p" 

-vf format=yuv420p 

解決我的問題