How to set video and audio recording options for the output video produced by screen video recording using Screen Capturing SDK

The sample codes below show the console application to record screen into video with command line parameters to set:

Usage : CaptureScreenConsole.exe <outfilename> [left] [top] [width] [height] [fps] [v-codec] [a-codec] [audioline]n”);
[left, top, width, height] is the rectangle to be captured.
[v-codec] is the index of the video codec in the list to use.
[a-codec] is the index of the audio codec in the list to use.
[audioline] is the index of the audio line in the list to capture from.
If either codec is unspecified, it defaults to ‘Microsoft Video 1’ and ‘GSM 6.10’
If audioline is unspecified, it uses the microphone
To capture the currently playing output, select the stereo, mono or wave mix.

 

1) Visual Basic .NET

Create new VB.NET Console project in Visual Studio. Click Project | Add Reference.. and add the reference to Bytescout Screen Capturing Lib on the COM tab and click OK. Then use the code snippet below:

Imports System
    Imports System.Collections.Generic
    Imports System.Text
    Imports System.Globalization
    Imports System.Threading
    Imports System.Runtime.InteropServices

    Imports BytescoutScreenCapturingLib

    Module Module1
      Public Class Win32Interop
        <dllimport("crtdll.dll")> _
        Public Shared Function _kbhit() As Integer
        End Function
      End Class

      Sub Main(ByVal args As String())
        Dim capturer As New CapturerClass()

        If args.Length < 1 Then
          usage(capturer)
          Exit Sub
        End If

        capturer.OutputFileName = args(0)
        capturer.CapturingType = CaptureAreaType.catRegion

        setParams(args, capturer)

        Try
          capturer.Run()
          Console.WriteLine("Starting capture - Hit a key to stop ...")

          Dim s As String = capturer.CurrentVideoCodecName
          Console.WriteLine(String.Format("Using video compressor - {0}", s))

          s = capturer.CurrentAudioCodecName
          Console.WriteLine(String.Format("Using audio compressor - {0}", s))

          s = capturer.CurrentAudioLineName
          Console.WriteLine(String.Format("Using audio input line - {0}", s))

          Dim i As Integer = 0
          Dim spin As String = "|/-"
          While Win32Interop._kbhit() = 0
            Console.Write(String.Format(vbCr & "Encoding {0}", spin(i)))
            i = i + 1
            i = i Mod 4
            Thread.Sleep(50)
          End While

          capturer.Stop()
          Console.Write(vbLf & "Done")
          Console.Read()
        Catch generatedExceptionName As Exception
          Console.WriteLine(capturer.LastError)
        End Try
      End Sub

      Private Sub usage(ByVal capturer As CapturerClass)
        Console.WriteLine("Usage : CaptureScreenCSharp.exe <outfilename> [left] [top] [width] [height] [fps] [v-codec] [a-codec] [audioline]" & vbLf)
        Console.WriteLine("[left, top, width, height] is the rectangle to be captured")
        Console.WriteLine("[v-codec] is the index of the video codec in the list to use.")
        Console.WriteLine("[a-codec] is the index of the audio codec in the list to use.")
        Console.WriteLine("[audioline] is the index of the audio line in the list to capture from")
        Console.WriteLine("If either codec is unspecified, it defaults to 'Microsoft Video 1' and 'GSM 6.10'")
        Console.WriteLine("If audioline is unspecified, it uses the microphone")
        Console.WriteLine("To capture the currently playing output, select the stereo, mono or wave mix")

        Console.WriteLine("Installed Video Codecs (Note : Not all of them may work)")

        For i As Integer = 0 To capturer.VideoCodecsCount - 1
          Dim name As String = capturer.GetVideoCodecName(i)
          Console.WriteLine(String.Format("  {0}. {1}", i, name))
        Next

        Console.WriteLine(vbLf & "Installed Audio Codecs (Note : Not all of them may work)")
        For i As Integer = 0 To capturer.AudioCodecsCount - 1
          Dim name As String = capturer.GetAudioCodecName(i)
          Console.WriteLine(String.Format("  {0}. {1}", i, name))
        Next

        Console.WriteLine(vbLf & "Audio input lines")
        For i As Integer = 0 To capturer.AudioLinesCount - 1
          Dim name As String = capturer.GetAudioLineName(i)
          Console.WriteLine(String.Format("  {0}. {1}", i, name))
        Next
      End Sub

      Private Sub setParams(ByVal args As String(), ByVal capturer As CapturerClass)
        If args.Length > 1 Then
          Dim left As Integer = Integer.Parse(args(1))
          capturer.CaptureRectLeft = left
        End If

        If args.Length > 2 Then
          Dim top As Integer = Integer.Parse(args(2))
          capturer.CaptureRectTop = top
        End If

        If args.Length > 3 Then
          Dim width As Integer = Integer.Parse(args(3))
          capturer.CaptureRectWidth = width
        End If

        If args.Length > 5 Then
          Dim height As Integer = Integer.Parse(args(5))
          capturer.CaptureRectHeight = height
        End If

        If args.Length > 6 Then
          Dim fps As Single = Single.Parse(args(6), CultureInfo.InvariantCulture)
          capturer.FPS = fps
        End If

        If args.Length > 7 Then
          Dim vCodec As Integer = Integer.Parse(args(7))
          capturer.CurrentVideoCodec = vCodec
        End If

        If args.Length > 8 Then
          Dim aCodec As Integer = Integer.Parse(args(8))
          capturer.CurrentAudioCodec = aCodec
        End If

        If args.Length > 9 Then
          Dim aLine As Integer = Integer.Parse(args(9))
          capturer.CurrentAudioLine = aLine
        End If
      End Sub

    End Module</outfilename></dllimport("crtdll.dll")>

2) Visual C# .NET

Create new C# Console project in Visual Studio. Click Project | Add Reference.. and add the reference to Bytescout Screen Capturing Lib on the COM tab and click OK. Then use the code snippet below:

using System;
using System.Collections.Generic;
using System.Text;
using System.Globalization;
using System.Threading;
using System.Runtime.InteropServices;

using BytescoutScreenCapturingLib;

namespace CaptureScreenCSharp
{
  public class Win32Interop
  {
    [DllImport("crtdll.dll")]
    public static extern int _kbhit();
  }

  class Program
  {
    static void Main(string[] args)
    {
      CapturerClass capturer = new CapturerClass();

      if (args.Length < 1)
      {
        usage(capturer);
        return;
      }

      capturer.OutputFileName = args&#91;0&#93;;
      capturer.CapturingType = CaptureAreaType.catRegion;
      setParams(args, capturer);

      try
      {
        capturer.Run();
        Console.WriteLine("Starting capture - Hit a key to stop ...");

        string s = capturer.CurrentVideoCodecName;
        Console.WriteLine(string.Format("Using video compressor - {0}", s));

        s = capturer.CurrentAudioCodecName;
        Console.WriteLine(string.Format("Using audio compressor - {0}", s));

        s = capturer.CurrentAudioLineName;
        Console.WriteLine(string.Format("Using audio input line - {0}", s));

        int i = 0;
        string spin = "|/-\";
        while (Win32Interop._kbhit() == 0)
        {
          Console.Write(string.Format("rEncoding {0}", spin&#91;i++&#93;));
          i %= 4;
          Thread.Sleep(50);
        }

        capturer.Stop();
        Console.Write("nDone");
        Console.Read();
      }
      catch (Exception)
      {
        Console.WriteLine(capturer.LastError);
      }
    }

    static void usage(CapturerClass capturer)
    {
      Console.WriteLine("Usage : CaptureScreenCSharp.exe <outfilename> [left] [top] [width] [height] [fps] [v-codec] [a-codec] [audioline]n");
      Console.WriteLine("[left, top, width, height] is the rectangle to be captured");
      Console.WriteLine("[v-codec] is the index of the video codec in the list to use.");
      Console.WriteLine("[a-codec] is the index of the audio codec in the list to use.");
      Console.WriteLine("[audioline] is the index of the audio line in the list to capture from");
      Console.WriteLine("If either codec is unspecified, it defaults to 'Microsoft Video 1' and 'GSM 6.10'");
      Console.WriteLine("If audioline is unspecified, it uses the microphone");
      Console.WriteLine("To capture the currently playing output, select the stereo, mono or wave mix");
      
      Console.WriteLine("Installed Video Codecs (Note : Not all of them may work)");

      for (int i = 0; i < capturer.VideoCodecsCount; i++)
      {
        string name = capturer.GetVideoCodecName(i);
        Console.WriteLine(string.Format("  {0}. {1}", i, name));
      }

      Console.WriteLine("nInstalled Audio Codecs (Note : Not all of them may work)");
      for (int i = 0; i < capturer.AudioCodecsCount; i++)
      {
        string name = capturer.GetAudioCodecName(i);
        Console.WriteLine(string.Format("  {0}. {1}", i, name));
      }

      Console.WriteLine("nAudio input lines");
      for (int i = 0; i < capturer.AudioLinesCount; i++)
      {
        string name = capturer.GetAudioLineName(i);
        Console.WriteLine(string.Format("  {0}. {1}", i, name));
      }
    }

    static void setParams(string&#91;&#93; args, CapturerClass capturer)
    {
      if (args.Length > 1)
      {
        int left = int.Parse(args[1]);
        capturer.CaptureRectLeft = left;
      }

      if (args.Length > 2)
      {
        int top = int.Parse(args[2]);
        capturer.CaptureRectTop = top;
      }

      if (args.Length > 3)
      {
        int width = int.Parse(args[3]);
        capturer.CaptureRectWidth = width;
      }

      if (args.Length > 5)
      {
        int height = int.Parse(args[5]);
        capturer.CaptureRectHeight = height;
      }

      if (args.Length > 6)
      {
        float fps = float.Parse(args[6], CultureInfo.InvariantCulture);
        capturer.FPS = fps;
      }

      if (args.Length > 7)
      {
        int vCodec = int.Parse(args[7]);
        capturer.CurrentVideoCodec = vCodec;
      }

      if (args.Length > 8)
      {
        int aCodec = int.Parse(args[8]);
        capturer.CurrentAudioCodec = aCodec;
      }

      if (args.Length > 9)
      {
        int aLine = int.Parse(args[9]);
        capturer.CurrentAudioLine = aLine;
      }
    }
  }
}</outfilename>