我有模板图像(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#中添加文本和保存图像时是否有任何遗漏?
答案 0 :(得分:0)
丹在评论中写道
使用该代码可以正常使用我。可能是ffmpeg正在存在 被迫输出你的播放器不喜欢的色彩空间?你能 在制作MP4时强制它
-vf format=yuv420p
更改
-vf "fps=25,format=yuv420p"
到
-vf format=yuv420p
解决了我的问题