chocolade Ответов: 0

Как я могу установить размер видеозаписи в ffmpeg в соответствии с размером form1 ?


У меня есть класс видео :

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Diagnostics;

namespace Desktop_Recorder
{
    class Ffmpeg
    {
        Process process;

        public void Start(string FileName, int Framerate)
        {
            process = new System.Diagnostics.Process();
            process.StartInfo.FileName = @"D:\ffmpegx86\ffmpeg.exe"; // Change the directory where ffmpeg.exe is.  
            process.EnableRaisingEvents = false;
            process.StartInfo.WorkingDirectory = @"D:\ffmpegx86"; // The output directory  
            process.StartInfo.Arguments = @"-f gdigrab -framerate" + Framerate + "-video_size 1920x1080 -offset_x 240 -offset_y 450 -i desktop -preset ultrafast -pix_fmt yuv420p" + FileName;
            process.Start();
            process.StartInfo.UseShellExecute = false;
            process.StartInfo.CreateNoWindow = true;
            Close();
        }

        public void Close()
        {
            process.Close();
        }
    }
}


В аргументах я устанавливаю местоположение на рабочем столе для записи:

-offset_x 240 -offset_y 450


Но теперь я хочу также установить ширину и высоту того, что нужно записать.
Как прямоугольник. Я хочу записать видео внутри прямоугольника.
Например: прямоугольник находится в местоположении 10,10, а размер прямоугольника равен: 20,20,20,20
Поэтому я хочу записать на рабочий стол только область внутри прямоугольника.

В форме 1 я сделал это в конструкторе:

Ffmpeg fpeg = new Ffmpeg();
            fpeg.Start("test.mp4", 24);


Затем я создаю прямоугольник:

private void TransparentControl1_Paint(object sender, PaintEventArgs e)
        {            
                using (var pen = new Pen(this.ForeColor, 70))
                {
                    e.Graphics.DrawRectangle(pen, 0, 0, this.transparentControl1.Width - 1, this.transparentControl1.Height - 1);
                }
        }


Затем в событии перемещения мыши я получаю местоположение и размер form1: это прямоугольник.


private void TransparentControl1_MouseMove(object sender, MouseEventArgs e)
        {
            Point location = new Point(this.Location.X, this.Location.Y);
            Size size = new Size(this.Width, this.Height);
        }


Что я хочу сделать, так это записать видео в режиме реального времени только внутри прямоугольника.
Не один раз, а в режиме реального времени, поэтому, если я перемещаю form1(прямоугольник) вокруг него, он будет записывать только область внутри form1(прямоугольника).

Что я уже пробовал:

То, что я пробовал, описано в задаче.

0 Ответов