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

[文件操作] [已解决]批处理如何把多个文件夹下的ts分别合成mp4文件?

本帖最后由 lvwenjun11 于 2023-2-4 16:41 编辑

@
  1. @echo off
  2. set "p=%cd%"??& cd ..
  3. call set "p=%%p:%cd%\=%%"
  4. call set "p=%%p:%cd%=%%"
  5. cd "%~dp0"
  6. (for %%a in (*.ts) do @echo file %%a) > Video.txt
  7. ffmpeg -f concat -i "Video.txt" -c copy "%p%.mp4"
  8. del Video.txt
  9. pause
复制代码
如上代码 分别是获取文件夹名 合成ts文件
A文件夹下有 1.ts 2.ts 3.ts
B文件夹下有4.ts 5.ts 6.ts
假设所有ts文件按顺序排列
如何生成A.mp4  B.mp4 不再枚举
其中ffmpeg已配置

附上几个很小的ts文件,大佬们可以练练手!谢谢!https://www.aliyundrive.com/s/NBw67uLXZVc
版主大大的第二段代码可以使用!谢谢!
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

回复 26# hlzj88


    谢谢 但是我还需要一个合并操作

TOP

在我的有限的实践中,发现 ts 文件可以直接重命名 为 mp4
例如:1  ren *.ts *.mp4
         2  type *.ts>>new.mp4  这里没有考虑先后顺序
目的,学习批处理

TOP

回复 23# lvwenjun11

就是把ffmpeg放入C:\Windows\System32文件夹就可以了

TOP

回复 22# lvwenjun11


   你可以直接在命令行输入
  1. ffmpeg -h
  2. rem 或者
  3. ffmpeg -help
复制代码


试试看呢?
bat小白,请多指教!谢谢!

TOP

回复 21# xp3000


    谢谢 这个是不是要重新设置环境变量 提示里这么说 我明明设置过了

TOP

回复 20# 77七


    也是不行 我添加环境变量了 用九楼的代码跑成功了,您的这个代码我又试了 有反应 但是不合成 最后清空了ts

TOP

回复  xp3000
    谢谢大佬!但是不行
lvwenjun11 发表于 2023-2-4 16:20


原帖上面增加了一个处理整个分区的

TOP

回复 19# lvwenjun11


  
  1. @echo off
  2. cd /d "%~dp0"
  3. rem 先设置路径ffmpeg的路径,需要引号,例如 set ffmpegexe="C:\Program Files\ffmpeg\ffmpeg.exe"
  4. set ffmpegexe=
  5. for /f "delims=" %%i in ('dir /b /s /ad') do (
  6. pushd "%%i"
  7. for /f "delims=" %%a in ('dir /b /a-d *.ts') do (
  8. echo file '%%~fa'
  9. )>>temp.txt
  10. if exist temp.txt (
  11. %ffmpegexe% -f concat -safe 0 -i temp.txt -c copy "%%~ni.mp4"
  12. for /f "tokens=2 delims='" %%b in ('type "temp.txt"') do (
  13. del "%%b"
  14. )
  15. del temp.txt
  16. )
  17. popd
  18. )
  19. pause
复制代码
你的ffmpeg应该没有添加到环境变量吧?
试一下这样呢?
bat小白,请多指教!谢谢!

TOP

回复 18# 77七


    没有这种情况,用九楼大大的代码重新试了一下,可以了!也非常谢谢你!

TOP

本帖最后由 77七 于 2023-2-4 16:41 编辑

回复 17# lvwenjun11

看来是ffmpeg合并失败了
   你的文件名或者路径名是不是含有特殊符号?目录下不要存在与文件夹名同名的MP4文件
bat小白,请多指教!谢谢!

TOP

回复 15# 77七


    看了下确实有动静。。。就是把原来的ts全删了

TOP

回复 14# xp3000


    谢谢大佬!但是不行

TOP

回复 13# lvwenjun11

把代码以ansi编码格式保存为bat文件,放到需要处理的目录里面,如果目录下没有ts文件,肯定没有动静
bat小白,请多指教!谢谢!

TOP

本帖最后由 xp3000 于 2023-2-4 17:42 编辑

这个问题在于有人不知道下载的ffmpeg放哪里
ffmpeg放入C:\Windows\System32文件夹就可以了
下面这个只处理目录下一级的文件夹的ts视频
  1. @echo off&setlocal enabledelayedexpansion
  2. @REM 保存为ANSI编码,文件名排序后合并视频
  3. set s=^^^^^^^^^^^^^^^^^^^^^^^^^^
  4. for /d %%a in (*) do (echo.进入文件夹:%%a
  5.     pushd %~dp0%%a&type nul>"%%a.txt"
  6. setlocal
  7. for /f "delims=" %%i in ('dir /b/a-d/on "*.ts"') do (
  8.     set "ss=!s!!s!!s!!s!!s!%%i"&set "^^=!ss:~-64!"&set _!^^!=!^^!
  9.     )
  10. for /f "delims==_^^" %%j in ('set _^|sort /+1') do (
  11.     echo;file %%j>>"%%a.txt"&echo; 即将合并文件 %%j
  12.     )
  13. popd
  14. endlocal
  15. ffmpeg -f concat -i "%~dp0%%a\%%a.txt" -vcodec copy -acodec copy "%~dp0%%a.mp4" -y
  16. del /f /s /q "%~dp0%%a\%%a.txt" >nul 2>nul
  17. )
  18. pause
复制代码
ffmpeg后面有个-y,不需要覆盖就删除
这一个处理根目录内所有文件夹的ts视频
  1. @echo off&setlocal enabledelayedexpansion
  2. @REM 保存为ANSI编码,文件名排序后合并视频
  3. cd \
  4. set s=^^^^^^^^^^^^^^^^^^^^^^^^^^
  5. for /f "delims=" %%a in ('dir /a:d /b/s *') do (
  6.     pushd "%%a"&echo.进入"%%a"
  7. if exist *.ts (type nul>"%%a\%%~na.txt"
  8. echo.
  9. setlocal
  10. for /f "delims=" %%i in ('dir /b/a-d/on "*.ts"') do (
  11.     set "ss=!s!!s!!s!!s!!s!%%i"&set "^^=!ss:~-64!"&set _!^^!=!^^!
  12.     )
  13. for /f "delims==_^^" %%j in ('set _^|sort /+1') do (
  14.     echo;file %%j>>"%%a\%%~na.txt"&echo; 即将合并文件 %%j
  15.     )
  16. popd
  17. endlocal
  18. ffmpeg -f concat -i "%%a\%%~na.txt" -vcodec copy -acodec copy "%~dp0%%~na.mp4" -y
  19. del /f /s /q "%%a\%%~na.txt" >nul 2>nul
  20. ) else (echo %%a不存在ts视频)
  21. )
  22. pause
复制代码

TOP

返回列表