Windows FFMPEG-批量提取媒体持续时间并写入文本文件

Windows FFMPEG-批量提取媒体持续时间并写入文本文件,windows,batch-file,cmd,ffmpeg,Windows,Batch File,Cmd,Ffmpeg,我在一个文件夹中有十个媒体文件。我想创建一个包含两列的文本文件-文件名及其持续时间(秒): 我在网上没有发现任何类似的问题,因此我没有任何关于如何执行此操作的提示…枚举媒体文件并解析Duration:行在ffmpeg-I的输出中: @echo off >output.txt ( for %%F in (*.mpg *.mp4 *.mkv *.avi *.m4a *.flac *.mp3 *.wav) do ( for /f "tokens=2-5 delims=:.

我在一个文件夹中有十个媒体文件。我想创建一个包含两列的文本文件-文件名及其持续时间(秒):


我在网上没有发现任何类似的问题,因此我没有任何关于如何执行此操作的提示…

枚举媒体文件并解析
Duration:
行在
ffmpeg-I
的输出中:

@echo off
>output.txt (
    for %%F in (*.mpg *.mp4 *.mkv *.avi *.m4a *.flac *.mp3 *.wav) do (
        for /f "tokens=2-5 delims=:., " %%a in (
            'ffmpeg -i "%%F" 2^>^&1 ^| find "Duration:"'
        ) do (
            set /p =%%~nxF^|<nul
            setlocal enableDelayedExpansion
            set /a "duration=1%%a*3600 + 1%%b*60 + 1%%c - 366100"
            echo !duration!.%%d seconds
            endlocal
        )
    )
)
pause
或者,您可以使用更快的来以毫秒为单位输出持续时间:

>output.txt "C:\Program Files (x86)\MediaInfo\MediaInfoCLI.exe" ^
    --output=General;%%FileName%%.%%FileExtension%%^|%%Duration%%\r\n ^
    *.mpg *.mp4 *.mkv *.avi *.m4a *.flac *.mp3 *.wav

枚举媒体文件并解析
ffmpeg-i
输出中的
Duration:
行:

@echo off
>output.txt (
    for %%F in (*.mpg *.mp4 *.mkv *.avi *.m4a *.flac *.mp3 *.wav) do (
        for /f "tokens=2-5 delims=:., " %%a in (
            'ffmpeg -i "%%F" 2^>^&1 ^| find "Duration:"'
        ) do (
            set /p =%%~nxF^|<nul
            setlocal enableDelayedExpansion
            set /a "duration=1%%a*3600 + 1%%b*60 + 1%%c - 366100"
            echo !duration!.%%d seconds
            endlocal
        )
    )
)
pause
或者,您可以使用更快的来以毫秒为单位输出持续时间:

>output.txt "C:\Program Files (x86)\MediaInfo\MediaInfoCLI.exe" ^
    --output=General;%%FileName%%.%%FileExtension%%^|%%Duration%%\r\n ^
    *.mpg *.mp4 *.mkv *.avi *.m4a *.flac *.mp3 *.wav

对我来说,
ffmpeg
输出中的持续时间字段格式为
hh:nn:ss.cc
,每个字段有两位数字。如果小时、分钟或秒为
08
09
,此代码将失败。此外,如果文件名包含
,则延迟扩展将使其失败它可以工作。通常,在字段前面加上
1
将其转换为100以进行操作更容易。如果您更改
for/f
选项的顺序以将空格包含在
delims
子句中(处理
%%a
中的空格),您可以将其简化为
设置/a“duration=1%%a*3600+1%%b*60+1%%c-366100”
@wOxxOm:谢谢,但是如何“枚举媒体文件”?输出文本文件的名称和路径在哪里?你能为三个媒体文件(“1.mp4”、“2.mp4”和“3.wav”)和“data.txt”输出文件编辑你的答案吗?谢谢,非常优雅@歌词邪恶,看到更新的代码,不要忘记在stackoverflow上你必须投入一些精力:-)@wOxxOm:“不要忘记在stackoverflow上你必须投入一些精力:-)”-这并不总是可能的:)抱歉,我只是不熟悉这种脚本语言。你能解释一下“列举媒体文件”是什么意思吗?如果一个文件夹中有很多文件,但只想处理三个文件——“1.mp4”、“2.mp4”和“3.wav”,该怎么办?如何声明?对于我来说,
ffmpeg
输出中的持续时间字段格式为
hh:nn:ss.cc
,每个字段有两位数字。如果小时、分钟或秒为
08
09
,此代码将失败。此外,如果文件名包含
,则延迟扩展将使其失败它可以工作。通常,在字段前面加上
1
将其转换为100以进行操作更容易。如果您更改
for/f
选项的顺序以将空格包含在
delims
子句中(处理
%%a
中的空格),您可以将其简化为
设置/a“duration=1%%a*3600+1%%b*60+1%%c-366100”
@wOxxOm:谢谢,但是如何“枚举媒体文件”?输出文本文件的名称和路径在哪里?你能为三个媒体文件(“1.mp4”、“2.mp4”和“3.wav”)和“data.txt”输出文件编辑你的答案吗?谢谢,非常优雅@歌词邪恶,看到更新的代码,不要忘记在stackoverflow上你必须投入一些精力:-)@wOxxOm:“不要忘记在stackoverflow上你必须投入一些精力:-)”-这并不总是可能的:)抱歉,我只是不熟悉这种脚本语言。你能解释一下“列举媒体文件”是什么意思吗?如果一个文件夹中有很多文件,但只想处理三个文件——“1.mp4”、“2.mp4”和“3.wav”,该怎么办?我该如何申报?