标题: [文件操作] [已解决]批处理如何把多个文件夹下的ts分别合成mp4文件? [打印本页]
作者: lvwenjun11 时间: 2023-2-4 09:01 标题: [已解决]批处理如何把多个文件夹下的ts分别合成mp4文件?
本帖最后由 lvwenjun11 于 2023-2-4 16:41 编辑
@- @echo off
- set "p=%cd%"??& cd ..
- call set "p=%%p:%cd%\=%%"
- call set "p=%%p:%cd%=%%"
- cd "%~dp0"
- (for %%a in (*.ts) do @echo file %%a) > Video.txt
- ffmpeg -f concat -i "Video.txt" -c copy "%p%.mp4"
- del Video.txt
- 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
版主大大的第二段代码可以使用!谢谢!
作者: lvwenjun11 时间: 2023-2-4 09:05
本帖最后由 lvwenjun11 于 2023-2-4 16:37 编辑
前排谢谢各位大佬!
作者: Batcher 时间: 2023-2-4 09:15
回复 1# lvwenjun11 - @echo off
- cd /d "%~dp0"
- set "TmpFile=Video.txt"
- for /f "delims=" %%i in ('dir /b /ad') do (
- echo 正在处理文件夹:%%i
- pushd "%%i"
- (for %%a in (*.ts) do echo file %%a) > "%TmpFile%"
- ffmpeg -f concat -i "%TmpFile%" -c copy "%%~nxi.mp4"
- del /f /q "%TmpFile%"
- popd
- )
复制代码
作者: lvwenjun11 时间: 2023-2-4 09:20
回复 3# Batcher
大佬你好 复制粘贴一下发现没法运行
作者: lvwenjun11 时间: 2023-2-4 09:23
回复 3# Batcher
http://www.bathome.net/viewthread.php?tid=62412&highlight=ts
大佬您看下这段代码 他是分别转换但没合并 能优化下嘛
作者: Batcher 时间: 2023-2-4 09:24
回复 4# lvwenjun11
请参考Q-04把bat文件保存为ANSI编码:
https://mp.weixin.qq.com/s/Koje4FufWxWBs7ioDy_LJA
如果仍有问题,请观察一下哪行代码在报错以及详细的报错信息。
如果需要上传文件,可以用阿里云盘或百度网盘。
如果需要上传截图,可以找个图床,例如:
http://bbs.bathome.net/thread-60985-1-1.html
作者: yakeyun 时间: 2023-2-4 09:40
本帖最后由 yakeyun 于 2023-2-4 09:46 编辑
回复 1# lvwenjun11
[分享]批处理一键执行M3U8视频转码合并 - BAT求助&讨论 - 批处理之家 批处理_BAT脚本_PowerShell_VBS_CMD_DOS_Perl_Python - Powered by Discuz! http://www.bathome.net/thread-62860-1-1.html
可以参考下,这个是对单个视频文件批量处理的代码。如果要批量处理多个视频,就需要修改代码,以最终子目录为目标,先输出子目录名录到文本,然后逐一读取对应子目录处理。批处理放到TS文件夹外层目录下运行:- @echo off
- title M3U8视频转换合并工具v1.1 By.sanli
- cd /d "%~dp0"
- if not exist %SystemRoot%\System32\ffmpeg.exe (curl -O http://bcn.bathome.net/tool/ffmpeg,4.3/ffmpeg.exe & move /y "ffmpeg.exe" "%SystemRoot%\System32\ffmpeg.exe")
- if not exist %SystemRoot%\System32\ffmpeg.exe (mshta "vbscript:msgbox("当前网络不可用,无法继续执行!",0,"提醒:") & window.close" & exit )
- setlocal enabledelayedexpansion
- for /f "delims=" %%a in ("%cd%") do set name=%%~na
- for /f "tokens=* delims=, " %%a in ('dir /a /s /b .\*.ts') do (
- ffmpeg -i "%%a" -threads 4 -f mp4 -codec copy "000%%~na.mp4"
- )
-
- (
- for /f "tokens=* delims=, " %%a in ('dir /a /s /b .\*.mp4') do (
- echo %%~nxa
- )
- )>del.txt
- (
- for /f "tokens=* delims=, " %%a in ('dir /a /s /b .\*.mp4') do (
- echo file '%%~nxa'
- )
- )>config.txt
-
- ffmpeg -f concat -i config.txt -c copy output.mp4
- ren output.mp4 "!name!.mp4"
- for /f %%a in (del.txt) do (
- del %%a
- )
- if exist del.txt (del del.txt)
- if exist config.txt (del config.txt)
- exit
复制代码
作者: lvwenjun11 时间: 2023-2-4 09:53
回复 7# yakeyun
大佬劳烦您能优化下嘛 放在单个子目录里我参照网上的改好了 但是放到父目录里我一点头绪没有
作者: Batcher 时间: 2023-2-4 09:57
回复 1# lvwenjun11 - @echo off
- REM 根据自己电脑实际情况设置ffmpeg的路径
- set "path=D:\BAT_Tools\ffmpeg\ffmpeg-n4.4-83-gb1f2d203c0-win64-gpl-4.4\bin;%path%"
- cd /d "%~dp0"
- set "TmpFile=Video.txt"
- for /f "delims=" %%i in ('dir /b /ad') do (
- echo 正在处理文件夹:%%i
- pushd "%%i"
- (for %%a in (*.ts) do echo file %%a) > "%TmpFile%"
- ffmpeg -f concat -i "%TmpFile%" -c copy "%%~nxi.mp4"
- del /f /q "%TmpFile%"
- popd
- )
复制代码
作者: lvwenjun11 时间: 2023-2-4 10:12
回复 9# Batcher
大佬 运行不了 看错误是插入pause吗
作者: lvwenjun11 时间: 2023-2-4 12:01
- 正在处理文件夹:Mmmz
- ffmpeg version N-109748-gb92028346c-20230203 Copyright (c) 2000-2023 the FFmpeg developers
- built with gcc 12.2.0 (crosstool-NG 1.25.0.90_cf9beb1)
- configuration: --prefix=/ffbuild/prefix --pkg-config-flags=--static --pkg-config=pkg-config --cross-prefix=x86_64-w64-mingw32- --arch=x86_64 --target-os=mingw32 --enable-gpl --enable-version3 --disable-debug --enable-shared --disable-static --disable-w32threads --enable-pthreads --enable-iconv --enable-libxml2 --enable-zlib --enable-libfreetype --enable-libfribidi --enable-gmp --enable-lzma --enable-fontconfig --enable-libvorbis --enable-opencl --disable-libpulse --enable-libvmaf --disable-libxcb --disable-xlib --enable-amf --enable-libaom --enable-libaribb24 --enable-avisynth --enable-chromaprint --enable-libdav1d --enable-libdavs2 --disable-libfdk-aac --enable-ffnvcodec --enable-cuda-llvm --enable-frei0r --enable-libgme --enable-libkvazaar --enable-libass --enable-libbluray --enable-libjxl --enable-libmp3lame --enable-libopus --enable-librist --enable-libssh --enable-libtheora --enable-libvpx --enable-libwebp --enable-lv2 --disable-libmfx --enable-libvpl --enable-openal --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenh264 --enable-libopenjpeg --enable-libopenmpt --enable-librav1e --enable-librubberband --enable-schannel --enable-sdl2 --enable-libsoxr --enable-libsrt --enable-libsvtav1 --enable-libtwolame --enable-libuavs3d --disable-libdrm --disable-vaapi --enable-libvidstab --enable-vulkan --enable-libshaderc --enable-libplacebo --enable-libx264 --enable-libx265 --enable-libxavs2 --enable-libxvid --enable-libzimg --enable-libzvbi --extra-cflags=-DLIBTWOLAME_STATIC --extra-cxxflags= --extra-ldflags=-pthread --extra-ldexeflags= --extra-libs=-lgomp --extra-version=20230203
- libavutil 57. 44.100 / 57. 44.100
- libavcodec 59. 61.100 / 59. 61.100
- libavformat 59. 37.100 / 59. 37.100
- libavdevice 59. 8.101 / 59. 8.101
- libavfilter 8. 56.100 / 8. 56.100
- libswscale 6. 8.112 / 6. 8.112
- libswresample 4. 9.100 / 4. 9.100
- libpostproc 56. 7.100 / 56. 7.100
- [concat @ 000001bb91047880] Line 2: unknown keyword 'D:\���img\Mmmz>echo'
- Video.txt: Invalid data found when processing input
复制代码
回复 9# Batcher
这是错误信息 主要是最后一句
作者: 77七 时间: 2023-2-4 12:22
本帖最后由 77七 于 2023-2-4 12:23 编辑
- @echo off
- cd /d "%~dp0"
- for /f "delims=" %%i in ('dir /b /s /ad') do (
- pushd "%%i"
- for /f "delims=" %%a in ('dir /b /a-d *.ts') do (
- echo file '%%~fa'
- )>>temp.txt
- if exist temp.txt (
- ffmpeg -f concat -safe 0 -i temp.txt -c copy "%%~ni.mp4"
- for /f "tokens=2 delims='" %%b in ('type "temp.txt"') do (
- del "%%b"
- )
- del temp.txt
- )
- popd
- )
- pause
复制代码
加了个合并后删除功能,如果数据非常重要,可以删掉,第10、11、12这三行直接删除,以防合并出现错误、或效果不理想后丢失源文件
使用前先备份
作者: lvwenjun11 时间: 2023-2-4 16:01
回复 12# 77七
有窗口出来 但是没任何动静
作者: xp3000 时间: 2023-2-4 16:10
本帖最后由 xp3000 于 2023-2-4 17:42 编辑
这个问题在于有人不知道下载的ffmpeg放哪里
ffmpeg放入C:\Windows\System32文件夹就可以了
下面这个只处理目录下一级的文件夹的ts视频- @echo off&setlocal enabledelayedexpansion
- @REM 保存为ANSI编码,文件名排序后合并视频
-
- set s=^^^^^^^^^^^^^^^^^^^^^^^^^^
- for /d %%a in (*) do (echo.进入文件夹:%%a
- pushd %~dp0%%a&type nul>"%%a.txt"
- setlocal
- for /f "delims=" %%i in ('dir /b/a-d/on "*.ts"') do (
- set "ss=!s!!s!!s!!s!!s!%%i"&set "^^=!ss:~-64!"&set _!^^!=!^^!
- )
- for /f "delims==_^^" %%j in ('set _^|sort /+1') do (
- echo;file %%j>>"%%a.txt"&echo; 即将合并文件 %%j
- )
- popd
- endlocal
- ffmpeg -f concat -i "%~dp0%%a\%%a.txt" -vcodec copy -acodec copy "%~dp0%%a.mp4" -y
- del /f /s /q "%~dp0%%a\%%a.txt" >nul 2>nul
- )
- pause
复制代码
ffmpeg后面有个-y,不需要覆盖就删除
这一个处理根目录内所有文件夹的ts视频- @echo off&setlocal enabledelayedexpansion
- @REM 保存为ANSI编码,文件名排序后合并视频
- cd \
- set s=^^^^^^^^^^^^^^^^^^^^^^^^^^
- for /f "delims=" %%a in ('dir /a:d /b/s *') do (
- pushd "%%a"&echo.进入"%%a"
- if exist *.ts (type nul>"%%a\%%~na.txt"
- echo.
- setlocal
- for /f "delims=" %%i in ('dir /b/a-d/on "*.ts"') do (
- set "ss=!s!!s!!s!!s!!s!%%i"&set "^^=!ss:~-64!"&set _!^^!=!^^!
- )
- for /f "delims==_^^" %%j in ('set _^|sort /+1') do (
- echo;file %%j>>"%%a\%%~na.txt"&echo; 即将合并文件 %%j
- )
- popd
- endlocal
- ffmpeg -f concat -i "%%a\%%~na.txt" -vcodec copy -acodec copy "%~dp0%%~na.mp4" -y
-
- del /f /s /q "%%a\%%~na.txt" >nul 2>nul
- ) else (echo %%a不存在ts视频)
- )
- pause
复制代码
作者: 77七 时间: 2023-2-4 16:19
回复 13# lvwenjun11
把代码以ansi编码格式保存为bat文件,放到需要处理的目录里面,如果目录下没有ts文件,肯定没有动静
作者: lvwenjun11 时间: 2023-2-4 16:20
回复 14# xp3000
谢谢大佬!但是不行
作者: lvwenjun11 时间: 2023-2-4 16:31
回复 15# 77七
看了下确实有动静。。。就是把原来的ts全删了
作者: 77七 时间: 2023-2-4 16:38
本帖最后由 77七 于 2023-2-4 16:41 编辑
回复 17# lvwenjun11
看来是ffmpeg合并失败了
你的文件名或者路径名是不是含有特殊符号?目录下不要存在与文件夹名同名的MP4文件
作者: lvwenjun11 时间: 2023-2-4 16:43
回复 18# 77七
没有这种情况,用九楼大大的代码重新试了一下,可以了!也非常谢谢你!
作者: 77七 时间: 2023-2-4 17:00
回复 19# lvwenjun11
- @echo off
- cd /d "%~dp0"
- rem 先设置路径ffmpeg的路径,需要引号,例如 set ffmpegexe="C:\Program Files\ffmpeg\ffmpeg.exe"
- set ffmpegexe=
-
-
- for /f "delims=" %%i in ('dir /b /s /ad') do (
- pushd "%%i"
- for /f "delims=" %%a in ('dir /b /a-d *.ts') do (
- echo file '%%~fa'
- )>>temp.txt
- if exist temp.txt (
- %ffmpegexe% -f concat -safe 0 -i temp.txt -c copy "%%~ni.mp4"
- for /f "tokens=2 delims='" %%b in ('type "temp.txt"') do (
- del "%%b"
- )
- del temp.txt
- )
- popd
- )
- pause
复制代码
你的ffmpeg应该没有添加到环境变量吧?
试一下这样呢?
作者: xp3000 时间: 2023-2-4 17:07
回复 xp3000
谢谢大佬!但是不行
lvwenjun11 发表于 2023-2-4 16:20
原帖上面增加了一个处理整个分区的
作者: lvwenjun11 时间: 2023-2-4 17:14
回复 20# 77七
也是不行 我添加环境变量了 用九楼的代码跑成功了,您的这个代码我又试了 有反应 但是不合成 最后清空了ts
作者: lvwenjun11 时间: 2023-2-4 17:21
回复 21# xp3000
谢谢 这个是不是要重新设置环境变量 提示里这么说 我明明设置过了
作者: 77七 时间: 2023-2-4 17:29
回复 22# lvwenjun11
你可以直接在命令行输入- ffmpeg -h
- rem 或者
- ffmpeg -help
复制代码
试试看呢?
作者: xp3000 时间: 2023-2-4 17:31
回复 23# lvwenjun11
就是把ffmpeg放入C:\Windows\System32文件夹就可以了
作者: hlzj88 时间: 2023-2-4 18:35
在我的有限的实践中,发现 ts 文件可以直接重命名 为 mp4
例如:1 ren *.ts *.mp4
2 type *.ts>>new.mp4 这里没有考虑先后顺序
作者: lvwenjun11 时间: 2023-2-4 18:53
回复 26# hlzj88
谢谢 但是我还需要一个合并操作
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |