ffmpeg无法读取用C#编辑和保存的图像

时间:2017-07-13 12:54:45

标签: c# image video ffmpeg

我有模板图像(template.jpg),我在上面绘制一些文本(13.07.2017。),然后将其保存到另一个位置(temp / intro.jpg)。

我想用ffmpeg将其和其他一些图像转换为视频。

如果我运行命令

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

这些图像集中在一个视频文件中。问题是通过C#编辑的图像在最终视频中是黑色的。

例如,如果我在Adobe Fireworks中打开C#创建的图像并保存它(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#中添加文本和保存图像时是否有任何遗漏?

1 个答案:

答案 0 :(得分:0)

丹在评论中写道

  

使用该代码可以正常使用我。可能是ffmpeg正在存在   被迫输出你的播放器不喜欢的色彩空间?你能   在制作MP4时强制它-vf format=yuv420p

更改

-vf "fps=25,format=yuv420p"

-vf format=yuv420p

解决了我的问题