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

[其他] [分享]ffmpeg视频无损分割合并

有时候下载的视频有精彩部分需要保存,需要删除不需要的,可以用的到
保存为ANSI编码,拖拽文件到BAT即可
  1. @if(0)==(0) echo off&setlocal EnableDelayedExpansion&cd %~dp0
  2. title ffmpeg视频无损分割合并&echo 即将删除视频所在目录"New"文件夹
  3. :main
  4. set /p input=请输入路径或拖拽文件:
  5. if not defined input goto main
  6. rem ffmpeg.exe分解视频
  7. del /f /s /q "%~dp0New\*.*">nul 2>nul
  8. @for %%i in (!input!) do (md "New"
  9.      ffmpeg.exe  -i "%%i" -acodec copy -f segment -vcodec copy -reset_timestamps 1 -map 0 "%~dp0New\%%d.mp4"
  10.         cls&echo 已经分割到New文件夹,可以删除不要片段&echo;
  11. pause
  12. rem 列出文件名
  13. cd "%~dp0New"
  14.     @for /f "delims=" %%j in ('dir /b/a-d/on "*.mp4"^|cscript -nologo -e:jscript "%~f0"') do (
  15.             echo;file %%j>>New.txt&echo; 合并文件 %%j
  16.     )
  17.     echo;& echo 即将合并视频为New.mp4
  18. )
  19. pause
  20. rem 合并文件
  21. ffmpeg -f concat -i New.txt -vcodec copy -acodec copy %~dp0New.mp4
  22.     cls&echo 新文件保存路径%~dp0New.mp4&echo;
  23. pause&exit /b
  24. @end
  25. var str=WScript.StdIn.ReadAll().split('\n')
  26. str.sort(function(a,b){return a.length - b.length;})
  27. WScript.Echo(str.join('\n'))
复制代码
ffmpeg单独合并
  1. @if(0)==(0) echo off&setlocal EnableDelayedExpansion&cd %~dp0
  2. title 获取"New"文件夹的MP4文件名合并视频
  3. type nul>"%~dp0New\New.txt"
  4. rem 列出文件名
  5. cd "%~dp0New"
  6.     @for /f "delims=" %%j in ('dir /b/a-d/on "*.mp4"^|cscript -nologo -e:jscript "%~f0"') do (
  7.             echo;file %%j>>New.txt&echo; 合并文件 %%j
  8.     )
  9.     echo;& echo 即将合并视频为New.mp4
  10. )
  11. pause
  12. rem 合并文件
  13. ffmpeg -f concat -i New.txt -vcodec copy -acodec copy %~dp0New.mp4
  14.     cls&echo 新文件保存路径%~dp0New.mp4&echo;
  15. pause&exit /b
  16. @end
  17. var str=WScript.StdIn.ReadAll().split('\n')
  18. str.sort(function(a,b){return a.length - b.length;})
  19. WScript.Echo(str.join('\n'))
复制代码

ffmpeg.exe下载后放入C:\Windows\System32
目前发现合不同编码的不同视频不能强行合并,不然可能后面不能播放,
有的视频强行从中间非关键帧处分割,合并后也会造成后面某个片段无视频一会

TOP

本帖最后由 xp3000 于 2022-9-27 23:05 编辑

上面的要打开BAT,这个直接拖视频到BAT,按照时间段分割一部分出来再删除
  1. @if(0)==(0) echo off& setlocal EnableDelayedExpansion&cd %~dp0
  2. title ffmpeg视频按时间段无损分割合并&echo 即将删除视频所在目录"New"文件夹
  3. if "%~1"=="" echo,请拖入需要转换的文件到本文件上&pause&exit /b
  4. :ss
  5. set /p ss=请输入开始时间(例:00:00:13.021):
  6. @for /f "delims=" %%i in ('echo %ss%^|cscript -nologo -e:jscript "%~f0"') do (
  7. if not "%%i"=="正确" echo. & echo 时间格式不对,请重新输入 & goto ss
  8. )
  9. :to
  10. set /p to=请输入结束时间(例:00:00:35.700):
  11. @for /f "delims=" %%j in ('echo %to%^|cscript -nologo -e:jscript "%~f0"') do (
  12. if not "%%j"=="正确" echo. & echo.时间格式不对,请重新输入 & goto to
  13. )
  14. del /f /s /q "%~dp0New\*.*">nul 2>nul
  15. rem ffmpeg.exe分解视频
  16. @for %%a in (%*.*) do (md "New"&cd "New"
  17. ffmpeg -ss %ss% -t %to% -i "%%a"  -acodec copy -f segment -vcodec copy -reset_timestamps 1 -map 0 "%%d.mp4"
  18. cls&echo 即将列出文件名,可以把New文件夹不需要的片段删除 &echo.
  19. pause
  20. rem 列出文件名
  21. setlocal
  22. @for /f "delims=" %%i in ('dir /b/a-d/on "*.mp4"') do (
  23. set "str=%%i##########"&set "str2=!str:~,12!"&set "str3=!str2:%%i=!"&set "_!str3!%%i=str3"
  24. )
  25. @for /f "delims==_" %%j in ('set _') do (set "str=%%j"&echo file !str:#=!>>New.txt&echo file !str:#=!)
  26. cls&echo 列出文件名成功,即将合并视频为%~dp0New.mp4&echo.
  27. endlocal
  28. pause
  29. )
  30. rem 合并文件
  31. ffmpeg -f concat -i New.txt -vcodec copy -acodec copy %~dp0New.mp4
  32. cls&echo 新文件保存路径%~dp0New.mp4&echo;
  33. pause & exit /b
  34. @end
  35. WSH.echo(WSH.StdIn.ReadAll().replace(/^\d{1,2}:([0-5][0-9]):([0-5][0-9]\.\d{3})/g, '正确').match(/^[^\r\n]+/).join('\r\n'));
复制代码

TOP

回复 3# xp3000

      个人一点建议:
一、 setlocal enabledelayedexpansion 移到 22行下面, 在26行下面 添加 endlocal。
      个人理解,延迟变量只有在FOR循环内,变量要重新修正值才有意义,或经过FOR重新修改了值的变量,还有一个 call set;
      你这里的 SS TO 在循环内是不变的,都是引用循环外部的值。不需要延迟。

二、18行 的!ss!  !to! 没有实际意义。可改为  %ss%  %to% ;减少 延迟变量的性能损失。

三、第7, 11 行下面 call  一个 输入 输入的时间格式验证程序段。以免 ffmpeg 错误崩溃。
   

上面的建议可能有错误,自行辨别。
QQ: 己阵亡
脚本优先 [PowerShell win10]

TOP

回复 4# xczxczxcz
谢谢指点,弄了个验证

TOP

返回列表