Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - [VB.net] Progresso ffmpeg su progressbar
Forum - C# / VB.NET - [VB.net] Progresso ffmpeg su progressbar

Avatar
BeTmAsTeR (Normal User)
Newbie


Messaggi: 7
Iscritto: 01/09/2009

Segnala al moderatore
Postato alle 19:55
Martedì, 01/09/2009
Scusate il titolo poco chiaro, stò creando un piccolo convertitore di formati utilizzando ffmpeg, il codice per la conversione non è stato un grosso problema ma mi sono bloccato qui .....

Vorrei far conincidere l' avanzamento che mostra ffmpeg in una progressbar sul form .....

Come faccio ???

grazie in anticipo :hail:

PM Quote
Avatar
GoLDBeRG (Ex-Member)
Expert


Messaggi: 331
Iscritto: 19/12/2005

Segnala al moderatore
Postato alle 20:54
Martedì, 01/09/2009
non ho capito nemmeno di cosa stai parlando...

PM Quote
Avatar
BeTmAsTeR (Normal User)
Newbie


Messaggi: 7
Iscritto: 01/09/2009

Segnala al moderatore
Postato alle 1:19
Mercoledì, 02/09/2009
allora hai presente quando esegui una conversione con ffmpeg ?
ti viene mostrato l' avanzamento della conversione
dato che stò facendo un prog in vb.net che sfrutta ffmpeg per la conversione di file in altri formati ..... volevo che l' avanzamento di ffmpeg venisse mostrate sul mio form attraverso la progressbar

PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 10:04
Mercoledì, 02/09/2009
Devi redirigere l'output del programma ffmpeg sulla tua applicazione. Per far questo si usano alcune proprietà di Process. Io ho fatto la stessa cosa con Lame:
Codice sorgente - presumibilmente VB.NET

  1. P = New Process
  2.             P.StartInfo.FileName = Lame
  3.             P.StartInfo.Arguments = Info.Arguments & String.Format("{0}{1}{0} {0}{2}{0}", Chr(34), File, Info.Folder & "\" & IO.Path.GetFileNameWithoutExtension(File) & ".mp3")
  4.             P.StartInfo.WindowStyle = ProcessWindowStyle.Hidden
  5.             P.StartInfo.UseShellExecute = False
  6.             P.StartInfo.RedirectStandardError = True
  7.             P.StartInfo.CreateNoWindow = True
  8.             AddHandler P.ErrorDataReceived, AddressOf Process_DataReceived
  9.  
  10.             P.Start()
  11.             P.BeginErrorReadLine()


Solo che al posto di StandardError e ErrorDataReceived ci vanno StandardOutput e OutputDataReceived. Leggi e manipoli i dati nell'evento relativo; io ho usato le espressioni regolari:
Codice sorgente - presumibilmente VB.NET

  1. Private Sub Process_DataReceived(ByVal sender As Object, ByVal e As DataReceivedEventArgs)
  2.         Dim pfMatch As Match = ProcessedFramesReg.Match(e.Data)
  3.         Dim prMatch As Match = ProcessingRateReg.Match(e.Data)
  4.         Dim tpMatch As Match = TimeToProcessReg.Match(e.Data)
  5.         Dim Infos As New System.Text.StringBuilder()
  6.         Dim Percent As Single = -1
  7.  
  8.         If (pfMatch.Success) And (prMatch.Success) And (tpMatch.Success) Then
  9.             Infos.AppendFormat("Frames processati: {0:N0}/{1:N0}", CInt(pfMatch.Groups("Proc").Value), CInt(pfMatch.Groups("All").Value))
  10.             Percent = 100 * CSng(pfMatch.Groups("Proc").Value) / CSng(pfMatch.Groups("All").Value)
  11.             Infos.AppendFormat(" - Velocità : {0}", prMatch.Groups("Rate").Value)
  12.             Infos.AppendFormat(" - In coda: {0} min", tpMatch.Groups("Time").Value)
  13.         End If
  14.  
  15.         bgConvert.ReportProgress(Percent, Infos.ToString)
  16.     End Sub


PM Quote