Board logo

标题: [日期时间] 批处理+FFmpeg如何指定目录 [打印本页]

作者: walkerXu    时间: 2021-12-27 00:16     标题: 批处理+FFmpeg如何指定目录

  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

for /r 就是递归
作者: walkerXu    时间: 2021-12-27 07:54

回复 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
复制代码
完成了,我自己修正了一遍




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2