我们可以在ffmpeg ffprobe中声明一个变量吗

Can we declare a variable in ffmpeg ffprobe

我是 ffmpeg 的新手。

我想通过ffmpeg获取一段视频时长,声明给一个变量。我可以在哪里使用不同功能的值。我正在使用电源 shell。

这是我的代码:

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

假设您已经在 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)

不要使用 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 Tips and ffprobe documentation