如何使用 ffprobe 和批处理 return video/image 的宽度和高度
How to return width and height of a video/image using ffprobe & batch
我需要使用 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 identify,但似乎 identify 在返回 GIF 文件的高度时有错误
我已经设法调整你的脚本并且它正在工作,你可以试试这个方法:
@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
只需转义 =
字符 ^
并拆分以检索 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%
我认为这些答案有些矫枉过正。只是一个 ffprobe
命令,没有写入文件,没有控制台消息:
for /f "delims=" %%a in ('ffprobe -hide_banner -show_streams %1 2^>nul ^| findstr "^width= ^height="') do set "mypicture_%%a"
你以漂亮的环境变量 mypicture_width
和 mypicture_height
结束。您可以通过以下方式查看:
C:\>set mypicture_
mypicture_height=480
mypicture_width=640
当然,如果你的图片尺寸是 640x480。
我需要使用 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 identify,但似乎 identify 在返回 GIF 文件的高度时有错误
我已经设法调整你的脚本并且它正在工作,你可以试试这个方法:
@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
只需转义 =
字符 ^
并拆分以检索 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%
我认为这些答案有些矫枉过正。只是一个 ffprobe
命令,没有写入文件,没有控制台消息:
for /f "delims=" %%a in ('ffprobe -hide_banner -show_streams %1 2^>nul ^| findstr "^width= ^height="') do set "mypicture_%%a"
你以漂亮的环境变量 mypicture_width
和 mypicture_height
结束。您可以通过以下方式查看:
C:\>set mypicture_
mypicture_height=480
mypicture_width=640
当然,如果你的图片尺寸是 640x480。