使用C#中的AForge.Video.FFMEG向图像添加文本

时间:2017-07-08 06:23:28

标签: c# video bitmap ffmpeg subtitle

使用AForge.Video.FFMPEG我可以从图片中创建视频。

        string[] files;
        string folderPath = @"FolderPath";
        files = Directory.GetFiles(folderPath).OrderBy(c => c).ToArray();

        VideoFileWriter writer = new VideoFileWriter();
        writer.Open(@"C:folder\new.mp4", imageWidth, imageHeight, 10, VideoCodec.MPEG4);
        for (int j = 0; j < files.Length; j++)
        {
            string fileName = files[j];
            BitmapSource imageBitMap = new BitmapImage(new Uri(fileName, UriKind.RelativeOrAbsolute));
            imageBitMap.Freeze();
            int stride = imageBitMap.PixelWidth * ((imageBitMap.Format.BitsPerPixel + 7) / 8);
            byte[] ImageInBits = new byte[imageBitMap.PixelWidth * imageBitMap.PixelHeight];
            imageBitMap.CopyPixels(ImageInBits, stride, 0);

            Bitmap image = new Bitmap(imageWidth, imageHeight, stride, PixelFormat.Format8bppIndexed, Marshal.UnsafeAddrOfPinnedArrayElement(ImageInBits, 0));

            writer.WriteVideoFrame(image);
            image.Dispose();
        }

我正在尝试使用

将text / String添加到输入图像
    private Bitmap WriteString(Bitmap bmp)
    {
        RectangleF rectf = new RectangleF(70, 90, 90, 50);

        Bitmap tempBitmap = new Bitmap(bmp.Width, bmp.Height);
        Graphics g = Graphics.FromImage(tempBitmap);

        g.DrawImage(bmp, 0, 0);
        g.SmoothingMode = SmoothingMode.AntiAlias;
        g.InterpolationMode = InterpolationMode.HighQualityBicubic;
        g.PixelOffsetMode = PixelOffsetMode.HighQuality;
        g.DrawString("yourText", new Font("Tahoma", 8), Brushes.Red, rectf);
        g.Flush();

        return bmp;
    }

喜欢

            Bitmap image = new Bitmap(imageWidth, imageHeight, stride, PixelFormat.Format8bppIndexed, Marshal.UnsafeAddrOfPinnedArrayElement(ImageInBits, 0));
            Bitmap outputBitmap=WriteString(image);
            writer.WriteVideoFrame(outputBitmap);

如何将字符串写入Image?

在创建视频之前,有没有办法在AForge.Video.FFMEG上添加字幕?

1 个答案:

答案 0 :(得分:2)

私有Bitmap WriteString(Bitmap bmp){

    Bitmap tempBitmap = new Bitmap(bmp.Width, bmp.Height); << create new    
    ..draw on copy..  
    return bmp; <<< return original
}

似乎是错的。