Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 添加用于重命名视频批处理的输出文件_Excel_Ms Access_Video_Batch File_Frame Rate - Fatal编程技术网

Excel 添加用于重命名视频批处理的输出文件

Excel 添加用于重命名视频批处理的输出文件,excel,ms-access,video,batch-file,frame-rate,Excel,Ms Access,Video,Batch File,Frame Rate,感谢David Ruhmann,昨天我得到了用于重命名视频的批处理文件: @echo off setlocal EnableExtensions EnableDelayedExpansion :: Create Empty Folder rd /Q "%Temp%\Temp" 2>nul & mkdir "%Temp%\Temp" :: Loop through Folders pushd "xPath=c:\processing" for /d %%D in (*) do c

感谢David Ruhmann,昨天我得到了用于重命名视频的批处理文件:

@echo off
setlocal EnableExtensions EnableDelayedExpansion

:: Create Empty Folder
rd /Q "%Temp%\Temp" 2>nul & mkdir "%Temp%\Temp"

:: Loop through Folders
pushd "xPath=c:\processing"
for /d %%D in (*) do call :Process "%%~fD"
popd
goto End


::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:Process <Parent>
:: Folder Name
set "xFolder=%~nx1"

:: Set Sub Folder
if not exist "%~1\VIDEO\" goto :eof
pushd "%~1\VIDEO"

:: Loop through Videos
for /f "delims=" %%A in ('dir *.avi /b') do if exist "%%~fA" (
    set "xDateWritten=%%~tA"
    set "xDateGMT=0000/00/00 00:00:00"
    for /f "tokens=1,2" %%X in ('robocopy . "%Temp%\Temp" "%%~nxA" /TS /FP /NS /NC /NP /NJH /NJS /NDL /L') do set "xDateGMT=%%X %%Y"
    rem Format = FF-FF-YYYYMMDD-HHh-MMm-SSs-FF-FF.ext
    echo %xFolder:~0,2%-%xFolder:~2,2%-!xDateWritten:~6,4!!xDateWritten:~0,2!!xDateWritten:~3,2!-!xDateWritten:~11,2!h-!xDateWritten:~14,2!m-!xDateGMT:~17,2!s-%xFolder:~4,2%-%xFolder:~6,2%%%~xA
    ren "%%~fA" "%xFolder:~0,2%-%xFolder:~2,2%-!xDateWritten:~6,4!!xDateWritten:~0,2!!xDateWritten:~3,2!-!xDateWritten:~11,2!h-!xDateWritten:~14,2!m-!xDateGMT:~17,2!s-%xFolder:~4,2%-%xFolder:~6,2%%%~xA"
)
popd
goto :eof


:End
endlocal
pause
@echo关闭
setlocal EnableExtensions EnableDelayedExpansion
::创建空文件夹
rd/Q“%Temp%\Temp”2>nul&mkdir“%Temp%\Temp”
::循环浏览文件夹
pushd“xPath=c:\processing”
对于(*)中的/d%%d,执行调用:处理“%%~fD”
邻苯二胺
转到终点
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:进程
::文件夹名称
设置“xFolder=%~nx1”
::设置子文件夹
如果不存在“%~1\VIDEO\”转到:eof
pushd“%~1\VIDEO”
::循环浏览视频
对于/f“delims=”('dir*.avi/b')中的%%A,如果存在则执行“%%~fA”(
设置“xDateWrite=%%~tA”
设置“xDateGMT=0000/00/00:00:00”
对于('robocopy.%Temp%\Temp”“%~nxA”/TS/FP/NS/NC/NP/NJH/NJS/NDL/L)中的/f“令牌=1,2”%%X,请设置“xDateGMT=%%X%%Y”
rem格式=FF-FF-YYYYMMDD-HHh-MMm-SSs-FF-FF.ext
echo%xFolder:~0,2%-%xFolder:~2,2%!xDateWrited:~6,4!!xDateWrited:~0,2!!xDateWrited:~3,2!-!xDateWrited:~11,2!h-!xDateWrited:~14,2!m-!xDateGMT:~17,2!s-%xFolder:~4,2%-%xFolder:~6,2%%xA
ren“%%~fA”“%xFolder:~0,2%-%xFolder:~2,2%!xDateWrited:~6,4!!xDateWrited:~0,2!!xDateWrited:~3,2!-!xDateWrited:~11,2!h-!xDateWrited:~14,2!m-!xDateGMT:~17,2!s-%xFolder:~4,2%-%xFolder:~6,2%%~xA”
)
邻苯二胺
后藤:eof
:结束
端部
暂停

但现在我需要添加一个附加功能。重命名完成后,我希望脚本将新文件名、文件大小(以字节为单位)以及视频长度导出到csv或其他excel兼容的文件类型。因为这些都是视频文件,如果我能导出帧率和总帧数,那就太好了。不确定这是否在批处理文件的范围内。

这里有一个修改,可以将名称和大小导出到csv文件

改变这个

echo %xFolder:~0,2%-%xFolder:~2,2%-!xDateWritten:~6,4!!xDateWritten:~0,2!!xDateWritten:~3,2!-!xDateWritten:~11,2!h-!xDateWritten:~14,2!m-!xDateGMT:~17,2!s-%xFolder:~4,2%-%xFolder:~6,2%%%~xA
ren "%%~fA" "%xFolder:~0,2%-%xFolder:~2,2%-!xDateWritten:~6,4!!xDateWritten:~0,2!!xDateWritten:~3,2!-!xDateWritten:~11,2!h-!xDateWritten:~14,2!m-!xDateGMT:~17,2!s-%xFolder:~4,2%-%xFolder:~6,2%%%~xA"
set "xName=%xFolder:~0,2%-%xFolder:~2,2%-!xDateWritten:~6,4!!xDateWritten:~0,2!!xDateWritten:~3,2!-!xDateWritten:~11,2!h-!xDateWritten:~14,2!m-!xDateGMT:~17,2!s-%xFolder:~4,2%-%xFolder:~6,2%%%~xA"
进入这个

set "xFrame=00,00000"
for /f %%X in ('exiftool -p "$Framerate,$Framecount" "%%~fA"') do set "xFrame=%%~X"
set "xSize=%%~zA"
set "xName=%xFolder:~0,2%-%xFolder:~2,2%-!xDateWritten:~6,4!!xDateWritten:~0,2!!xDateWritten:~3,2!-!xDateWritten:~11,2!h-!xDateWritten:~14,2!m-!xDateGMT:~17,2!s-%xFolder:~4,2%-%xFolder:~6,2%%%~xA"
echo !xName!
ren "%%~fA" "!xName!"
echo !xName!,!xSize!,!xFrame!>>C:\RenameOutput.csv
set "xHour=!xDateWritten:~11,2!"
if "!xDateWritten:~17,2!"=="PM" set /a "xHour+=12"
set "xName=%xFolder:~0,2%-%xFolder:~2,2%-!xDateWritten:~6,4!!xDateWritten:~0,2!!xDateWritten:~3,2!-!xHour!h-!xDateWritten:~14,2!m-!xDateGMT:~17,2!s-%xFolder:~4,2%-%xFolder:~6,2%%%~xA"
更新:

要获取媒体文件信息,我们必须使用第三方工具。比如

  • 通过快速查看ExifTool和MediaInfo,我更喜欢MediaInfo,因为它的媒体文件持续时间输出格式更加一致。如何解析信息的示例

    for /f "tokens=2,*" %X in ('mediainfo file.avi ^| find "Duration "') do @echo %Y
    
    更新2:

    在答案中添加了exiftool示例。

    这是对我们的长评论流的回复。 改变这个

    echo %xFolder:~0,2%-%xFolder:~2,2%-!xDateWritten:~6,4!!xDateWritten:~0,2!!xDateWritten:~3,2!-!xDateWritten:~11,2!h-!xDateWritten:~14,2!m-!xDateGMT:~17,2!s-%xFolder:~4,2%-%xFolder:~6,2%%%~xA
    ren "%%~fA" "%xFolder:~0,2%-%xFolder:~2,2%-!xDateWritten:~6,4!!xDateWritten:~0,2!!xDateWritten:~3,2!-!xDateWritten:~11,2!h-!xDateWritten:~14,2!m-!xDateGMT:~17,2!s-%xFolder:~4,2%-%xFolder:~6,2%%%~xA"
    
    set "xName=%xFolder:~0,2%-%xFolder:~2,2%-!xDateWritten:~6,4!!xDateWritten:~0,2!!xDateWritten:~3,2!-!xDateWritten:~11,2!h-!xDateWritten:~14,2!m-!xDateGMT:~17,2!s-%xFolder:~4,2%-%xFolder:~6,2%%%~xA"
    
    进入这个

    set "xFrame=00,00000"
    for /f %%X in ('exiftool -p "$Framerate,$Framecount" "%%~fA"') do set "xFrame=%%~X"
    set "xSize=%%~zA"
    set "xName=%xFolder:~0,2%-%xFolder:~2,2%-!xDateWritten:~6,4!!xDateWritten:~0,2!!xDateWritten:~3,2!-!xDateWritten:~11,2!h-!xDateWritten:~14,2!m-!xDateGMT:~17,2!s-%xFolder:~4,2%-%xFolder:~6,2%%%~xA"
    echo !xName!
    ren "%%~fA" "!xName!"
    echo !xName!,!xSize!,!xFrame!>>C:\RenameOutput.csv
    
    set "xHour=!xDateWritten:~11,2!"
    if "!xDateWritten:~17,2!"=="PM" set /a "xHour+=12"
    set "xName=%xFolder:~0,2%-%xFolder:~2,2%-!xDateWritten:~6,4!!xDateWritten:~0,2!!xDateWritten:~3,2!-!xHour!h-!xDateWritten:~14,2!m-!xDateGMT:~17,2!s-%xFolder:~4,2%-%xFolder:~6,2%%%~xA"
    

    完整脚本(添加注释)

    @echo关闭
    setlocal EnableExtensions EnableDelayedExpansion
    ::创建空文件夹
    rd/Q“%Temp%\Temp”2>nul&mkdir“%Temp%\Temp”
    ::循环浏览文件夹
    pushd“xPath=c:\processing”
    对于(*)中的/d%%d,执行调用:处理“%%~fD”
    邻苯二胺
    转到终点
    ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    :进程
    ::文件夹名称
    设置“xFolder=%~nx1”
    ::设置子文件夹
    如果不存在“%~1\VIDEO\”转到:eof
    pushd“%~1\VIDEO”
    ::循环浏览视频
    对于/f“delims=”('dir*.avi/b')中的%%A,如果存在则执行“%%~fA”(
    rem检索文件时间戳
    设置“xDateWrite=%%~tA”
    rem使用RoboCopy检索秒数
    设置“xDateGMT=0000/00/00:00:00”
    对于('robocopy.%Temp%\Temp”“%~nxA”/TS/FP/NS/NC/NP/NJH/NJS/NDL/L)中的/f“令牌=1,2”%%X,请设置“xDateGMT=%%X%%Y”
    rem检索视频帧信息
    设置“xFrame=0000000”
    对于/f%%X in('exiftool-p“$Framerate,$Framecount”“%%~fA“'),请设置“xFrame=%%~X”
    rem检索文件大小
    设置“xSize=%%~zA”
    rem调整为24小时
    设置“xHour=!xDateWrited:~11,2!”
    如果“!xDateWrited:~17,2!”==“PM”集/a“xHour+=12”
    rem格式=FF-FF-YYYYMMDD-HHh-MMm-SSs-FF-FF.ext
    设置“xName=%xFolder:~0,2%-%xFolder:~2,2%-!xDateWrited:~6,4!!xDateWrited:~0,2!!xDateWrited:~3,2!-!xHour!h-!xDateWrited:~14,2!m-!xDateGMT:~17,2!s-%xFolder:~4,2%-%xFolder:~6,2%%xFolder:~xA”
    rem显示、重命名和保存
    echo!xName!
    任“%%~fA”!xName!”
    echo!xName!,!xSize!,!xFrame!>>C:\RenameOutput.csv
    )
    邻苯二胺
    后藤:eof
    :结束
    端部
    暂停
    
    close,但输出的持续时间只是给出了结束时间,而不是视频的实际持续时间。对于我当前使用的测试文件,视频将在上午7:00开始,并在上午7:30结束,给我们30分钟的持续时间,无论哪种方式,都需要几秒钟。@Shiken啊,我明白了。所以你需要实际的长度。有两种方法可以让我们从我头脑中了解到的信息中获得这些信息。1.通过第三方视频命令行工具。2.长度=上次写入-创建日期(如果在原始写入之后进行任何修改,则可能不准确)@Shiken 1。exiftool可能是我的首选(,)2。MediaInfo()或3。FFMPEGA在使用exiftool之后,exiftool-csv-r-framerate-framecount%1>>c:\processing\exifoutput.csv提供了我目前所需的信息,现在我只想知道如何将其与旧代码合并。@Shiken我已经在回答中添加了关于如何添加exiftool输出的内容。是否有一种特定的格式,您想要它的大小,长度、帧速率和要输入的帧数?示例:Length=00h00m00s00ms或00:00:00:00size=bytes xxx,xxx,xxx Length=hh:mm:ss framerate=xx max frames=xxxxx edit:从技术上讲,如果我们要拉帧,我们不需要持续时间,它只会在需要时用于计算最大帧。