2013-02-05 53 views
1

我尽可能地尽量变得具体。(C#/ VB FFMPEG Wrapper)如何解析转换视频到音频的进度?

我搜索了很多寻找FFMPEG良好的.NET包装,最好是VB FFmpeg Wrapper

我在使用VB.net很糟糕,问题是,我想用在这个库C#项目,但我无法正确地将我从VB.net找到的示例程序转换为C#。因此,我编辑了我的C#应用​​程序,因此它将输入视频文件路径写入临时.txt文件中,然后运行“Converter”(用VB编写)!

我的“转换器”的代码:

Imports System 
Imports System.IO 

Public Class Form1 
    Public WithEvents MediaConverter As New FFLib.Encoder 

    Private Sub ConOut(ByVal prog As String, ByVal tl As String) Handles MediaConverter.Progress 
     OperationPrgrss.Value = prog 
     Application.DoEvents() 
    End Sub 

    Private Sub stat(ByVal status) Handles MediaConverter.Status 
     StatusLbl.Text = status 
     Application.DoEvents() 
    End Sub 

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load 
     Try 
      Using PathFinder As New StreamReader("_temp.txt") 
       Dim SrcPath As String 
       SrcPath = PathFinder.ReadLine() 
       PathTxtBox.Text = SrcPath 
      End Using 
     Catch ex As Exception 
      MessageBox.Show("The file couldn't be read : " & Environment.NewLine & ex.Message) 
     End Try 
    End Sub 


    Private Sub Form1_Shown(sender As Object, e As EventArgs) Handles MyBase.Shown 
     MediaGenerator.RunWorkerAsync() 
    End Sub 

    Private Sub MediaGenerator_DoWork(sender As Object, e As ComponentModel.DoWorkEventArgs) Handles MediaGenerator.DoWork 
     MediaConverter.OverWrite = False 
     MediaConverter.SourceFile = PathTxtBox.Text 
     MediaConverter.Format = MediaConverter.Format_MP3 
     MediaConverter.AudioCodec = MediaConverter.AudioCodec_mp3 
     MediaConverter.Video_Codec = MediaConverter.Vcodec_NONE 

     MediaConverter.Threads = 0 
     MediaConverter.OverWrite = True 

     Dim OutputFldr As String = AppDomain.CurrentDomain.BaseDirectory & "MP3Files\\" 
     MediaConverter.OutputPath = OutputFldr 
     MediaConverter.AnalyzeFile() 

     MediaConverter.Encode() 
    End Sub 
End Class 

我试图做的是转换视频文件[有时它WEBM,FLV,MP4或3GP] 和上面的代码做它但问题是使用时:

MediaConverter.Video_Codec = MediaConverter.Vcodec_NONE 

进度条不起作用,它的值仍为0! &当我使用任何视频编解码器它完美[进度条],但创建的MP3文件将无法使用任何媒体播放器,或智能手机电视的..等;

...

那么,有什么问题?我该如何解决它? 我尝试了很多来改变封装库源代码中的一些功能,但正如我之前提到的......我只是一个新手@ VB.net:\

+0

一点....你知道,可能编译VB.Net包装,因为它是自己的DLL,然后将它作为参考添加到C#项目中,以便您不必在VB.Net中编写自己的代码。 – psubsee2003

+0

@ psubsee2003,我正在使用C#或VB.net,存在同样的问题[**为什么选择只从视频文件中获取音频时没有进度条工作?**] 我希望我知道如何将上面的代码成功转换为C#,它会很棒,所以我可以将它与我的程序集成! 但现在我使用VB.net应用程序作为我的C#应用​​程序旁边的单独文件; –

+0

我没有使用过前面提到过的库,但是我之前编写了自己的FFMPEG CLI包装器,并且我记得由于屏幕输出的变化,屏幕输出的解析是一些非常复杂的RegEx。可以想象,问题可能出现在图书馆本身。 – psubsee2003

回答

1

获取FFMpeg进度的最简单方法是解析它控制台输出。 我已经写了自由和易于使用的FFmpeg的包装Video Converter .NET有该事件的进展:

var conv = new NReco.VideoConverter.FFMpegConverter(); 
conv.ConvertProgress += (o, args) => { 
    Console.WriteLine(String.Format("Progress: {0}/{1}\r\n", args.Processed, args.TotalDuration); 
}; 
conv.ConvertMedia(inputFile1, outFile, "flv");