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

时间:2020-04-14 11:22:05

标签: powershell variables ffmpeg ffprobe

我是ffmpeg的新手。

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

这是我的代码:

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

不要使用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

相关问题