我正在使用 vb6 gui 前端 ffmpeg 截至目前,我所能做的就是通过 cmd.exe 调用 ffmpeg,这将在整个过程仍在运行时显示命令提示符。我认为这是 WinFF(另一个基于 pascal 的 ffmpeg 前端 gui)如何工作的常态。

但当我看到另一个时我震惊了 GVC gui 有进度条和一切。

所以基本上,我正在研究一种如何干净地隐藏整个命令提示符并将转码进度链接到我的 gui 中的进度条的方法。

所以这是我的计划,我正在考虑找到一个 win32 api 函数,我可以调用 cmd 行并隐藏它,并且 来自这里的另一个讨论, ,我想我必须阅读日志文件才能获取 ffmpeg 进度信息。

那么我应该为 win32 api 调用哪个函数呢?有谁知道更好/更简单的方法来完成这项工作?谢谢

更新:

如果有人有兴趣,我找到一个 关于如何将 cmd 输出抓取到我的 vb6 应用程序中的不错的类模块,它的作者正是伟大的 joacim :)

有帮助吗?

解决方案

我在 OSX 上为 Java 编写了完全相同的东西。非常简约的逻辑:

  • 您需要在生成 ffmpeg 输出时读取它。
  • 逐行解析输出(CR 和 LF)
    • 找到“持续时间”行,将时间值存储为整数秒。 “期间: 00:03:18.48、开始:0.000000,比特率:274 KB/秒” (CRLF 终止)
    • 从那时起,解析 CR 并查找完成时间(以秒为单位)值。 “帧= 2816 fps=667 q=11.0 Lsize= 13036kB 时间=187.66 比特率= 569.1kbits/s” (CR 终止,无 LF)
    • 进行除法(时间/持续时间),你就得到了百分比!

我不相信将 ffmpeg 写入日志文件会起作用。至少在 *nix 上,ffmpeg 将此输出写入 std err,并且您需要捕获的状态行没有换行,因此会覆盖之前的状态行。这是您可以在自己的代码中克服的问题。

抱歉,无法帮助解决 VB6 部分,但假设可以直接捕获您 shell 进程的输出。

其他提示

首先请原谅我的英语我是西班牙发言。 我找到了答案。 1 /第一放于预置,我有这个例子的“输出格式MPEG2 DVD HQ”

“ - 了vcodec mpeg2video -vstats_file MFRfile.txt -r 29.97 -s小352x480 -aspect 4:3 -b 4000K -mbd RD -trellis -mv0-CMP 2 -subcmp 2 -acodec MP2 -ab 192K -ar 48000 -ac 2"

此指令可以使一个txt文件不要忘记包括命令“-vstats_file Mitxt.txt”到像的例子中的预设。这会使它在你的文件来源的文件夹音源的ubicadet的报告。你可以把任何名字,如果你想,那么你可以阅读TXT这个例子withthis

私人小组Timer1_Timer() 昏暗strLastLine作为字符串 “例如我的芸香 “C:\ Documents和Settings \ Gortiz \误documentos \ file.txt的”

strLastLine = ReadLastLineOfFile( “C:\ Documents和Settings \ Gortiz \误_ documentos \ file.txt的”“) Lst1.AddItem strLastLine 端子

功能ReadLastLineOfFile(sFileName作为字符串)作为字符串 暗淡objFSO,TS 昏暗sTmpContents作为字符串 设置objFSO =的CreateObject( “Scripting.FileSystemObject的”) 设置TS = objFSO.OpenTextFile(sFileName,1) sTmpContents = TS.ReadAll TS.Close 设置TS =无 设置objFSO =无

ReadLastLineOfFile =分段(sTmpContents,vbCrLf)(UBound函数(分割(sTmpContents,vbCrLf)) - 1) 端功能

在一个名为LST1列表框,你可以看到的结果是。比特率,帧proceced,时间过程的单位为秒。等

问候。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top