【问题标题】:PHP - Actively refresh exec function result?PHP - 主动刷新 exec 函数结果?
【发布时间】:2020-09-28 15:33:23
【问题描述】:

我对这种使用 PHP 的方式没有经验,但我喜欢创建一些变量,例如 $test,我们知道它是 exec("ffmpeg ..."),ffmpeg 确实会主动改变它的结果,而PHP 只是等到命令完成,是否有一个选项,我会执行命令并通过刷新页面来获得结果的活动形式,因为我想制作一个进度条和其他东西,但这似乎是不可能的我现在。我已经尝试过基本的东西,但正如我所见,我不知道该怎么做,有什么建议可以做到吗?请不要关闭这个,我真的很难做这些事情,而且每次人们都只是在这里提出问题而拒绝我

【问题讨论】:

  • FWIW:stackoverflow.com/questions/34867202/ffmpeg-progress-bar-in-php 您的问题可能因过于宽泛而被关闭。提供代码并提出特定问题会得到更好的答案。因为这是相当广泛的,可能最好在谷歌上搜索,直到您更好地了解您的选择是什么。
  • ficuscr 是正确的,这个问题太宽泛了。这样的问题不会引起太多关注。您需要 ffmpeg 部分的帮助吗? PHP部分?两个都?如果两者都应该分为两个单独的问题来解决每个单独的主题。因为它是提供全面答案的人,所以必须知道这两个主题。话虽如此,我提供了有关 ffmpeg 的答案。

标签: php ffmpeg


【解决方案1】:

由于您的问题如此广泛,我只能给您一个广泛的答案,显示您问题的ffmpeg 部分的基本步骤(我也不知道 PHP)。它应该足以让您能够将其实施到您的脚本中。

使用-progress

您可以使用ffmpeg 中的-progress 全局选项将进度信息连续输出到文本文件:

ffmpeg -progress progress.txt -i input.avi output.mp4

来自documentation

-progress url(全球)
将程序友好的进度信息发送到 url。

进度信息大约每秒写入一次 编码过程结束。它由key=value 行组成。 密钥仅由字母数字字符组成。 a的最后一个键 进度信息序列始终为progress

示例输出

进度文件的示例摘录:

frame=106
fps=23.33
stream_0_0_q=28.0
bitrate=   0.2kbits/s
total_size=48
out_time_us=2080078
out_time_ms=2080078
out_time=00:00:02.080078
dup_frames=0
drop_frames=0
speed=0.458x
progress=continue

请注意,这仅在您知道输出的最终持续时间或帧数时才有用。如果您知道输入和输出的持续时间或帧数大致相同,那么使用它应该没有问题。但当然这取决于你的命令。

获取持续时间或帧数

一旦您知道持续时间或帧数,您就可以使用frameout_time_ms 来确定查询间隔的进度。

您可以使用ffprobe 来确定输入信息:

另见:

【讨论】:

    猜你喜欢
    • 2010-09-05
    • 2014-04-23
    • 2019-03-18
    • 1970-01-01
    • 2016-02-09
    • 2012-02-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多