标题: [其他] mkvtoolnix如何批量将avi文件封装为mkv格式? [打印本页]
作者: c_mang 时间: 2016-1-7 23:20 标题: mkvtoolnix如何批量将avi文件封装为mkv格式?
本帖最后由 c_mang 于 2016-1-9 07:39 编辑
求助高手解决视频封装的批处理文件。
一、已知,MKVToolnix 5.8.0 绿色多语版的mmg.exe可以将"I:\\001.AVI"快速封装MKV并保存在"H:\\800首\\001.mkv"。但由于"I:\\"含001.AVI~801.AVI共800个文件,手动一个一个地加入、封装、保存,实在太累。想到批处理应当能解决,可又不知道该怎么写,因此烦劳高手大驾援手。
感激不尽!先行谢过!
二、本次需要封装的800个avi文件原压制在一张非卖品的4.7G的光盘中。不知什么原因,在电脑中打开它每个文件都显示大小为1.99G,不要说全部导出得准备2T的硬盘,还有耗用的时间更无法计算,作为遗留问题我将它制作成镜像文件。近来发现mkvtoolnix能直接添加虚拟光驱中的影音文件并成功封装另存,更为重要的它几乎还原了应有的大小。
截图在5楼。
三、附上从mkvmerge复制的命令行(002.avi-002.mkv)如下:
"mkvmerge" -o "H:\\800首\\002.mkv" "--forced-track" "0:no" "--forced-track" "1:no" "-a" "1" "-d" "0" "-S" "-T" "--no-global-tags" "--no-chapters" "(" "I:\\002.AVI" ")" "--track-order" "0:0,0:1"
附上从mkvmerge复制的命令行(002.avi-002.mkv)如下:
"mkvmerge" -o "H:\\800首\\002.mkv" "--forced-track" "0:no" "--forced-track" "1:no" "-a" "1" "-d" "0" "-S" "-T" "--no-global-tags" "--no-chapters" "(" "I:\\002.AVI" ")" "--track-order" "0:0,0:1"
四、这样写的批处理为什么只一闪而过,不能运行?
@echo off&setlocal enabledelayedexpansion
for /l %%i in (1,1,800) do (set /a n=1000+%%i
"D:\影音及光盘\mkv专题\MKVToolnix 5.8.0 绿色多语版\mkvtoolnix\mkvtoolnix\mmg.exe" -o "H:\\800首\\[!n:~1!].mkv"--forced-track" "0:no" "--default-track" "1:yes" "--forced-track" "1:no" "--display-dimensions" "1:320x240" "-a" "0" "-d" "1" "-S" "-T" "--no-global-tags" "--no-chapters" "(" "I:\\[!n:~1!].AVI" ")" "--track-order" "0:0,0:1,1:0"
)
pause
五、记得三年前在读书论坛幸遇批处理的大佬namejm,得其帮助一个批处理就从哈佛下载到珍贵的资料,由此切身感受到批处理的神奇之处,借此再向他表达敬意!
为了加快本题的结案,特将800首AVI(近4.7G)的镜像文件分卷压缩3个包上传百度盘,供高手测试,期待精彩的批处理文件。
下载链接在24楼。
作者: hlzj88 时间: 2016-1-8 10:38
首先,你要单独echo 你的长句子到一个文本,对比看是否吻合,防止特殊字符引起的问题,然后套入你下面写的语句里,兴许就可以用了
这样的句子,也可以用excel来做
作者: c_mang 时间: 2016-1-8 11:11
回复 2# hlzj88
未能领会“单独echo 你的长句子到一个文本,对比看是否吻合”这句话的意思。
能否赐教一个实例?
作者: hlzj88 时间: 2016-1-8 15:40
本帖最后由 hlzj88 于 2016-1-8 15:45 编辑
你的1 2 问不懂。。仅就第三问,按你的代码直接运行会报错。- @echo off&setlocal enabledelayedexpansion
- set xx="D:\影音及光盘\mkv专题\MKVToolnix 5.8.0 绿色多语版\mkvtoolnix\mkvtoolnix\mmg.exe" -o "H:\\800首\\[!n:~1!].mkv"--forced-track" "0:no" "--default-track" "1:yes" "--forced-track" "1:no" "--display-dimensions" "1:320x240" "-a" "0" "-d" "1" "-S" "-T" "--no-global-tags" "--no-chapters"
- set yy="--track-order" "0:0,0:1,1:0"
- for /l %%i in (1,1,800) do (set /a n=1000+%%i
- echo %xx% "(" "I:\\[!n:~1!].AVI" ")" %yy%>>3.txt
- )
- pause
复制代码
且 你的路径I:\\001.avi,和平时的i:\001.avi不同,,也许是你软件的用法。另你最后的I:\\[!n:~1!].AVI,,,不知对否。
作者: c_mang 时间: 2016-1-8 20:26
回复 4# hlzj88
谢谢关注!
一、关于“路径I:\\001.avi,和平时的i:\001.avi不同”的说明。
本次需要封装的800个avi文件原压制在一张非卖品的4.7G的光盘中。不知什么原因,在电脑中打开它每个文件都显示大小为1.99G,不要说全部导出得准备2T的硬盘,还有耗用的时间更无法计算,作为遗留问题我将它制作成镜像文件。近来发现mkvtoolnix能直接添加虚拟光驱中的影音文件并成功封装另存,更为重要的它几乎还原了应有的大小。
因此“路径I:\\001.avi”是虚拟光驱的盘符路径。
二、再附上从mkvmerge复制的命令行(002.avi-002.mkv)如下:
"mkvmerge" -o "H:\\800首\\002.mkv" "--forced-track" "0:no" "--forced-track" "1:no" "-a" "1" "-d" "0" "-S" "-T" "--no-global-tags" "--no-chapters" "(" "I:\\002.AVI" ")" "--track-order" "0:0,0:1"
三、几年前在读书论坛幸遇批处理的大佬namejm,得其帮助从哈佛下载到珍贵的资料,由此切身感受到批处理的神奇之处,借此再向他表达敬意!
作者: gawk 时间: 2016-1-8 20:45
再请教,这样写的批处理为什么只一闪而过,不能运行?
把你的代码保存为 C:\test.bat
打开一个命令行窗口并执行 C:\test.bat
把报错信息发出来看看
作者: gawk 时间: 2016-1-8 20:47
2,还有,从mkvmerge复制的命令行有什么作用?
这个跟批处理没有关系,全都是 mkvmerge 本身的参数,具体什么意思需要查看它自己的手册。
作者: hlzj88 时间: 2016-1-8 20:48
namejm,,还有坛子里的其他高手,羡慕的紧,只是自己没有一点代码方面的知识,学来也只是门外汉。
不知上面的代码可用否, 再,你附上第二个,什么意思,,
作者: c_mang 时间: 2016-1-8 20:55
回复 7# gawk
谢谢!
也正是想到mkvmerge是开源软件,不同于其他收费软件那样封闭,或许通过写批处理能解决这个问题。
不知这个想法对不对?
作者: hlzj88 时间: 2016-1-8 21:07
他代码的错 此时不应有 "--track-order"
作者: gawk 时间: 2016-1-8 21:13
回复 9# c_mang
bat调用mkvmerge的这个想法可以行得通
作者: gawk 时间: 2016-1-8 21:15
回复 10# hlzj88
我没有环境,无法测试。转义试试吧。
@echo off&setlocal enabledelayedexpansion
for /l %%i in (1,1,800) do (set /a n=1000+%%i
"D:\影音及光盘\mkv专题\MKVToolnix 5.8.0 绿色多语版\mkvtoolnix\mkvtoolnix\mmg.exe" -o "H:\\800首\\[!n:~1!].mkv"--forced-track" "0:no" "--default-track" "1:yes" "--forced-track" "1:no" "--display-dimensions" "1:320x240" "-a" "0" "-d" "1" "-S" "-T" "--no-global-tags" "--no-chapters" "^(" "I:\\[!n:~1!].AVI" "^)" "--track-order" "0:0,0:1,1:0"
)
pause
作者: hlzj88 时间: 2016-1-8 21:20
回复 12# gawk
我以为我上面已经解决了他的问题,,只需把echo %xx% "(" "I:\\[!n:~1!].AVI" ")" %yy%>>3.txt两端的echo 与 >>3.txt 去掉,即可。也不知他测试结果咋样
作者: c_mang 时间: 2016-1-8 21:43
回复 12# gawk
感谢!
文件不存在,如何改?
作者: gawk 时间: 2016-1-8 21:48
请执行4楼的代码,把代码生成的3.txt压缩之后传上来看看。
作者: c_mang 时间: 2016-1-8 21:56
回复 15# gawk
用4楼的代码,弹出命令行窗口,但按任意键,却退出了。
作者: hlzj88 时间: 2016-1-8 22:04
本帖最后由 hlzj88 于 2016-1-8 22:07 编辑
还是我来贴吧 取了4行
"D:\影音及光盘\mkv专题\MKVToolnix 5.8.0 绿色多语版\mkvtoolnix\mkvtoolnix\mmg.exe" -o "H:\\800首\\[~1no" "--default-track" "1:yes" "--forced-track" "1:no" "--display-dimensions" "1:320x240" "-a" "0" "-d" "1" "-S" "-T" "--no-global-tags" "--no-chapters" "(" "I:\\[001].AVI" ")" "--track-order" "0:0,0:1,1:0"
"D:\影音及光盘\mkv专题\MKVToolnix 5.8.0 绿色多语版\mkvtoolnix\mkvtoolnix\mmg.exe" -o "H:\\800首\\[~1no" "--default-track" "1:yes" "--forced-track" "1:no" "--display-dimensions" "1:320x240" "-a" "0" "-d" "1" "-S" "-T" "--no-global-tags" "--no-chapters" "(" "I:\\[002].AVI" ")" "--track-order" "0:0,0:1,1:0"
"D:\影音及光盘\mkv专题\MKVToolnix 5.8.0 绿色多语版\mkvtoolnix\mkvtoolnix\mmg.exe" -o "H:\\800首\\[~1no" "--default-track" "1:yes" "--forced-track" "1:no" "--display-dimensions" "1:320x240" "-a" "0" "-d" "1" "-S" "-T" "--no-global-tags" "--no-chapters" "(" "I:\\[003].AVI" ")" "--track-order" "0:0,0:1,1:0"
"D:\影音及光盘\mkv专题\MKVToolnix 5.8.0 绿色多语版\mkvtoolnix\mkvtoolnix\mmg.exe" -o "H:\\800首\\[~1no" "--default-track" "1:yes" "--forced-track" "1:no" "--display-dimensions" "1:320x240" "-a" "0" "-d" "1" "-S" "-T" "--no-global-tags" "--no-chapters" "(" "I:\\[004].AVI" ")" "--track-order" "0:0,0:1,1:0"
下午,我echo时,他的这些可以完全echo,在for 里运行报错,,经查为 不应有"--track-order" ,因此用set.
作者: c_mang 时间: 2016-1-8 22:25
本帖最后由 c_mang 于 2016-1-8 22:27 编辑
回复 17# hlzj88
让你费心,多谢!
然而不知道这四条如何纠正?您能否再另写一个完整的?
我以为,14楼的截图说明,gawk所赐bat已经调用mkvmerge GUI成功,此时如果不直接关闭命令窗口,似乎要连续点击800个“确定”才能让mkvmerge GUI退出。
有点眉目了,只要解决-o(文件不存在)这个问题,就能再进一步。
作者: hlzj88 时间: 2016-1-8 22:34
如果你有单独的句子能成功执行一次,那代码就是可靠的。没有你的测试环境,也只是根据你的代码来写的
作者: gawk 时间: 2016-1-8 22:34
似乎要连续点击800个“确定”才能让mkvmerge GUI退出
下次遇到类似问题可以用taskkill命令杀进程- taskkill /f /im mkvmerge.exe
复制代码
复制代码
作者: gawk 时间: 2016-1-8 22:37
- "D:\影音及光盘\mkv专题\MKVToolnix 5.8.0 绿色多语版\mkvtoolnix\mkvtoolnix\mmg.exe" -o "H:\\800首\\001.mkv"--forced-track" "0:no" "--default-track" "1:yes" "--forced-track" "1:no" "--display-dimensions" "1:320x240" "-a" "0" "-d" "1" "-S" "-T" "--no-global-tags" "--no-chapters" "(" "I:\\001.AVI" ")" "--track-order" "0:0,0:1,1:0"
复制代码
这样处理单个文件能成功吗?
作者: hlzj88 时间: 2016-1-8 22:41
http://zhidao.baidu.com/question ... kvmerge%20GUI%20dos
百度知道
作者: c_mang 时间: 2016-1-8 22:44
回复 21# gawk
仍旧是“文件"-o"不存在”这个问题。
作者: c_mang 时间: 2016-1-9 07:29
回复 21# gawk
现提供测试环境,800首AVI(近4.7G)的镜像文件已分卷压缩3个包上传百度盘
链接:http://pan.baidu.com/s/1hrcT7us 密码:uu1w
作者: c_mang 时间: 2016-1-9 07:49
回复 13# hlzj88
按你13楼的意见:“只需把echo %xx% "(" "I:\\[!n:~1!].AVI" ")" %yy%>>3.txt两端的echo 与 >>3.txt 去掉,”,
应为 %xx% "(" "I:\\[!n:~1!].AVI" ")" %yy%
运行修改bat,结果与23楼的截图相似,还是弹出“文件"-o"不存在”提示,而且命令窗口没有字符。
另:
现提供测试环境,800首AVI(近4.7G)的镜像文件已分卷压缩3个包上传百度盘
链接:http://pan.baidu.com/s/1hrcT7us 密码:uu1w
作者: hlzj88 时间: 2016-1-9 08:53
虽然你很辛苦的上传了4G文件,,但是,对我们来说真的压力很大,因此建议你看看22楼的,或者百度更多来修改,只要成功一句,别的都不是大问题
作者: hlzj88 时间: 2016-1-9 08:56
我以为 找不到文件,主要还是在 路径上
作者: c_mang 时间: 2016-1-9 09:32
回复 27# hlzj88
这是第一次动手批处理,还要向你多学习!
如前所引:
"D:\影音及光盘\mkv专题\MKVToolnix 5.8.0 绿色多语版\mkvtoolnix\mkvtoolnix\mmg.exe" -o "H:\\800首\\[!n:~1!].mkv"--forced-track" "0:no" "--default-track" "1:yes" "--forced-track" "1:no" "--display-dimensions" "1:320x240" "-a" "0" "-d" "1" "-S" "-T" "--no-global-tags" "--no-chapters" "^(" "I:\\[!n:~1!].AVI" "^)" "--track-order"
"0:0,0:1,1:0"
其中涉及路径有三:
1,"D:\影音及光盘\mkv专题\MKVToolnix 5.8.0 绿色多语版\mkvtoolnix\mkvtoolnix\mmg.exe"——mmg.exe应用程序的路径。
2,"H:\\800首\\[!n:~1!].mkv"——输出路径。
3,(" "I:\\[!n:~1!].AVI" "^)——目标路径。
究竟是哪一条出了问题,还是通篇语句连贯出错?
作者: hlzj88 时间: 2016-1-9 09:52
- @echo off
- for %%i in (*.h264) do "C:\Program Files\MKVToolNix\mkvmerge.exe" -o "F:\\合成目录\\%%~ni.mkv" "--forced-track" "0:no" "-d" "0" "-A" "-S" "-T" "--no-global-tags" "--no-chapters" "(" "F:\\合成目录\\%%~ni.h264" ")" "--forced-track" "0:no" "-a" "0" "-D" "-S" "-T" "--no-global-tags" "--no-chapters" "(" "F:\\合成目录\\%%~ni.aac" ")" "--track-order" "0:0,1:0"
复制代码
这是22楼的百度知道后面声明的能成功的代码,加了个字幕文件
作者: c_mang 时间: 2016-1-9 10:29
回复 29# hlzj88
注意到这个帖子,但它这里解决的是同一目录下的.h264视频与.aac音频合并问题。
与本题类似的是这个帖子http://zhidao.baidu.com/question/105271490.html,然而所答非所问。
作者: hlzj88 时间: 2016-1-9 10:51
- @echo off&setlocal enabledelayedexpansion
- for /l %%i in (1,1,800) do (
- set /a n=1000+%%i
- set xx="D:\影音及光盘\mkv专题\MKVToolnix 5.8.0 绿色多语版\mkvtoolnix\mkvtoolnix\mmg.exe" -o "H:\\800首\\[!n:~1!].mkv" "--forced-track" "0:no" "--forced-track" "1:no" "-a" "1" "-d" "0" "-S" "-T" "--no-global-tags" "--no-chapters" "(" "I:\\[!n:~1!].AVI" ")" "--track-order" "0:0,0:1"
- echo !xx!>>3.txt
- )
- pause
复制代码
你试试,,要去掉echo和>>3.txt
作者: c_mang 时间: 2016-1-9 11:01
回复 31# hlzj88
去掉echo和>>3.txt命令窗口一闪而过。
不去echo和>>3.txt,命令窗口提示按任意键,按完也是一闪而过。
作者: hlzj88 时间: 2016-1-9 11:06
不去是会在一起生成一个3.txt,,你把它改为3.bat,,运行看看,
作者: c_mang 时间: 2016-1-9 11:20
回复 33# hlzj88
在"C:\Windows\System32\3.txt"找到,
改3.bat运行的结果如23楼截图,内容是:
C:\Windows\system32>"D:\影音及光盘\mkv专题\MKVToolnix 5.8.0 绿色多语版\mkvtoolni
x\mkvtoolnix\mmg.exe" -o "H:\\800首\\[~1no" "--default-track" "1:yes" "--forced-
track" "1:no" "--display-dimensions" "1:320x240" "-a" "0" "-d" "1" "-S" "-T" "--
no-global-tags" "--no-chapters" "(" "I:\\[001].AVI" ")" "--track-order" "0:0,0:1
,1:0"
作者: hlzj88 时间: 2016-1-9 11:23
没有调用 那软件吗
作者: c_mang 时间: 2016-1-9 11:26
回复 35# hlzj88
见23楼截图,应用软件窗口弹出,仍旧是“文件"-o"不存在”的提示。
作者: c_mang 时间: 2016-1-16 13:54
回复 21# gawk
请继续帮助——
经过反复思考,你和hlzj88的努力通常已能解决问题。但此题似乎有点特殊(见5楼的截图和说明),由于输入文件是加载在虚拟光驱的I:盘符里,或许这就是运行bat找不到文件和路径的原因所在。
如果问题就出在这儿,那么需要补充什么指令才能让bat读取虚拟光驱里的文件?
有劳了二位,感激!
作者: gawk 时间: 2016-1-16 16:54
回复 37# c_mang
我没有这样的环境,无法做测试。你试试 subst 命令是否可以把虚拟盘符映射到本地。
作者: c_mang 时间: 2016-1-16 18:42
回复 38# gawk
一、测试过subst 命令,一闪而过。原因不明。
二、又参考:判断光驱盘符(路径)
@echo off
for /f "skip=1" %%a in ('wmic logicaldisk where "drivetype=5" get DeviceID') do echo
%%a>>1.txt
说明:将光驱盘符显示出来,并把结果保存到当前盘的“1.txt”文本中。
——结果:“1.txt”文本为空。
作者: gawk 时间: 2016-1-16 20:16
回复 39# c_mang
删掉 where "drivetype=5" 试试
作者: gawk 时间: 2016-1-16 20:18
在CMD窗口单独执行subst命令可以看到报错信息。以后不要再说“一闪而过”这种词了,对于别人帮助你解决问题来说没有任何意义。
作者: c_mang 时间: 2016-1-16 21:32
回复 41# gawk
谢谢朋友提醒,一定注意细节。
再请关注,subst.bat原来存放在C:盘,没有运行成功。但移动到D:文件夹里保存时,却发现可以运行,时间已过去半小时,仍然在跳转,不知结果是怎样?
主要没有看见001.avi;002.avi……等显示。
作者: c_mang 时间: 2016-1-17 01:14
回复 38# gawk
请教:
如42楼截图,自21:00至凌晨1点,
cmd.exe运行subst w: i:\
始终处于快速上翻的显示。
其间多次查看盘符和硬盘,都没有看出变化。I:\镜像文件(800首avi)大小不过4.37G,看来只好关闭,该休息了。
附:
操作系统:Win7专业版32位。
硬盘:2T
能否指点原因吗?
多谢了!静候。
作者: hlzj88 时间: 2016-1-17 16:57
回复 43# c_mang
同理,前期按你的软件能用的语句已能生成批量语句,但你的不能找到文件,也许和虚拟光驱有关系,但这些已经超出批处理的范畴,超出的部分,也不是我的强项。算是无能为力了。
作者: gawk 时间: 2016-1-18 13:58
回复 42# c_mang
把 subst.bat 重命名为 test.bat
作者: c_mang 时间: 2016-1-28 01:08
回复 45# gawk
回复gawk、hlzj88二君:对于你们在本帖中给予的帮助,深表谢意!
1,关于调用MKVToolnix批处理800个AVI封装为MKV的实际运用,已经得到另一位高手(不在本坛子)的指导顺利完成,全部耗时不到20分钟。由于革除了每个文件1.99G的冗余,因此镜像文件的4.37G总大小封装后仅为4.14G。不过他给出的批处理是另一种语句表述,所以就本题来说并没有彻底解决。
2,我想继续搞清楚的是,像
@echo off&setlocal enabledelayedexpansion
for /l %%i in (1,1,800) do (set /a n=1000+%%i
这样的句式究竟能不能锁定“来源文件夹 I:\ 是个虚拟光盘路径”并读取?
搜索过本坛,只有谈论光驱而没有涉及虚拟光盘的话题。
尝试添加pushd I:\ 没有成功。
如下:
@echo off&setlocal enabledelayedexpansion
pushd I:\
for /l %%i in (1,1,800) do (set /a n=1000+%%i
作者: c_mang 时间: 2016-1-28 01:10
回复 44# hlzj88
鸣谢!详楼上。
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |