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

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

video1.mp4|300 seconds video2.mp4|360 seconds video3.mp4|420 seconds ... audio10.wav|120 seconds 

我没有在网上find任何类似的问题,所以我没有任何暗示如何做到这一点…

枚举媒体文件并在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 

使用ffprobe (ffmpeg包的一部分),持续时间将具有微秒精度:

 @echo off >output.txt ( for %%F in (*.mpg *.mp4 *.mkv *.avi *.m4a *.flac *.mp3 *.wav) do ( for /f "tokens=2 delims==" %%a in ( 'ffprobe "%%F" -show_entries format^=duration -v quiet -of compact' ) do ( echo %%~nxF^|%%a seconds ) ) ) pause 

或者,您可以使用更快的 MediaInfo CLI以毫秒为单位输出持续时间:

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