[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
回复 15# idwma

好的,谢谢,我试试

TOP

本帖最后由 thp2008 于 2021-9-10 00:29 编辑

按着idwma的指导我修改了,速度很快,1分钟能生成好几部电影的九宫格预览图。但是有一点,不支持中文文件名,不是批处理不支持,是合并的magick.exe不支持,所以没有办法,把文件名改成英文或者数字,就可以了,生成完,再改回来就可以了。
思路1:如果能在代码中自动实现,首先将文件名记录下来,然后,改个纯字母或者纯数字的名字,生成完九宫格预览图,合成完后,删除掉生成的临时文件,再把文件改回成开始记录的原文件名。就完美的,解决了magick.exe不支持中文文件名的问题。
思路2:其实我在想,因为仅仅是magick.exe不支持中文文件名,我们在截图的时候,命名,就不要使用原文件名,而是纯英文或者数字的方式去命名,反正都是临时文件,合并后,我们再给合并后的预览图,改名成原视频的前缀名就好了,这样也可以解决这个问题,似乎更简单处理。
但是我不知道该如何写,大神们,有空的时候,可以研究一下。

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. cd /d "%~dp0"
  4. for /f "delims=" %%i in ('dir /b /s /a-d "*.mp4" "*.mkv"') do (
  5.     for /f "tokens=2,3,4 delims=:. " %%a in ('ffmpeg -i "%%i" 2^>^&1 ^| find "Duration:"') do (
  6.         set hh=%%a
  7.         set mm=%%b
  8.         set ss=%%c
  9.     )
  10.     if "!hh:~0,1!"=="0" (set /a hh=!hh:~-1!*3600) else (set /a hh=!hh!*3600)
  11.     if "!mm:~0,1!"=="0" (set /a mm=!mm:~-1!*60) else (set /a mm=!mm!*60)
  12.     set /a str=!hh!+!mm!+!ss!
  13.     set /a BianLiang=!str!/10
  14.     set str=!BianLiang!
  15.     for /l %%d in (1,1,9) do (
  16.         ffmpeg -ss !BianLiang! -i "%%i" -frames:v 1 "%%~dpni0%%d.jpg"
  17.         set /a BianLiang=!str!+!BianLiang!
  18.     )
  19.     (for /l %%x in (1,1,9) do (
  20.         echo "%%~dpni0%%x.jpg"
  21.     ))>"filelist.txt"
  22.     "%~dp0MagickFull\magick.exe" montage @filelist.txt -geometry +0+0 -background #00000000 "%%~dpni-YuLan.jpg"
  23.     del /q /f filelist.txt "%%~dpni0*.jpg"
  24. )
复制代码

TOP

我自已研究了一下,按着上面第二种思路,解决了中文文件名的问题,已测试成功。
附上最终版本,给有需要的有缘人。
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. cd /d "%~dp0"
  4. for /f "delims=" %%i in ('dir /b /s /a-d "*.mp4" "*.mkv"') do (
  5.     for /f "tokens=2,3,4 delims=:. " %%a in ('ffmpeg -i "%%i" 2^>^&1 ^| find "Duration:"') do (
  6.         set hh=%%a
  7.         set mm=%%b
  8.         set ss=%%c
  9.     )
  10.     if "!hh:~0,1!"=="0" (set /a hh=!hh:~-1!*3600) else (set /a hh=!hh!*3600)
  11.     if "!mm:~0,1!"=="0" (set /a mm=!mm:~-1!*60) else (set /a mm=!mm!*60)
  12.     set /a str=!hh!+!mm!+!ss!
  13.     set /a BianLiang=!str!/10
  14.     set str=!BianLiang!
  15.     for /l %%d in (1,1,9) do (
  16.         ffmpeg -ss !BianLiang! -i "%%i" -frames:v 1 "TempABC0%%d.jpg"
  17.         set /a BianLiang=!str!+!BianLiang!
  18.     )
  19.     (for /l %%x in (1,1,9) do (
  20.         echo "TempABC0%%x.jpg"
  21.     ))>"filelist.txt"
  22.     "%~dp0MagickFull\magick.exe" montage @filelist.txt -geometry +0+0 -background #00000000 "Temp999-Full.jpg"
  23.      move /y "Temp999-Full.jpg" "%%~dpni-YuLan.jpg"
  24.     del /q /f filelist.txt "TempABC0*.jpg"
  25. )
复制代码

TOP

回复 15# idwma

大神,我又遇到个问题,今天我放在实际目录中运行了,效果较好,速度很快,但是遇到个小问题。我发现有些文件名里有特殊字符,批处理会出错,但也没事。
我修改后,想重新运行,但是里面大部分已经生成完了,已存在,我想在这个批处理里面加上一句,运行前检测 "%%~dpni-YuLan.jpg"这个文件存不存在,如果存在的话就跳过,这样就不会重复了。感谢!

TOP

回复 19# thp2008
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. cd /d "%~dp0"
  4. for /f "delims=" %%i in ('dir /b /s /a-d "*.mp4" "*.mkv"') do (
  5. if not exist "%%~dpni-YuLan.jpg" (
  6.     for /f "tokens=2,3,4 delims=:. " %%a in ('ffmpeg -i "%%i" 2^>^&1 ^| find "Duration:"') do (
  7.         set hh=%%a
  8.         set mm=%%b
  9.         set ss=%%c
  10.     )
  11.     if "!hh:~0,1!"=="0" (set /a hh=!hh:~-1!*3600) else (set /a hh=!hh!*3600)
  12.     if "!mm:~0,1!"=="0" (set /a mm=!mm:~-1!*60) else (set /a mm=!mm!*60)
  13.     set /a str=!hh!+!mm!+!ss!
  14.     set /a BianLiang=!str!/10
  15.     set str=!BianLiang!
  16.     for /l %%d in (1,1,9) do (
  17.         ffmpeg -ss !BianLiang! -i "%%i" -frames:v 1 "TempABC0%%d.jpg"
  18.         set /a BianLiang=!str!+!BianLiang!
  19.     )
  20.     (for /l %%x in (1,1,9) do (
  21.         echo "TempABC0%%x.jpg"
  22.     ))>"filelist.txt"
  23.     "%~dp0MagickFull\magick.exe" montage @filelist.txt -geometry +0+0 -background #00000000 "Temp999-Full.jpg"
  24.      move /y "Temp999-Full.jpg" "%%~dpni-YuLan.jpg"
  25.     del /q /f filelist.txt "TempABC0*.jpg"
  26. )
  27. )
复制代码
1

评分人数

TOP

本帖最后由 thp2008 于 2021-9-10 21:23 编辑

回复 20# idwma


   再次表示感谢,实际环境运行发现,跳过一部分文件后,就退出,好像这样判断不完善。部分信息如下。

omaprint
  libavutil      57.  4.101 / 57.  4.101
  libavcodec     59.  7.102 / 59.  7.102
  libavformat    59.  5.100 / 59.  5.100
  libavdevice    59.  0.101 / 59.  0.101
  libavfilter     8.  7.101 /  8.  7.101
  libswscale      6.  1.100 /  6.  1.100
  libswresample   4.  0.100 /  4.  0.100
  libpostproc    56.  0.100 / 56.  0.100
Invalid duration specification for ss: -i
找不到操作数。
ffmpeg version 2021-09-08-git-5e7e2e5031-full_build-www.gyan.dev Copyright (c) 2000-2021 the FFmpeg developers
  built with gcc 10.3.0 (Rev5, Built by MSYS2 project)
  configuration: --enable-gpl --enable-version3 --enable-static --disable-w32threads --disable-autodetect --enable-fontconfig --enable-iconv --enable-gnutls --enable-libxml2 --enable-gmp --enable-lzma --enable-libsnappy --enable-zlib --enable-librist --enable-libsrt --enable-libssh --enable-libzmq --enable-avisynth --enable-libbluray --enable-libcaca --enable-sdl2 --enable-libdav1d --enable-libzvbi --enable-librav1e --enable-libsvtav1 --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxvid --enable-libaom --enable-libopenjpeg --enable-libvpx --enable-libass --enable-frei0r --enable-libfreetype --enable-libfribidi --enable-libvidstab --enable-libvmaf --enable-libzimg --enable-amf --enable-cuda-llvm --enable-cuvid --enable-ffnvcodec --enable-nvdec --enable-nvenc --enable-d3d11va --enable-dxva2 --enable-libmfx --enable-libglslang --enable-vulkan --enable-opencl --enable-libcdio --enable-libgme --enable-libmodplug --enable-libopenmpt --enable-libopencore-amrwb --enable-libmp3lame --enable-libshine --enable-libtheora --enable-libtwolame --enable-libvo-amrwbenc --enable-libilbc --enable-libgsm --enable-libopencore-amrnb --enable-libopus --enable-libspeex --enable-libvorbis --enable-ladspa --enable-libbs2b --enable-libflite --enable-libmysofa --enable-librubberband --enable-libsoxr --enable-chromaprint
  libavutil      57.  4.101 / 57.  4.101
  libavcodec     59.  7.102 / 59.  7.102
  libavformat    59.  5.100 / 59.  5.100
  libavdevice    59.  0.101 / 59.  0.101
  libavfilter     8.  7.101 /  8.  7.101
  libswscale      6.  1.100 /  6.  1.100
  libswresample   4.  0.100 /  4.  0.100
  libpostproc    56.  0.100 / 56.  0.100
Invalid duration specification for ss: -i
找不到操作数。
montage: unable to open image 'TempABC01.jpg': No such file or directory @ error/blob.c/OpenBlob/3536.
montage: unable to open image 'TempABC02.jpg': No such file or directory @ error/blob.c/OpenBlob/3536.
montage: unable to open image 'TempABC02.jpg': No such file or directory @ error/blob.c/OpenBlob/3536.
montage: unable to open image 'TempABC03.jpg': No such file or directory @ error/blob.c/OpenBlob/3536.
montage: unable to open image 'TempABC03.jpg': No such file or directory @ error/blob.c/OpenBlob/3536.
montage: unable to open image 'TempABC04.jpg': No such file or directory @ error/blob.c/OpenBlob/3536.
montage: unable to open image 'TempABC04.jpg': No such file or directory @ error/blob.c/OpenBlob/3536.
montage: unable to open image 'TempABC05.jpg': No such file or directory @ error/blob.c/OpenBlob/3536.
montage: unable to open image 'TempABC05.jpg': No such file or directory @ error/blob.c/OpenBlob/3536.
montage: unable to open image 'TempABC06.jpg': No such file or directory @ error/blob.c/OpenBlob/3536.
montage: unable to open image 'TempABC06.jpg': No such file or directory @ error/blob.c/OpenBlob/3536.
montage: unable to open image 'TempABC07.jpg': No such file or directory @ error/blob.c/OpenBlob/3536.
montage: unable to open image 'TempABC07.jpg': No such file or directory @ error/blob.c/OpenBlob/3536.
montage: unable to open image 'TempABC08.jpg': No such file or directory @ error/blob.c/OpenBlob/3536.
montage: unable to open image 'TempABC08.jpg': No such file or directory @ error/blob.c/OpenBlob/3536.
montage: unable to open image 'TempABC09.jpg': No such file or directory @ error/blob.c/OpenBlob/3536.
montage: unable to open image 'TempABC09.jpg': No such file or directory @ error/blob.c/OpenBlob/3536.
montage:  `Temp999-Full.jpg' @ error/montage.c/MontageImageCommand/1806.
系统找不到指定的文件。

TOP

返回列表