返回列表 发帖

[文件操作] 批处理怎样在文件夹后追加文件夹内视频总时长?

实现 在文件夹文件名后插入文件夹内视频文件总时长,
以分钟形式表示,如果秒数不为0,则在分钟上+1.
如,文件夹内视频总时和1小时5分1秒,计算后标记66,再分钟前后分别加“【” “】”


如使用第三方软件,需要在BAT里设置文件路径,如使用ffmpeg,要在bat标记路径,如D:\tool\ffmpeg.exe
链接:https://pan.baidu.com/s/1l0uoyc616V4REeioKOzc6w?pwd=qcef
提取码:qcef
--来自百度网盘超级会员V10的分享

谢谢

没有处理秒
将文件夹拖到bat上,显示正确,去掉 ren 前的 echo
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
set folder=%1
pushd %folder%
set/a time=0
for /f "usebackq" %%a in (` dir /b *.mkv `) do (
for /f "usebackq tokens=2,3 delims=: " %%i in (` "ffprobe.exe %%a 2>&1 | findstr Duration" `) do (
set /a time+=%%i*60+%%j
)
)
popd
echo ren %folder% %folder%[%time%]
pause
exit/bCOPY

TOP

本帖最后由 qd2024 于 2024-1-27 23:44 编辑

回复 2# newswan


    感谢 视频扩展名改为mp4  测试没有成功 帮忙看看

TOP

回复 3# qd2024


将文件夹拖到bat上
或者 手动设置 folder 变量

TOP

回复 4# newswan


    对的 就是拖文件夹到 BAT上 出现这样提示

TOP



这个不能用吗
bat小白,请多指教!谢谢!

TOP

批处理保存为ansi编码呢

QQ 20147578

TOP

回复 7# czjt1234


    试了 提示一样的

TOP

回复 6# 77七


    我试试

TOP

路径有空格?
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
set folder=%~1
set ffPath=D:\Program Files
pushd "%folder%"
set/a time=0
for /f "usebackq" %%a in (` dir /b *.mkv `) do (
for /f "usebackq tokens=2,3 delims=: " %%i in (` ""%ffpath%\ffprobe.exe" %%a 2>&1 | findstr Duration" `) do (
set /a time+=%%i*60+%%j+1
)
)
echo %time%
popd
echo ren "%folder%" "%folder%[%time%]"
pause
exit/bCOPY

TOP

ai 给了一个直接获取时长的方法
ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 input.mp4
30.024000COPY

TOP

本帖最后由 ppll2030 于 2024-1-28 22:17 编辑

二楼的时间好像有问题,我段位低,理解不了。
所以用Batcher大大的分段截取代码,再组合一下。
楼主可以试试。
@echo off
setlocal enabledelayedexpansion
set folder=%~1
set ffpath=H:\共享影视\Download\FFmpeg\ffmpeg.exe
pushd "%folder%"
for /f "delims=" %%i in ('dir /b /s /a-d *.avi *.mkv *.mp4 *.rmvb *.wmv') do (
    for /f "tokens=2 delims=, " %%a in ('%ffpath% -i "%%i" 2^>^&1 ^| find "Duration:"') do set "str=%%a"
    set str=!str:~0,-3!
    for /f "tokens=1-3 delims=:" %%x in ("!str!") do (
        set "hh=%%x"
        set "mm=%%y"
        set "ss=%%z"
        set /a minutes=1!hh!*60-6000
        set /a minutes+=1!mm!-100
        if !ss! neq 0 (set /a minutes+=1)
    )
   set /a  Totalduration+=!minutes!  
)
popd
echo ren "%~1" "%~n1【!Totalduration!】"
pauseCOPY

TOP

文件名可能有空格
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
set folder=%~1
set ffPath=D:\Program Files
pushd "%folder%"
set/a time=0
for /f "usebackq tokens=* delims=" %%a in (` dir /b *.mkv `) do (
for /f "usebackq tokens=2,3 delims=: " %%i in (` ""%ffpath%\ffprobe.exe" "%%a" 2>&1 | findstr Duration" `) do (
set /a time+=%%i*60+%%j+1
)
)
echo %time%
popd
echo ren "%folder%" "%folder%[%time%]"
pause
exit/bCOPY

TOP

回复 10# newswan
提示如下图,帮我再看看,我上传例子文件到百度云盘了,谢谢。


    链接:https://pan.baidu.com/s/1mPzdlyhFy4UY1l6OECw7IA?pwd=nro4
提取码:nro4
--来自百度网盘超级会员V10的分享

TOP

回复 12# ppll2030

提示如下图,帮我再看看,我上传例子文件到百度云盘了,谢谢。

链接:https://pan.baidu.com/s/1mPzdlyhFy4UY1l6OECw7IA?pwd=nro4
提取码:nro4
--来自百度网盘超级会员V10的分享

TOP

返回列表