(Notes) Notes (2011 год)

SimpleVideoConverter - простой видеоконвертер на платформе FFMPEG

Eclipse

Этот простейший из возможных видеоконвертеров я сделал на OpenSource платформе FFMPEG. Эта старейшая бесплатная платформа видеоконвертации лишь немногим уступает платным платформам (Adobe, MediaCoder и прочим)

Реальные медиаконвертеры устроены существенно сложнее и содержат десятки тысяч строк кода - выполняются на отдельных виртуальных машинах (чтобы не загружать процессоры web-сервера и sql-сервера), опрашивают очередь запросов на конвертацию, анализируют форматы поступивших на конвертацию файлов и передают запросы собственно сервису видеоконвертации. А эта программа устроена самым минималистским образом - конвертация производится прямо в процессе рабочего стола. Такой минимализм и простота позволяют легко расширять эту прогу в любую сторону.

Несмотря на свою простоту - программа работоспособна и вполне подходит для создания домашней видеотеки.

Учет всех отконвертированных роликов ведется в базе SqLite.


Платформу видеоконвертации FFMPEG (для Win) я установил отсюда - http://ffmpeg.zeranoe.com/builds/ и путь к FFMPEG (D:\FFMPEG\ffmpeg-git-e01f478-win64-shared\bin\) надо указать в параметре конвертера FFMPEG_Path.

В параметре коевертера FFMPEG_Parm указывается шаблон параметров конвертации (по умолчанию я указал -ar 22050 -ab 32K -vcodec libx264 -f flv -b 700k -s XXXxYYY -y).

В параметре конвертера OutDir указывается каталог с итоговыми сконвертированными роликами, а в пераметре MediaDB указывается сктрока коннекта к базе SqLite (в инсталяции у меня вписан путь Data Source="G:\Projects\All_Freeware\SimpleVideoConverter\SimpleVideoConverter\media.s3db";UseUTF16Encoding=True;).

Код основной формы:


   1:  Public Class Startform
   2:   
   3:      Public Property WarningMessage As String
   4:      Public Property Section As String
   5:      Public Property FullFileName As String
   6:      Public Property MediaTitle As String
   7:      Public Property ConvertParm As String
   8:   
   9:      Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
  10:          Dim CN1 As New System.Data.SQLite.SQLiteConnection(My.Settings.MediaDB)
  11:          CN1.Open()
  12:          Dim CMD1 As New System.Data.SQLite.SQLiteCommand("select * from section;", CN1)
  13:          Dim RDR1 As System.Data.SQLite.SQLiteDataReader = CMD1.ExecuteReader
  14:          While RDR1.Read
  15:              ComboBox1.Items.Add(RDR1("Name"))
  16:          End While
  17:          CN1.Close()
  18:      End Sub
  19:   
  20:      Private Sub SelectVideo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SelectVideo.Click
  21:          If OpenFileDialog1.ShowDialog() = System.Windows.Forms.DialogResult.OK Then
  22:              FileName.Text = OpenFileDialog1.FileName
  23:          End If
  24:      End Sub
  25:   
  26:      Private Sub VideoTitle_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles VideoTitle.TextChanged
  27:          Dim Translate = New Translit
  28:          EngName.Text = My.Settings.OutDir & Translate.GetEng(VideoTitle.Text) & ".flv"
  29:          FullFileName = EngName.Text
  30:          MediaTitle = VideoTitle.Text
  31:      End Sub
  32:   
  33:      Private Sub ConvertGo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ConvertGo.Click
  34:          ConvertParm = My.Settings.FFMPEG_Parm.Replace("XXX", DimensionX.Value).Replace("YYY", DimensionY.Value)
  35:          Dim MediaCoder As New System.Diagnostics.Process
  36:          MediaCoder.StartInfo.FileName = My.Settings.FFMPEG_Path & "ffmpeg.exe"
  37:          MediaCoder.StartInfo.Arguments = " -i " & """" & FileName.Text & """ " & ConvertParm & " """ & EngName.Text & """"
  38:          MediaCoder.StartInfo.WorkingDirectory = My.Application.Info.DirectoryPath
  39:          MediaCoder.StartInfo.UseShellExecute = False
  40:          MediaCoder.StartInfo.RedirectStandardError = True
  41:          Try
  42:              MediaCoder.Start()
  43:              MediaCoder.WaitForExit(1000)
  44:          Catch ex As Exception
  45:              Lerr1.Text = ex.Message
  46:              Exit Sub
  47:          End Try
  48:          Dim RDR1 As IO.StreamReader = MediaCoder.StandardError
  49:          WarningMessage = RDR1.ReadToEnd
  50:          RDR1.Close()
  51:          MediaCoder.Close()
  52:          Dim Msg1 As New MSG
  53:          Msg1.ShowDialog()
  54:      End Sub
  55:   
  56:      Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)
  57:          Dim formGraphics As Graphics = e.Graphics
  58:          Dim gradientBrush As New Drawing2D.LinearGradientBrush(New Point(0, 0), New Point(0, Me.Height), Color.FromArgb(198, 198, 198), Color.FromArgb(146, 146, 146))
  59:          formGraphics.FillRectangle(gradientBrush, ClientRectangle)
  60:      End Sub
  61:   
  62:      Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
  63:          Section = ComboBox1.Text
  64:      End Sub
  65:  End Class

Разметка основной формы:


   1:  <Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
   2:  Partial Class Startform
   3:      Inherits System.Windows.Forms.Form
   4:   
   5:      'Form overrides dispose to clean up the component list.
   6:      <System.Diagnostics.DebuggerNonUserCode()> _
   7:      Protected Overrides Sub Dispose(ByVal disposing As Boolean)
   8:          Try
   9:              If disposing AndAlso components IsNot Nothing Then
  10:                  components.Dispose()
  11:              End If
  12:          Finally
  13:              MyBase.Dispose(disposing)
  14:          End Try
  15:      End Sub
  16:   
  17:      'Required by the Windows Form Designer
  18:      Private components As System.ComponentModel.IContainer
  19:   
  20:      'NOTE: The following procedure is required by the Windows Form Designer
  21:      'It can be modified using the Windows Form Designer.  
  22:      'Do not modify it using the code editor.
  23:      <System.Diagnostics.DebuggerStepThrough()> _
  24:      Private Sub InitializeComponent()
  25:          Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(Startform))
  26:          Me.Label1 = New System.Windows.Forms.Label()
  27:          Me.SelectVideo = New System.Windows.Forms.Button()
  28:          Me.FileName = New System.Windows.Forms.TextBox()
  29:          Me.Label2 = New System.Windows.Forms.Label()
  30:          Me.ComboBox1 = New System.Windows.Forms.ComboBox()
  31:          Me.Label3 = New System.Windows.Forms.Label()
  32:          Me.VideoTitle = New System.Windows.Forms.TextBox()
  33:          Me.Label4 = New System.Windows.Forms.Label()
  34:          Me.EngName = New System.Windows.Forms.Label()
  35:          Me.ConvertGo = New System.Windows.Forms.Button()
  36:          Me.Lerr1 = New System.Windows.Forms.Label()
  37:          Me.OpenFileDialog1 = New System.Windows.Forms.OpenFileDialog()
  38:          Me.DimensionX = New System.Windows.Forms.NumericUpDown()
  39:          Me.Label5 = New System.Windows.Forms.Label()
  40:          Me.DimensionY = New System.Windows.Forms.NumericUpDown()
  41:          CType(Me.DimensionX, System.ComponentModel.ISupportInitialize).BeginInit()
  42:          CType(Me.DimensionY, System.ComponentModel.ISupportInitialize).BeginInit()
  43:          Me.SuspendLayout()
  44:          '
  45:          'Label1
  46:          '
  47:          Me.Label1.AutoSize = True
  48:          Me.Label1.BackColor = System.Drawing.Color.Transparent
  49:          Me.Label1.ForeColor = System.Drawing.SystemColors.Info
  50:          Me.Label1.Location = New System.Drawing.Point(6, 20)
  51:          Me.Label1.Name = "Label1"
  52:          Me.Label1.Size = New System.Drawing.Size(78, 13)
  53:          Me.Label1.TabIndex = 0
  54:          Me.Label1.Text = "Входной файл"
  55:          '
  56:          'SelectVideo
  57:          '
  58:          Me.SelectVideo.Location = New System.Drawing.Point(102, 16)
  59:          Me.SelectVideo.Name = "SelectVideo"
  60:          Me.SelectVideo.Size = New System.Drawing.Size(75, 23)
  61:          Me.SelectVideo.TabIndex = 1
  62:          Me.SelectVideo.Text = "Open"
  63:          Me.SelectVideo.UseVisualStyleBackColor = True
  64:          '
  65:          'FileName
  66:          '
  67:          Me.FileName.Location = New System.Drawing.Point(200, 18)
  68:          Me.FileName.Name = "FileName"
  69:          Me.FileName.Size = New System.Drawing.Size(369, 20)
  70:          Me.FileName.TabIndex = 2
  71:          '
  72:          'Label2
  73:          '
  74:          Me.Label2.AutoSize = True
  75:          Me.Label2.BackColor = System.Drawing.Color.Transparent
  76:          Me.Label2.ForeColor = System.Drawing.SystemColors.Info
  77:          Me.Label2.Location = New System.Drawing.Point(6, 60)
  78:          Me.Label2.Name = "Label2"
  79:          Me.Label2.Size = New System.Drawing.Size(53, 13)
  80:          Me.Label2.TabIndex = 3
  81:          Me.Label2.Text = "В раздел"
  82:          '
  83:          'ComboBox1
  84:          '
  85:          Me.ComboBox1.DisplayMember = "Name"
  86:          Me.ComboBox1.FormattingEnabled = True
  87:          Me.ComboBox1.Location = New System.Drawing.Point(102, 57)
  88:          Me.ComboBox1.Name = "ComboBox1"
  89:          Me.ComboBox1.Size = New System.Drawing.Size(201, 21)
  90:          Me.ComboBox1.TabIndex = 4
  91:          '
  92:          'Label3
  93:          '
  94:          Me.Label3.AutoSize = True
  95:          Me.Label3.BackColor = System.Drawing.Color.Transparent
  96:          Me.Label3.ForeColor = System.Drawing.SystemColors.Info
  97:          Me.Label3.Location = New System.Drawing.Point(6, 100)
  98:          Me.Label3.Name = "Label3"
  99:          Me.Label3.Size = New System.Drawing.Size(90, 13)
 100:          Me.Label3.TabIndex = 5
 101:          Me.Label3.Text = "Название видео"
 102:          '
 103:          'VideoTitle
 104:          '
 105:          Me.VideoTitle.Location = New System.Drawing.Point(102, 97)
 106:          Me.VideoTitle.Name = "VideoTitle"
 107:          Me.VideoTitle.Size = New System.Drawing.Size(467, 20)
 108:          Me.VideoTitle.TabIndex = 6
 109:          '
 110:          'Label4
 111:          '
 112:          Me.Label4.AutoSize = True
 113:          Me.Label4.BackColor = System.Drawing.Color.Transparent
 114:          Me.Label4.ForeColor = System.Drawing.SystemColors.Info
 115:          Me.Label4.Location = New System.Drawing.Point(6, 140)
 116:          Me.Label4.Name = "Label4"
 117:          Me.Label4.Size = New System.Drawing.Size(86, 13)
 118:          Me.Label4.TabIndex = 7
 119:          Me.Label4.Text = "Итоговый файл"
 120:          '
 121:          'EngName
 122:          '
 123:          Me.EngName.AutoSize = True
 124:          Me.EngName.BackColor = System.Drawing.Color.Transparent
 125:          Me.EngName.Location = New System.Drawing.Point(102, 142)
 126:          Me.EngName.Name = "EngName"
 127:          Me.EngName.Size = New System.Drawing.Size(10, 13)
 128:          Me.EngName.TabIndex = 8
 129:          Me.EngName.Text = "-"
 130:          '
 131:          'ConvertGo
 132:          '
 133:          Me.ConvertGo.Location = New System.Drawing.Point(385, 181)
 134:          Me.ConvertGo.Name = "ConvertGo"
 135:          Me.ConvertGo.Size = New System.Drawing.Size(75, 23)
 136:          Me.ConvertGo.TabIndex = 9
 137:          Me.ConvertGo.Text = "Convert"
 138:          Me.ConvertGo.UseVisualStyleBackColor = True
 139:          '
 140:          'Lerr1
 141:          '
 142:          Me.Lerr1.AutoSize = True
 143:          Me.Lerr1.BackColor = System.Drawing.Color.Transparent
 144:          Me.Lerr1.ForeColor = System.Drawing.Color.Red
 145:          Me.Lerr1.Location = New System.Drawing.Point(99, 224)
 146:          Me.Lerr1.Name = "Lerr1"
 147:          Me.Lerr1.Size = New System.Drawing.Size(0, 13)
 148:          Me.Lerr1.TabIndex = 10
 149:          '
 150:          'OpenFileDialog1
 151:          '
 152:          Me.OpenFileDialog1.FileName = "OpenFileDialog1"
 153:          Me.OpenFileDialog1.Filter = "All files (*.*)|*.*"
 154:          '
 155:          'DimensionX
 156:          '
 157:          Me.DimensionX.Location = New System.Drawing.Point(105, 182)
 158:          Me.DimensionX.Maximum = New Decimal(New Integer() {800, 0, 0, 0})
 159:          Me.DimensionX.Minimum = New Decimal(New Integer() {150, 0, 0, 0})
 160:          Me.DimensionX.Name = "DimensionX"
 161:          Me.DimensionX.Size = New System.Drawing.Size(84, 20)
 162:          Me.DimensionX.TabIndex = 11
 163:          Me.DimensionX.Value = New Decimal(New Integer() {450, 0, 0, 0})
 164:          '
 165:          'Label5
 166:          '
 167:          Me.Label5.AutoSize = True
 168:          Me.Label5.BackColor = System.Drawing.Color.Transparent
 169:          Me.Label5.ForeColor = System.Drawing.SystemColors.Info
 170:          Me.Label5.Location = New System.Drawing.Point(12, 184)
 171:          Me.Label5.Name = "Label5"
 172:          Me.Label5.Size = New System.Drawing.Size(32, 13)
 173:          Me.Label5.TabIndex = 12
 174:          Me.Label5.Text = "X / Y"
 175:          '
 176:          'DimensionY
 177:          '
 178:          Me.DimensionY.Location = New System.Drawing.Point(219, 182)
 179:          Me.DimensionY.Maximum = New Decimal(New Integer() {600, 0, 0, 0})
 180:          Me.DimensionY.Minimum = New Decimal(New Integer() {100, 0, 0, 0})
 181:          Me.DimensionY.Name = "DimensionY"
 182:          Me.DimensionY.Size = New System.Drawing.Size(84, 20)
 183:          Me.DimensionY.TabIndex = 13
 184:          Me.DimensionY.Value = New Decimal(New Integer() {376, 0, 0, 0})
 185:          '
 186:          'Startform
 187:          '
 188:          Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
 189:          Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
 190:          Me.ClientSize = New System.Drawing.Size(611, 262)
 191:          Me.Controls.Add(Me.DimensionY)
 192:          Me.Controls.Add(Me.Label5)
 193:          Me.Controls.Add(Me.DimensionX)
 194:          Me.Controls.Add(Me.Lerr1)
 195:          Me.Controls.Add(Me.ConvertGo)
 196:          Me.Controls.Add(Me.EngName)
 197:          Me.Controls.Add(Me.Label4)
 198:          Me.Controls.Add(Me.VideoTitle)
 199:          Me.Controls.Add(Me.Label3)
 200:          Me.Controls.Add(Me.ComboBox1)
 201:          Me.Controls.Add(Me.Label2)
 202:          Me.Controls.Add(Me.FileName)
 203:          Me.Controls.Add(Me.SelectVideo)
 204:          Me.Controls.Add(Me.Label1)
 205:          Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon)
 206:          Me.Name = "Startform"
 207:          Me.Text = "Simple OpenSource VideoConverter on FFMPEG platform (//www.vb-net.com/)"
 208:          CType(Me.DimensionX, System.ComponentModel.ISupportInitialize).EndInit()
 209:          CType(Me.DimensionY, System.ComponentModel.ISupportInitialize).EndInit()
 210:          Me.ResumeLayout(False)
 211:          Me.PerformLayout()
 212:   
 213:      End Sub
 214:      Friend WithEvents Label1 As System.Windows.Forms.Label
 215:      Friend WithEvents SelectVideo As System.Windows.Forms.Button
 216:      Friend WithEvents FileName As System.Windows.Forms.TextBox
 217:      Friend WithEvents Label2 As System.Windows.Forms.Label
 218:      Friend WithEvents ComboBox1 As System.Windows.Forms.ComboBox
 219:      Friend WithEvents Label3 As System.Windows.Forms.Label
 220:      Friend WithEvents VideoTitle As System.Windows.Forms.TextBox
 221:      Friend WithEvents Label4 As System.Windows.Forms.Label
 222:      Friend WithEvents EngName As System.Windows.Forms.Label
 223:      Friend WithEvents ConvertGo As System.Windows.Forms.Button
 224:      Friend WithEvents Lerr1 As System.Windows.Forms.Label
 225:      Friend WithEvents OpenFileDialog1 As System.Windows.Forms.OpenFileDialog
 226:      Friend WithEvents DimensionX As System.Windows.Forms.NumericUpDown
 227:      Friend WithEvents Label5 As System.Windows.Forms.Label
 228:      Friend WithEvents DimensionY As System.Windows.Forms.NumericUpDown
 229:   
 230:  End Class
 231:   

Код второй формы с сообщением:


   1:  Public Class MSG
   2:   
   3:      Private Sub MSG_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
   4:          TextBox1.Text = Startform.WarningMessage
   5:      End Sub
   6:   
   7:      Private Sub btOK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btOK.Click
   8:          Dim CN1 As New System.Data.SQLite.SQLiteConnection(My.Settings.MediaDB)
   9:          CN1.Open()
  10:          Dim CMD1 As New System.Data.SQLite.SQLiteCommand("insert into media (CrDate, ToSection, Title, FileName, ConvertParm) VALUES (date('now'),""" & Startform.Section & """,""" & Startform.MediaTitle & """,""" & Startform.FullFileName & """,""" & Startform.ConvertParm & """)", CN1)
  11:          Dim RDR1 As System.Data.SQLite.SQLiteDataReader = CMD1.ExecuteReader
  12:          CN1.Close()
  13:          Me.Close()
  14:      End Sub
  15:   
  16:      Private Sub btNo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btNo.Click
  17:          Me.Close()
  18:      End Sub
  19:  End Class

Разметка второй формы:


   1:  <Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
   2:  Partial Class MSG
   3:      Inherits System.Windows.Forms.Form
   4:   
   5:      'Form overrides dispose to clean up the component list.
   6:      <System.Diagnostics.DebuggerNonUserCode()> _
   7:      Protected Overrides Sub Dispose(ByVal disposing As Boolean)
   8:          Try
   9:              If disposing AndAlso components IsNot Nothing Then
  10:                  components.Dispose()
  11:              End If
  12:          Finally
  13:              MyBase.Dispose(disposing)
  14:          End Try
  15:      End Sub
  16:   
  17:      'Required by the Windows Form Designer
  18:      Private components As System.ComponentModel.IContainer
  19:   
  20:      'NOTE: The following procedure is required by the Windows Form Designer
  21:      'It can be modified using the Windows Form Designer.  
  22:      'Do not modify it using the code editor.
  23:      <System.Diagnostics.DebuggerStepThrough()> _
  24:      Private Sub InitializeComponent()
  25:          Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(MSG))
  26:          Me.Splitter1 = New System.Windows.Forms.Splitter()
  27:          Me.btOK = New System.Windows.Forms.Button()
  28:          Me.btNo = New System.Windows.Forms.Button()
  29:          Me.TextBox1 = New System.Windows.Forms.TextBox()
  30:          Me.Label1 = New System.Windows.Forms.Label()
  31:          Me.SuspendLayout()
  32:          '
  33:          'Splitter1
  34:          '
  35:          Me.Splitter1.Dock = System.Windows.Forms.DockStyle.Bottom
  36:          Me.Splitter1.Location = New System.Drawing.Point(0, 257)
  37:          Me.Splitter1.Name = "Splitter1"
  38:          Me.Splitter1.Size = New System.Drawing.Size(815, 60)
  39:          Me.Splitter1.TabIndex = 0
  40:          Me.Splitter1.TabStop = False
  41:          '
  42:          'btOK
  43:          '
  44:          Me.btOK.Location = New System.Drawing.Point(321, 282)
  45:          Me.btOK.Name = "btOK"
  46:          Me.btOK.Size = New System.Drawing.Size(75, 23)
  47:          Me.btOK.TabIndex = 1
  48:          Me.btOK.Text = "OK"
  49:          Me.btOK.UseVisualStyleBackColor = True
  50:          '
  51:          'btNo
  52:          '
  53:          Me.btNo.Location = New System.Drawing.Point(418, 282)
  54:          Me.btNo.Name = "btNo"
  55:          Me.btNo.Size = New System.Drawing.Size(75, 23)
  56:          Me.btNo.TabIndex = 2
  57:          Me.btNo.Text = "NO"
  58:          Me.btNo.UseVisualStyleBackColor = True
  59:          '
  60:          'TextBox1
  61:          '
  62:          Me.TextBox1.Dock = System.Windows.Forms.DockStyle.Fill
  63:          Me.TextBox1.Location = New System.Drawing.Point(0, 0)
  64:          Me.TextBox1.Multiline = True
  65:          Me.TextBox1.Name = "TextBox1"
  66:          Me.TextBox1.ScrollBars = System.Windows.Forms.ScrollBars.Vertical
  67:          Me.TextBox1.Size = New System.Drawing.Size(815, 257)
  68:          Me.TextBox1.TabIndex = 3
  69:          '
  70:          'Label1
  71:          '
  72:          Me.Label1.AutoSize = True
  73:          Me.Label1.ForeColor = System.Drawing.SystemColors.Desktop
  74:          Me.Label1.Location = New System.Drawing.Point(372, 264)
  75:          Me.Label1.Name = "Label1"
  76:          Me.Label1.Size = New System.Drawing.Size(65, 13)
  77:          Me.Label1.TabIndex = 4
  78:          Me.Label1.Text = "Save to db?"
  79:          '
  80:          'MSG
  81:          '
  82:          Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
  83:          Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
  84:          Me.ClientSize = New System.Drawing.Size(815, 317)
  85:          Me.Controls.Add(Me.Label1)
  86:          Me.Controls.Add(Me.TextBox1)
  87:          Me.Controls.Add(Me.btNo)
  88:          Me.Controls.Add(Me.btOK)
  89:          Me.Controls.Add(Me.Splitter1)
  90:          Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon)
  91:          Me.Name = "MSG"
  92:          Me.Text = "Warning"
  93:          Me.ResumeLayout(False)
  94:          Me.PerformLayout()
  95:   
  96:      End Sub
  97:      Friend WithEvents Splitter1 As System.Windows.Forms.Splitter
  98:      Friend WithEvents btOK As System.Windows.Forms.Button
  99:      Friend WithEvents btNo As System.Windows.Forms.Button
 100:      Friend WithEvents TextBox1 As System.Windows.Forms.TextBox
 101:      Friend WithEvents Label1 As System.Windows.Forms.Label
 102:  End Class

app.conf проекта. Обратите внимание на строки 8-10 - они обеспечивают совместимость драйвера SqLite c NET 4.0


   1:  <?xml version="1.0" encoding="utf-8" ?>
   2:  <configuration>
   3:      <configSections>
   4:          <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
   5:              <section name="SimpleVideoConverter.My.MySettings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
   6:          </sectionGroup>
   7:      </configSections>
   8:      <startup useLegacyV2RuntimeActivationPolicy="true">
   9:          <supportedRuntime version="v4.0"  />
  10:      </startup>
  11:      <connectionStrings>
  12:    <add name="SimpleVideoConverter.My.MySettings.MediaDB" connectionString="Data Source=&quot;G:\Projects\All_Freeware\SimpleVideoConverter\SimpleVideoConverter\media.s3db&quot;;UseUTF16Encoding=True;" />
  13:   </connectionStrings>
  14:      <system.diagnostics>
  15:          <sources>
  16:              <!-- This section defines the logging configuration for My.Application.Log -->
  17:              <source name="DefaultSource" switchName="DefaultSwitch">
  18:                  <listeners>
  19:                      <add name="FileLog"/>
  20:                      <!-- Uncomment the below section to write to the Application Event Log -->
  21:                      <!--<add name="EventLog"/>-->
  22:                  </listeners>
  23:              </source>
  24:          </sources>
  25:          <switches>
  26:              <add name="DefaultSwitch" value="Information" />
  27:          </switches>
  28:          <sharedListeners>
  29:              <add name="FileLog"
  30:                   type="Microsoft.VisualBasic.Logging.FileLogTraceListener, Microsoft.VisualBasic, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"
  31:                   initializeData="FileLogWriter"/>
  32:              <!-- Uncomment the below section and replace APPLICATION_NAME with the name of your application to write to the Application Event Log -->
  33:              <!--<add name="EventLog" type="System.Diagnostics.EventLogTraceListener" initializeData="APPLICATION_NAME"/> -->
  34:          </sharedListeners>
  35:      </system.diagnostics>
  36:      <applicationSettings>
  37:          <SimpleVideoConverter.My.MySettings>
  38:              <setting name="OutDir" serializeAs="String">
  39:                  <value>F:\Media\</value>
  40:              </setting>
  41:              <setting name="FFMPEG_Path" serializeAs="String">
  42:                  <value>D:\FFMPEG\ffmpeg-git-e01f478-win64-shared\bin\</value>
  43:              </setting>
  44:              <setting name="FFMPEG_Parm" serializeAs="String">
  45:                  <value>-ar 22050 -ab 32K -vcodec libx264 -f flv -b 700k -s XXXxYYY -y</value>
  46:              </setting>
  47:          </SimpleVideoConverter.My.MySettings>
  48:      </applicationSettings>
  49:  </configuration>

Небольшая дополнительная функция Translit для транслитерации наименования ролика в название его файла на английском языке - вообще говоря не является необходимой для этого минимально конвертера. Эта функция попала сюда из более сложного конвертера с применением FMS (Flash media server) и DVR (закладок на определнных моментах видеоролика). В этом простейшем конвертере, конечно, ничего такого нет - но тем не менее я включил эту функцию для удобства в состав этого конвертера.


   1:  Public Class Translit
   2:   
   3:      Dim Rus() = {"А", "Б", "В", "Г", "Д", "Е", "Ё", "Ж", "З", "И", "Й", "К", "Л", "М", "Н", "О", "П", "Р", "С", "Т", "У", "Ф", "Х", "Ц", "Ч", "Ш", "Щ", "Ь", "Ы", "Ъ", "Э", "Ю", "Я", "а", "б", "в", "г", "д", "е", "ё", "ж", "з", "и", "й", "к", "л", "м", "н", "о", "п", "р", "с", "т", "у", "ф", "х", "ц", "ч", "ш", "щ", "ь", "ы", "ъ", "э", "ю", "я", ".", "\", "/", "'", """", "!", "%", "^", "&", ")", "(", "=", "{", "}", "|", "~", "`", "@", "#", "$", "+", "*"}
   4:      Dim Eng() = {"A", "B", "V", "G", "D", "E", "JO", "J", "Z", "I", "J", "K", "L", "M", "N", "O", "P", "R", "S", "T", "U", "F", "H", "C", "4", "SH", "XH", "", "Y", "", "JE", "JU", "JA", "a", "b", "v", "g", "d", "e", "jo", "j", "z", "i", "j", "k", "l", "m", "n", "o", "p", "r", "s", "t", "u", "f", "h", "c", "4", "sh", "xh", "", "y", "", "je", "ju", "ja", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}
   5:      Dim Ret As System.Text.StringBuilder
   6:   
   7:      Public Function GetEng(ByVal RusInput As String)
   8:          Ret = New System.Text.StringBuilder
   9:          For i As Integer = 0 To RusInput.Length - 1
  10:              Dim IsRus As Boolean = False
  11:              For j As Integer = 0 To Rus.Length - 1
  12:                  If (RusInput.Chars(i) = Rus(j)) Then
  13:                      Ret.Append(Eng(j))
  14:                      IsRus = True
  15:                      Exit For
  16:                  End If
  17:              Next
  18:              If Not IsRus Then
  19:                  Ret.Append(RusInput.Chars(i))
  20:              End If
  21:          Next
  22:          Return Ret.ToString
  23:      End Function
  24:   
  25:  End Class

База проекта включена в MSI-файл и выглядит вот так:




Comments ( )
<00>  <01>  <02>  <03>  <04>  <05>  <06>  <07>  <08>  <09>  <10>  <11>  <12>  <13>  <14>  <15>  <16>  <17>  <18>  <19>  <20>  <21>  <22>  <23
Link to this page: //www.vb-net.com/SimpleVideoConverter/index.htm
<SITEMAP>  <MVC>  <ASP>  <NET>  <DATA>  <KIOSK>  <FLEX>  <SQL>  <NOTES>  <LINUX>  <MONO>  <FREEWARE>  <DOCS>  <ENG>  <CHAT ME>  <ABOUT ME>  < THANKS ME>