コード例 #1
0
        /// <summary>
        /// When called will populate audioDevices and videoDevices with the machines available DirectShow audio and video devices.
        /// </summary>
        public void GetDirectShowDevices()
        {
            var f = new FFmpeg(ffmpegLocation);

            f.Arguments = " -list_devices true -f dshow -i dummy";
            ProcessDirectShowText(f.Start(true));
        }
コード例 #2
0
ファイル: Feeble.cs プロジェクト: JIMI-SOFTWARE/Feeble
        /// <summary>
        /// Starts a screen stream based on the passed settings.
        /// </summary>
        /// <param name="settings"></param>
        public void Stream(StreamSettings settings)
        {
            if (settings.ffmpegLocation != null)
            {
                settings.ffmpegLocation.Trim();
            }

            StringBuilder args = new StringBuilder();

            if (settings.audioDevice != "" && settings.audioDevice != null)
            {
                args.Append("-f dshow -audio_buffer_size 80 -i audio=\"");
                args.Append(settings.audioDevice);
                args.Append("\" ");
            }

            args.Append("-f gdigrab -framerate ");
            args.Append(settings.frameRate.ToString());
            args.Append(" ");

            if (settings.drawMouse)
            {
                args.Append(" -draw_mouse 1 ");
            }
            else
            {
                args.Append(" -draw_mouse 0 ");
            }

            if (settings.drawCaptureRegion)
            {
                args.Append(" -show_region 1 ");
            }

            switch (settings.recordingRegionType)
            {
            case RecordingRegionType.desktop:

                args.Append(" -offset_x ");
                args.Append(settings.offSetX);
                args.Append(" -offset_y ");
                args.Append(settings.offSetY);

                if (settings.horizontalResolution != 0 && settings.verticalResolution != 0)
                {
                    args.Append(" -video_size ");
                    args.Append(settings.horizontalResolution);
                    args.Append("x");
                    args.Append(settings.verticalResolution);
                    args.Append(" ");
                }

                args.Append("-i desktop -vf scale=trunc(in_w/2)*2:trunc(in_h/2)*2");

                break;

            case RecordingRegionType.window:
                args.Append("-i title=\"");
                args.Append(settings.windowTitle);
                args.Append("\" -vf scale=trunc(in_w/2)*2:trunc(in_h/2)*2");

                break;
            }

            args.Append(" -c:a aac -c:v libx264 -preset:v veryfast -pix_fmt yuv420p -force_key_frames ");
            args.Append("00:02:00 ");
            args.Append(" -b:v ");
            args.Append(settings.videoBitrate);
            args.Append("k");
            args.Append(" -maxrate ");
            args.Append(settings.videoBitrate);
            args.Append("k");
            args.Append(" -bufsize ");
            args.Append(settings.videoBitrate * 2);
            args.Append("k");
            args.Append(" -f flv rtmp://");
            args.Append(settings.twitchBroadcastURL);
            args.Append("/app/");
            args.Append(settings.twitchStreamKey);

            ffmpeg           = new FFmpeg(settings.ffmpegLocation);
            ffmpeg.Arguments = args.ToString();
            ffmpeg.Start(false);
        }
コード例 #3
0
ファイル: Feeble.cs プロジェクト: JIMI-SOFTWARE/Feeble
        /// <summary>
        /// Starts a screen capture based on the passed settings.
        /// </summary>
        /// <param name="settings"></param>
        public void Capture(CaptureSettings settings)
        {
            if (settings.saveLocation != null)
            {
                settings.saveLocation.Trim();
            }
            if (settings.fileName != null)
            {
                settings.fileName.Trim();
            }
            if (settings.ffmpegLocation != null)
            {
                settings.ffmpegLocation.Trim();
            }

            if (settings.saveLocation != null)
            {
                if (!settings.saveLocation.EndsWith("\\"))
                {
                    settings.saveLocation += "\\";
                }
            }

            StringBuilder args = new StringBuilder();

            if (settings.audioDevice != "" && settings.audioDevice != null)
            {
                args.Append("-f dshow -audio_buffer_size 80 -i audio=\"");
                args.Append(settings.audioDevice);
                args.Append("\" ");
            }

            args.Append("-f gdigrab -framerate ");
            args.Append(settings.frameRate.ToString());
            args.Append(" ");

            if (settings.drawMouse)
            {
                args.Append(" -draw_mouse 1 ");
            }
            else
            {
                args.Append(" -draw_mouse 0 ");
            }

            if (settings.drawCaptureRegion)
            {
                args.Append(" -show_region 1 ");
            }

            switch (settings.recordingRegionType)
            {
            case RecordingRegionType.desktop:

                args.Append(" -offset_x ");
                args.Append(settings.offSetX);
                args.Append(" -offset_y ");
                args.Append(settings.offSetY);

                if (settings.horizontalResolution != 0 && settings.verticalResolution != 0)
                {
                    args.Append(" -video_size ");
                    args.Append(settings.horizontalResolution);
                    args.Append("x");
                    args.Append(settings.verticalResolution);
                    args.Append(" ");
                }

                args.Append(" -i desktop -vf scale=trunc(in_w/2)*2:trunc(in_h/2)*2");

                break;

            case RecordingRegionType.window:

                args.Append("-i title=\"");
                args.Append(settings.windowTitle);
                args.Append("\" -vf scale=trunc(in_w/2)*2:trunc(in_h/2)*2");

                break;
            }

            args.Append(" -c:a aac -c:v libx264 -preset:v fast -pix_fmt yuv420p ");

            if (settings.audioDevice != "" && settings.audioDevice != null)
            {
                args.Append(" -af \"aresample=async=1000\" ");
            }

            args.Append(settings.saveLocation);
            args.Append(settings.fileName);

            switch (settings.fileType)
            {
            case FileType.mp4:

                args.Append(".mp4");

                break;
            }

            if (settings.forceOutputFileOverwrite)
            {
                args.Append(" -y");
            }

            ffmpeg           = new FFmpeg(settings.ffmpegLocation);
            ffmpeg.Arguments = args.ToString();
            ffmpeg.Start(false);
        }