我们可以在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。
我是 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。