本帖最后由 thp2008 于 2021-9-10 00:29 编辑
按着idwma的指导我修改了,速度很快,1分钟能生成好几部电影的九宫格预览图。但是有一点,不支持中文文件名,不是批处理不支持,是合并的magick.exe不支持,所以没有办法,把文件名改成英文或者数字,就可以了,生成完,再改回来就可以了。
思路1:如果能在代码中自动实现,首先将文件名记录下来,然后,改个纯字母或者纯数字的名字,生成完九宫格预览图,合成完后,删除掉生成的临时文件,再把文件改回成开始记录的原文件名。就完美的,解决了magick.exe不支持中文文件名的问题。
思路2:其实我在想,因为仅仅是magick.exe不支持中文文件名,我们在截图的时候,命名,就不要使用原文件名,而是纯英文或者数字的方式去命名,反正都是临时文件,合并后,我们再给合并后的预览图,改名成原视频的前缀名就好了,这样也可以解决这个问题,似乎更简单处理。
但是我不知道该如何写,大神们,有空的时候,可以研究一下。
。- @echo off
- setlocal enabledelayedexpansion
- cd /d "%~dp0"
- for /f "delims=" %%i in ('dir /b /s /a-d "*.mp4" "*.mkv"') do (
- for /f "tokens=2,3,4 delims=:. " %%a in ('ffmpeg -i "%%i" 2^>^&1 ^| find "Duration:"') do (
- set hh=%%a
- set mm=%%b
- set ss=%%c
- )
- if "!hh:~0,1!"=="0" (set /a hh=!hh:~-1!*3600) else (set /a hh=!hh!*3600)
- if "!mm:~0,1!"=="0" (set /a mm=!mm:~-1!*60) else (set /a mm=!mm!*60)
- set /a str=!hh!+!mm!+!ss!
- set /a BianLiang=!str!/10
- set str=!BianLiang!
- for /l %%d in (1,1,9) do (
- ffmpeg -ss !BianLiang! -i "%%i" -frames:v 1 "%%~dpni0%%d.jpg"
- set /a BianLiang=!str!+!BianLiang!
- )
- (for /l %%x in (1,1,9) do (
- echo "%%~dpni0%%x.jpg"
- ))>"filelist.txt"
- "%~dp0MagickFull\magick.exe" montage @filelist.txt -geometry +0+0 -background #00000000 "%%~dpni-YuLan.jpg"
- del /q /f filelist.txt "%%~dpni0*.jpg"
- )
复制代码
|