ffmpeg.Net [Version 1.0]

    • Beta

    Es gibt 23 Antworten in diesem Thema. Der letzte Beitrag () ist von musmuss.

      ffmpeg.Net [Version 1.0]

      Name des Programms:
      ffmpeg.Net

      Beschreibung:
      Mit Dieser Library lassen sich Videos und AudioTracks ganz einfach mithilfe der 'ffmpeg.exe' Konventieren.

      Screenshot(s):



      BeispielCode:

      Spoiler anzeigen


      Als erstes benötigt Ihr die ffmpeg.exe (Download - 20.28 MB) und diese Library.
      Ihr erstellt als erstes eine Windowsform mit 3 Buttons (btnConvert, btnCancel,btnAdd) , 3 Labels (lblStatus, lblRemainingTime, lblElapedTime) und eine progressbar (Statusprogressbar)
      Ihr Fügt dann ein Verweis auf die 'ffmpeg.Net.dll' hinzu.
      Nun zum Code ...
      Importiert als erstes:

      VB.NET-Quellcode

      1. Imports ffmpeg.Net.FFmpeg


      Und hier der ganze Code als beispiel für ein '.Avi' Konventierung :

      VB.NET-Quellcode

      1. Private WithEvents Converter As ffmpeg.Net.FFmpeg
      2. Private items As New ArrayList
      3. Private Sub btnAdd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAdd.Click
      4. With New OpenFileDialog
      5. If .ShowDialog = Windows.Forms.DialogResult.OK Then
      6. For Each item As String In .FileNames
      7. items.Add(item)
      8. Next
      9. End If
      10. End With
      11. End Sub
      12. Private Sub btnConvert_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnConvert.Click
      13. 'Hier können Wir einstellen ob wir Unser Video als VideoFormat oder AudioFormat Konventieren wollen
      14. Converter.Mode = ConversionMode.Video
      15. Converter.Items.Clear()
      16. For Each item As String In items
      17. Converter.Items.Add(item)
      18. Next
      19. 'Allgemein Einstellungen
      20. Converter.Threads = 0
      21. Converter.Volume = 256 'Maximum
      22. Converter.destinationFolder = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) 'Das ist der Ort wo unser Video gespeichert wird
      23. 'Video Einstellungen
      24. Converter.videoSize = "480x360"
      25. Converter.videoFramerate = 29
      26. Converter.videoCodec = Video.XvID
      27. Converter.videoBitrate = 2000
      28. Converter.videoAspectRatio = AspectRatio.Widescreen
      29. Converter.Extension = ".avi"
      30. 'Audio Einstellungen
      31. Converter.audioBitrate = 192
      32. Converter.audioChanel = AC.Stereo
      33. Converter.audioCodec = Audio.MP3
      34. Converter.audioSamplerate = 44100
      35. Converter.Start() 'Konventierung Starten
      36. End Sub
      37. Private Sub btnCancel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCancel.Click
      38. items.Clear()
      39. Converter.Stop()
      40. End Sub
      41. Private Sub Converter_Conversion_Progress(ByVal Percent As Integer, ByVal ElapsedTime As String, ByVal TimeRemaining As String) Handles Converter.Conversion_Progress
      42. Statusprogressbar.Value = Percent 'Percent ist der Fortschritt in %
      43. lblRemainingTime.Text = TimeRemaining 'TimeRemaining ist die verbleibende Zeit
      44. lblElapedTime.Text = ElapsedTime 'ElapsedTime ist die Konventierungszeit
      45. End Sub
      46. Private Sub Converter_Log(ByVal Log As String) Handles Converter.Log
      47. End Sub
      48. Private Sub Converter_Status(ByVal Status As ffmpeg.Net.FFmpeg.ConversionStatus, ByVal Text As String) Handles Converter.Status
      49. Select Case Status
      50. Case ConversionStatus.Cancelled 'Es wurde Abgebrochen
      51. Me.Invoke(Sub() lblStatus.Text = "Konventierung Abgebrochen!")
      52. Case ConversionStatus.Converting 'Es wird gerade konventiert
      53. Me.Invoke(Sub() lblStatus.Text = "konventiert - " & Text)
      54. Case ConversionStatus.Failed 'Ein fehler ist Aufgetreten
      55. Me.Invoke(Sub() lblStatus.Text = "Error : " & Text)
      56. Case ConversionStatus.Completed 'Abgeschlossen
      57. items.Clear()
      58. Me.Invoke(Sub() lblStatus.Text = "Konventierung Abgeschlossen!")
      59. End Select
      60. End Sub
      61. Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
      62. Converter.Stop()
      63. End Sub
      64. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
      65. Converter = New ffmpeg.Net.FFmpeg("C:\ffmpeg.exe") 'Hier geben wir den Pfad zur ffmpeg.exe an
      66. End Sub




      Verwendete Programmiersprache und IDE:
      Visual Basic .NET (IDE: VB 2010 Express)

      Systemanforderungen:
      .NET Framework 3.5
      Man benötigt die ffmpeg.exe (Download - 20.28 MB)

      Download:
      ffmpeg.Net.dll Im Anhang (26,5 KB)
      ffmpeg.exe(Download - 20.28 MB)

      Lizenz/Weitergabe:
      • Freeware
      • Einkompilierung unter Namensnennung erlaubt (Credits : Valentin Z. (Tibiamicus) )
      • Dekompilierug ist Verboten


      Viel Spaß mit dieser Library -- Tibiamicus --
      Dateien
      • ffmpeg.Net.dll

        (27,14 kB, 451 mal heruntergeladen, zuletzt: )

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Tibiamicus“ ()

      Hab mir die Lib nicht angesehen aber:

      Mach doch die Extensions für den Converter in ein Enum. Das wäre benutzerfreundlicher.

      Greetz

      EDIT//: @Nikx: Die Sprüche in deiner Signatur sind echt genial :thumbsup:

      8-) faxe1008 8-)

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „faxe1008“ ()

      Die Lizenz würde ich mir nochmal genauer ansehen ^^
      "Life isn't about winning the race. Life is about finishing the race and how many people we can help finish the race." ~Marc Mero

      Nun bin ich also auch soweit: Keine VB-Fragen per PM! Es gibt hier ein Forum, verdammt!
      de.wikipedia.org/wiki/GNU_General_Public_License
      Scheinbar haben wir da unterschiedliche Ansichten einer Lizenz ;)
      "Life isn't about winning the race. Life is about finishing the race and how many people we can help finish the race." ~Marc Mero

      Nun bin ich also auch soweit: Keine VB-Fragen per PM! Es gibt hier ein Forum, verdammt!
      ffmpeg.org/legal.html
      Diskussionen nötig? ;)

      Spoiler anzeigen

      Compile FFmpeg without "--enable-gpl" and without "--enable-nonfree".
      Use dynamic linking (on windows, this means linking to dlls) for linking with FFmpeg libraries.
      Distribute the source code of FFmpeg, no matter if you modified it or not.
      Make sure the source code corresponds exactly to the library binaries you are distributing.
      Run the command "git diff > changes.diff" in the root directory of the FFmpeg source code to create a file with only the changes.
      Explain how you compiled FFmpeg, for example the configure line, in a text file added to the root directory of the source code.
      Use tarball or a zip file for distributing the source code.
      Host the FFmpeg source code on the same webserver as the binary you are distributing.
      Add "This software uses code of <a href=http://ffmpeg.org>FFmpeg</a> licensed under the <a href=http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html>LGPLv2.1</a> and its source can be downloaded <a href=link_to_your_sources>here</a>" to every page in your website where there is a download link to your application.
      Mention "This software uses libraries from the FFmpeg project under the LGPLv2.1" in your program "about box".
      Mention in your EULA that your program uses FFmpeg under the LGPLv2.1.
      If your EULA claims ownership over the code, you have to explicitly mention that you do not own FFmpeg, and where the relevant owners can be found.
      Remove any prohibition of reverse engineering from your EULA.
      Apply the same changes to all translations of your EULA.
      Do not misspell FFmpeg (two capitals F and lowercase "mpeg").
      Do not rename FFmpeg dlls to some obfuscated name, but adding a suffix or prefix is fine (renaming "avcodec.dll" to "MyProgDec.dll" is not fine, but to "avcodec-MyProg.dll" is).
      Go through all the items again for any LGPL external library you compiled into FFmpeg (for example LAME).
      Make sure your program is not using any GPL libraries (notably libx264).

      Es scheiterst spätestens bei Punkt 3. Zudem solltest du darauf verweisen damit kein Blindfisch hier
      die DLL lädt, einbaut und sich auf dich verlässt, denn "es stand ja nichts im Thread!!".

      Grüße
      "Life isn't about winning the race. Life is about finishing the race and how many people we can help finish the race." ~Marc Mero

      Nun bin ich also auch soweit: Keine VB-Fragen per PM! Es gibt hier ein Forum, verdammt!
      Warum ist VideoSize ein String? Das solltest du lieber aufteilen in VideoWidth und VideoHeight, und diese sollten beide vom Typ Integer sein.
      Bitrate und Samplerate können doch auch nicht beliebig angegeben werden, soweit ich das weiß. Von daher wärst du da auch mit nem Enum besser beraten.
      Und die Klasse FFmpeg zu nennen ist nicht sehr vorteilhaft, besser wäre sowas wie "FFmpegMediaConverter", denn die Klasse ist ja nicht FFmpeg selbst, sondern nur ein Converter, der auf FFmpeg basiert. Oder eigentlich braucht man auch gar kein FFmpeg im Namen, weil es ja schon durch den Namespace ersichtlich wird, wie der Converter funktioniert.
      Und bitte benenne deine Eigenschaften einheitlich. Sie sollten alle mit einem Großbuchstaben anfangen.
      @Artentus
      Das mit dem VideoSize wird geändert :D
      Du hast recht das man nicht beliebig die SampleRate angeben kann. Aber ich kann es nicht in einen
      Enum packen weil das zahlen sind. X(

      @Nikx
      Also ich verstehe noch immer nicht wo da das Problem liegt ? ?(
      videoCodec als Enum mag im ersten Moment ganz schlau sein, aber bedenke das nicht jeder auf seinem Rechner jeden x-beliebigen Codec installiert hat ;) Das führt unweigerlich zu Problemen, dann noch die Sache mit dem 1Pass/2Pass Verfahren, wo ist die Option? Und die Prüfung der Kombatiblität von V-Codec, A-Codec und Container? Sowas darf man auch nicht vergessen, gehört meiner Meinung nach ebenso in solch eine Library.

      Über den Namespace sowie der Bezeichnung/Schreibweise der Properties solltest du dir auch nochmals gedanken machen, ebenso wie schon angesprochen das Thema Lizenzierung ... ganz heikles Thema
      ich würde ja kein Enum dafür nutzen, mag zwar nützlich sein aber so richtig gefallen würde es mir nicht, besonders dieses SampleRate.Hz0000 ... ohje das liest sich ja schon n bissl doof und SampleRate.Rate_00000 ... ich würde da eher n reinen Int-Wert für nehmen - aber das ist wohl Geschmackssache :D
      @Tibiamicus:

      Das Problem liegt darin, dass FFMPEG soweit ich das verstehe die "LGNU" um die o.g. eigenen Punkte erweitert.
      Ein Nutzer hat den FFMPEG Source zu verlinken, einen Copyrightvermerk zu setzten etc.

      Alles in der Liste genannte eben ^^

      Siehe FFMPEG.org -> Legal -> License Compliance Checklist
      "Life isn't about winning the race. Life is about finishing the race and how many people we can help finish the race." ~Marc Mero

      Nun bin ich also auch soweit: Keine VB-Fragen per PM! Es gibt hier ein Forum, verdammt!
      Angenommen jemand nutzt eben deine Lib und weiß das ganze nicht.
      Ob du das auch beachten musst... Fraglich. Weiß ich nicht ^^
      "Life isn't about winning the race. Life is about finishing the race and how many people we can help finish the race." ~Marc Mero

      Nun bin ich also auch soweit: Keine VB-Fragen per PM! Es gibt hier ein Forum, verdammt!