如何使用ffprobe&amp ;;返回视频/图像的宽度和高度批量

时间:2016-06-29 12:50:14

标签: windows batch-file command-line ffmpeg ffprobe

我需要使用ffprobe获取图像文件的宽度和高度,并且需要使用批处理(Windows)将其存储在变量中,以便稍后我可以使用这些值。

我试着这样做,

@echo off
for /f "tokens=1-2" %%i in ('ffprobe -v error -of flat=s=_ -select_streams v:0 -show_entries stream=width,height %1') do set W=%%i & set H=%%j
echo %W%
echo %H%

但无法用

执行
Argument '_' provided as input filename, but 's' was already specified.

P.S。我也以类似的方式尝试了imagemagick识别,但似乎识别在返回GIF文件的高度时有一个错误

3 个答案:

答案 0 :(得分:1)

我已经设法调整你的脚本并且它正常工作,你可以尝试这种方式:

@echo off
ffprobe -v error -of flat=s=_ -select_streams v:0 -show_entries stream=width %1 >> width.txt
ffprobe -v error -of flat=s=_ -select_streams v:0 -show_entries stream=height %1 >> height.txt
FOR /f "tokens=5 delims==_" %%i in (width.txt) do @set width=%%i
FOR /f "tokens=5 delims==_" %%i in (height.txt) do @set height=%%i
echo width=%width%
echo height=%height%
del width.txt && del height.txt
pause

答案 1 :(得分:0)

只需转义=字符^并拆分以检索w和h(可能有办法立即检索它们但我不知道)。

@echo off

for /f "tokens=5 delims==_" %%i in ('ffprobe -v error -of flat^=s^=_ -select_streams v:0 -show_entries stream^=width %1') do set W=%%i
echo %W%

for /f "tokens=5 delims==_" %%i in ('ffprobe -v error -of flat^=s^=_ -select_streams v:0 -show_entries stream^=height %1') do set H=%%i
echo %H%

答案 2 :(得分:0)

我认为答案过于夸张。只是一个ffprobe命令,没有写入文件,没有控制台消息:

for /f "delims=" %%a in ('ffprobe -hide_banner -show_streams %1 2^>nul ^| findstr "^width= ^height="') do set "mypicture_%%a"

然后以漂亮的环境变量mypicture_widthmypicture_height结尾。您可以使用以下方法进行检查:

C:\>set mypicture_
mypicture_height=480
mypicture_width=640

当然,如果您的图片尺寸为640x480。