【发布时间】:2020-10-11 00:27:15
【问题描述】:
我正在使用批处理文件生成 html 供个人使用,我的一个部分是获取文件夹中所有 mp4 文件的宽度和高度。这个“mp4 库”可以将文件换出、重命名、添加或提取等...所以我不想在每次更新时手动输入宽度和高度。
下面的代码可以运行,但是速度很慢...有没有办法使用批处理文件使其更快?
for /f %%g in ('dir /B /S *.mp4') do (
set "g=%%g"
set "g=!g:\=/!"
for /f "tokens=1 delims=x" %%a in ('ffprobe -v error -select_streams v:0 -show_entries stream^=width^,height -of csv^=s^=x:p^=0 %%g') do set sW=%%a
for /f "tokens=2 delims=x" %%b in ('ffprobe -v error -select_streams v:0 -show_entries stream^=width^,height -of csv^=s^=x:p^=0 %%g') do set sH=%%b
echo %TAB% %TAB% ^<span^>^ ^<a style="text-decoration:none" class="image" href="file:///!g!" target="_blank"^>^ ^<video width="!sW!" height="!sH!" poster="file:///S:/_Stuff/_Data/_o/6.gif" poster="file:///S:/_Stuff/_Data/_o/6.gif" preload="auto" muted autoplay loop^>^ ^<source src="file:///!g!" type="video/mp4"^>^ ^</video^>^ ^</a^>^ ^</span^>^ >> _01.html 2>nul
)
**更新:我试过这个并且它有效,需要 4 秒和 11 秒,但我刚刚注意到一个新的答案,所以我现在将尝试这个建议!
@echo off
setlocal EnableDelayedExpansion
>_output_test.txt (for /f %%g in ('dir /B /S *.mp4') do (
set "g=%%g"
set "g=!g:\=/!"
REM @echo !g!
for /f "tokens=1,2 delims=x" %%a in ('ffprobe -v error -select_streams v:0 -show_entries stream^=width^,height -of csv^=s^=x:p^=0 %%g') do (
set sW=%%a
set sH=%%b
)
REM @echo !sW!
REM @echo !sH!
@echo %TAB% %TAB% ^<span^>^ ^<a style="text-decoration:none" class="image" href="file:///!g!" target="_blank"^>^ ^<video width="!sW!" height="!sH!" poster="file:///S:/_DaveStuff/_Data/_o/6.gif" preload="auto" muted autoplay loop^>^ ^<source src="file:///!g!" type="video/mp4"^>^ ^</video^>^ ^</a^>^ ^</span^>^
)
)
endlocal
pause
exit
【问题讨论】:
-
1.
FOR /R2. 合并两个FOR循环 3. 将整个FOR循环括起来并重定向它,只打开一次文件 -
请注意,要求提高速度的请求(没有显示您自己这样做的尝试)本质上是偏离主题的代码请求。因此,我建议您尝试实施迄今为止给出的建议,我们不是来为您做这一切的。
-
感谢您的回复。我想我理解“组合”部分,但是重定向它是什么意思?
-
@Compo 对不起,我在这里搜索了很多选项,我会继续自己尝试。我可以发布我已经尝试过的内容吗?
-
目前,对于外部
for /f循环的每次迭代,您都将输出重定向到_01.html。建议只重定向一次。当您将输出重定向到文件时,它会打开文件,写入文件,然后再次关闭它。对每个.mp4文件执行此操作比重定向整个for /f输出要多得多。如果您现在创建的内容需要进一步的帮助,请使用更新的代码更新您的问题。但请准确说明代码的哪一部分需要它,您的问题实际上应该仅限于一个特定的问题,而不是全部。
标签: batch-file ffprobe