如何将ffmpeg转码过程信息链接到vb6 GUI应用程序?
我正在玩vb6 gui前端,现在我所能做的就是通过cmd.exe调用ffmpeg,它将在整个进程仍在运行时显示命令提示符。我认为这是WinFF的标准,WinFF是另一个基于pascal的ffmpeg前端gui 但当我看到另一个时,我被吓坏了 因此,基本上,我正在寻找一种方法,如何干净地隐藏整个命令提示符,并将代码转换进度链接到进度条,并将其链接到gui中 这是我的计划,我想找到一个win32 api函数,我可以调用cmd行并隐藏它,我想我必须读取日志文件才能获得ffmpeg进度信息 那么我应该为win32 api调用哪个函数呢? 有人知道更好/更容易的方法来完成这项工作吗? 谢谢 更新:如何将ffmpeg转码过程信息链接到vb6 GUI应用程序?,vb6,ffmpeg,progress-bar,Vb6,Ffmpeg,Progress Bar,我正在玩vb6 gui前端,现在我所能做的就是通过cmd.exe调用ffmpeg,它将在整个进程仍在运行时显示命令提示符。我认为这是WinFF的标准,WinFF是另一个基于pascal的ffmpeg前端gui 但当我看到另一个时,我被吓坏了 因此,基本上,我正在寻找一种方法,如何干净地隐藏整个命令提示符,并将代码转换进度链接到进度条,并将其链接到gui中 这是我的计划,我想找到一个win32 api函数,我可以调用cmd行并隐藏它,我想我必须读取日志文件才能获得ffmpeg进度信息 那么我应该为
如果有人感兴趣,我会发现:)我在OSX上为Java编写了完全相同的东西。极简逻辑:
- 您需要在生成ffmpeg输出时读取它李>
- 逐行分析输出(CR和LF)
- 找到“Duration”行,将时间值存储为整数中的秒数。“持续时间:00:03:180.48,开始时间:0.000000,比特率:274kb/s”(CRLF终止)
- 从那时起,解析CR并查找完成的时间(以秒为单位)值。“帧=2816 fps=667 q=11.0 Lsize=13036kB时间=187.66比特率=569.1kbits/s”(CR终止,无LF)
- 进行划分(时间/持续时间),您就有了一个百分比李>
很抱歉,无法帮助您使用VB6部件,但我们假设您可以直接从一个进程捕获输出。首先请原谅我的英语,我讲西班牙语。 我找到了答案。 1/首先输入预设,我有一个示例“输出格式MPEG2 DVD HQ” 此指令可以使txt文件不要忘记将命令
-vstats_file Mitxt.txt
包含到预设中,如示例所示。这可以生成一个报告,该报告位于文件源的文件夹source中。如果你愿意,你可以输入任何名字,然后你可以用这个例子来阅读这个文本
Private Sub Timer1_Timer()
Dim strLastLine As String
'For example my ruta "C:\Documents and Settings\Gortiz\Mis documentos\file.txt"
strLastLine = ReadLastLineOfFile("C:\Documents and Settings\Gortiz\Mis _ documentos\file.txt")
Lst1.AddItem strLastLine
End Sub
Function ReadLastLineOfFile(sFileName As String) As String
Dim objFSO, TS
Dim sTmpContents As String
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set TS = objFSO.OpenTextFile(sFileName, 1)
sTmpContents = TS.ReadAll
TS.Close
Set TS = Nothing
Set objFSO = Nothing
ReadLastLineOfFile = Split(sTmpContents, vbCrLf)(UBound(Split(sTmpContents, vbCrLf)) - 1)
End Function
在名为
Lst1
的列表框中,您可以看到显示的结果。比特率、处理的帧、处理时间(秒)。etc谢谢,伙计,我会在找到如何从cmd窗口返回输出后再查看:伟大的斯图·汤普森!!!!!!来吧工作完美!!!!!呵呵呵呵干得好!!!!!
Private Sub Timer1_Timer()
Dim strLastLine As String
'For example my ruta "C:\Documents and Settings\Gortiz\Mis documentos\file.txt"
strLastLine = ReadLastLineOfFile("C:\Documents and Settings\Gortiz\Mis _ documentos\file.txt")
Lst1.AddItem strLastLine
End Sub
Function ReadLastLineOfFile(sFileName As String) As String
Dim objFSO, TS
Dim sTmpContents As String
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set TS = objFSO.OpenTextFile(sFileName, 1)
sTmpContents = TS.ReadAll
TS.Close
Set TS = Nothing
Set objFSO = Nothing
ReadLastLineOfFile = Split(sTmpContents, vbCrLf)(UBound(Split(sTmpContents, vbCrLf)) - 1)
End Function