【问题标题】:Can we declare a variable in ffmpeg ffprobe我们可以在ffmpeg ffprobe中声明一个变量吗
【发布时间】:2020-07-27 02:42:27
【问题描述】:

我是 ffmpeg 的新手。

我想通过 ffmpeg 获取视频时长并将其声明为变量。我可以将值用于不同的功能。我正在使用电源外壳。

这是我的代码:

ffmpeg -i 1aef53e6-92ac-4d28-89f8-4cce28fa0f58.mp4 2>&1 | sed -n 's/Duration: \(.*\), start/\1/gp'

【问题讨论】:

  • 能否请您添加ffmpeg -i 1aef53e6-92ac-4d28-89f8-4cce28fa0f58.mp4 2>&1 的结果。然后更容易重现您的问题。
  • @Thomas tks 用于快速回放,当我们删除它时,弹出错误““必须指定至少一个输出文件”“

标签: powershell variables ffmpeg ffprobe


【解决方案1】:

如果您已经在 Windows PATH 变量中设置了 ffmpeg 的路径,就像解释 here 一样,这应该会为您提供文件的持续时间值:

$filename = '1aef53e6-92ac-4d28-89f8-4cce28fa0f58.mp4'
$duration = if ((ffmpeg -i $filename 2>&1 | Out-String) -match 'Duration:\s+([\d:.]+)') { $matches[1] }

请注意,$duration 之后是一个字符串。
如果你需要创建一个 TimeSpan 这个对象,使用:

$t = [TimeSpan]::Parse($duration)

【讨论】:

    【解决方案2】:

    不要使用ffmpeg 来获取持续时间:它的输出不是机器解析的,而且很混乱。

    使用ffprobe:

    $duration = ffprobe -v error -show_entries format=duration -of csv=p=0 input.mp4
    
    • 这将以秒为单位给出持续时间。如果您想要 HH:MM:SS 格式,请添加 -sexagesimal 选项。

    • 无需使用sed、正则表达式等进行任何额外处理,因为ffprobe 将直接为您提供持续时间且仅提供持续时间。

    • 更多信息请访问FFmpeg Wiki: FFprobe Tipsffprobe documentation

    【讨论】:

      猜你喜欢
      • 2022-01-09
      • 2016-02-29
      • 1970-01-01
      • 1970-01-01
      • 2011-05-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多