【问题标题】:( C# / VB FFMPEG Wrapper ) How can I parse progress of conversion video to audio?( C# / VB FFMPEG Wrapper ) 如何解析视频到音频的转换进度?
【发布时间】:2013-11-20 18:03:42
【问题描述】:

我会尽量具体化。

我搜索了很多,找到一个好的 .net FFMPEG 包装器,最好的是VB FFmpeg Wrapper

我很不擅长使用 VB.net,问题是我想在 C# 项目中使用这个库,但我无法将我找到的示例程序从 VB.net 正确转换为 C#。

所以,我已经编辑了我的 C# 应用程序,所以它将输入视频文件路径写入临时 .txt 文件..然后运行“转换器”(用 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:\

【问题讨论】:

  • 一点....您知道可以将 VB.Net 包装器编译为它自己的 DLL,然后将其作为引用添加到 C# 项目中,这样您就不必编写自己的VB.Net中的代码。
  • @psubsee2003,无论我使用的是 C# 还是 VB.net,都存在同样的问题 [为什么选择从视频文件中仅获取音频时进度条不起作用? ] 我希望我知道如何将上面的代码成功转换为 C#,它会很棒,所以我可以将它与我的程序集成!但现在我将 VB.net 应用程序用作我的 C# 应用程序旁边的单独文件;
  • 我没有使用你之前提到的库,但我之前为 FFMPEG CLI 编写了自己的包装器,我记得由于屏幕的变化,屏幕输出的解析是一些非常复杂的 RegEx输出。可以想象,问题可能出在图书馆本身。
  • 由于您没有指定,我不确定您做了什么调试,但Private Sub ConOut 方法似乎正在报告进度。我会看看那里发生了什么。这个方法是没有被调用还是被调用但进度值为 0%(因此你的进度条不会更新)。

标签: c# vb.net ffmpeg wrapper


【解决方案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");

【讨论】:

    猜你喜欢
    • 2016-09-03
    • 2020-08-25
    • 2021-11-20
    • 2015-04-26
    • 2010-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-02
    相关资源
    最近更新 更多