找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 17224|回复: 2

[日期时间] 批处理+FFmpeg如何指定目录

[复制链接]
发表于 2021-12-27 00:16:32 | 显示全部楼层 |阅读模式
  1. @echo off&setlocal EnableDelayedExpansion

  2. echo 请输入修改前的文件扩展名
  3. set /p type=

  4. echo 请输入修改后的文件扩展名
  5. set /p nowType=

  6. echo 请输入起始尾部数字(累加)
  7. set /p bottom=
  8. if "%bottom%"=="" set bottom=1

  9. echo 请输入头部字符(固定)
  10. set /p Str=

  11. echo 请输入需要修改的文件路径
  12. set /p sourcePath=

  13. for /f "delims=" %%i in ('dir "%sourcePath%" /s /b' ) do (
  14.         set F=%%i
  15.         if exist !F!\ (
  16.                 if not exist !F! ( md "!F!" )
  17.         ) else (
  18.                 if "%type%"==" " (
  19.                         if "%nowType%"=="" (
  20.                                 set nowType=%%~xi
  21.                         )
  22.                         for /f %%j in ('ffprobe -v error -select_streams v:0 -count_packets -show_entries stream^=nb_read_packets -of csv^=p^=0 %%~nxi') do (
  23.                                 set "FrameCount=%%j"
  24.                         )
  25.                         for /f %%j in ('ffprobe -v error -show_entries format^=duration -of default^=noprint_wrappers^=1:nokey^=1 %%~nxi') do (
  26.                                 set "c=%%j"
  27.                         )
  28.                         echo %FrameCount%
  29.                         echo %c%
  30.                         set /a "num=%FrameCount% + %c%"
  31.                         echo %num%
  32.                         ren "!F!" "!Str!!num!.!nowType!"
  33.                         set /A bottom+=1
  34.                 ) else (
  35.                         if "%%~xi"==".%type%" (
  36.                                 ren "!F!" "!Str!!bottom!.!nowType!"
  37.                                 set /A bottom+=1
  38.                         )
  39.                 )
  40.         )
  41. )
  42. echo ----------------------修改完成-------------------------------
  43. pause
复制代码
上面是我写的
原本是这样的
  1. @echo off
  2. for /f %%i in ('ffprobe -v error -select_streams v:0 -count_packets -show_entries stream^=nb_read_packets -of csv^=p^=0 1.mp4') do (
  3.     set "FrameCount=%%i"
  4. )
  5. for /f %%i in ('ffprobe -v error -show_entries format^=duration -of default^=noprint_wrappers^=1:nokey^=1 1.mp4') do (
  6.     set "c=%%i"
  7. )

  8. set /a "num=%FrameCount% + %c%"


  9. pause
复制代码
原本是copy论坛大佬们给别人解答的,但是bat运行只能拿到当前目录下指定一个视频的帧数和时长。
而我想要的是当前目录下包括所有子目录指定扩展名的视频都能获得数据。
代码写的很挫 ,大部分都是参考别人的。新工作因为看到同事用批处理处理事情效率很高,羡慕之下学习了一点。
发表于 2021-12-27 05:34:51 | 显示全部楼层
for /r 就是递归
 楼主| 发表于 2021-12-27 07:54:37 | 显示全部楼层
回复 2# 小小菜鸟
  1. @echo off&setlocal EnableDelayedExpansion

  2. echo 请输入修改前的文件扩展名
  3. set /p type=

  4. echo 请输入修改后的文件扩展名
  5. set /p nowType=

  6. echo 请输入起始尾部数字(累加)
  7. set /p bottom=
  8. if "%bottom%"=="" set bottom=1

  9. echo 请输入头部字符(固定)
  10. set /p Str=

  11. echo 请输入需要修改的文件路径
  12. set /p sourcePath=

  13. for /f "delims=" %%i in ('dir "%sourcePath%" /s /b' ) do (
  14.         set F=%%i
  15.         if exist !F!\ (
  16.                 if not exist !F! ( md "!F!" )
  17.         ) else (
  18.                 if "%type%"==" " (
  19.                         if "%nowType%"=="" (
  20.                                 set nowType=%%~xi
  21.                         )
  22.                         for /f "delims=,[) tokens=5,6,8" %%i in ('ffmpeg -i "!F!" 2^>^&1 ^| find "Video:"') do (       
  23.                                 if "%%i"==" bt709" (
  24.                                         set Ratio=%%j
  25.                                 ) else (
  26.                                         set Ratio=%%i
  27.                                 )
  28.                                 set FPS=%%k
  29.                         )
  30.                         ren "!F!" "!bottom! !Str!!Ratio!!FPS!!nowType!"
  31.                         set /A bottom+=1
  32.                 ) else (
  33.                         if "%%~xi"==".%type%" (
  34.                                 ren "!F!" "!bottom! !Str!!Ratio!!FPS!!nowType!"
  35.                                 set /A bottom+=1
  36.                         )
  37.                 )
  38.         )
  39. )
  40. echo ----------------------修改完成-------------------------------
  41. pause
复制代码
完成了,我自己修正了一遍
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-20 16:50 , Processed in 0.017848 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表