April 20, 2007
这两天在为刻录一部电视连续剧的事烦恼, 为什么烦恼呢? 因为这部片子是别人压缩的, 压缩了之后大了点, 4.9G, 没有办法刻录到一张4.7G的DVD中, 如果用两张那就显得浪费了些, 考虑到这部片子的每一集的压缩前后都有序幕, 这样只要所有的序幕都去掉的话, 就可以将文件减小到4.7G, 可以刻录到一张DVD上了。 这个方法是可以的, 但随后引出的问题是, 这部片子有40集, 总不至于让我一集一集的去手工截取吧? 那可是个体力活, 很累人的呀!
既然有问题, 那就解决呗! 用什么方法比较好呢? 自己写个程序, 那肯定不现实, 那用现实存在的软件呢, 也没有找到(注: 用来切割rm/rmvb的软件实在太少了, 批量的就完全没有, 可能是我没有找到, 如果您找到了, 不妨告诉我一声, 谢谢了!), 单文件的分割程序倒是有, 命令行的、 GUI都有, 那就唯一的一个办法是用批处理了, 既然已经确定, 那就动手干活吧!
第一步, 那就要知道RealMedia Editor是怎么来对real格式的电影进行分割的, GUI的我就不说了, 自己看着就会了, 命令行的我查看了帮助, 摘录如下(更加详细的帮助请自行参阅帮助文件):
Usage:
rmeditor -i <input> -o <output> [-t <title>] [-a <author>]
[-c <copyright>] [-C <comment>]
[-s <start time>] [-e <end time>] [-l <log file>] [-d <dump file>]
[-q <description>] [-n <keywords>] [-R <content rating>]Where:
input - the path to the input file.
output - the path to the output file that will contain the edited file.
title - title text.
author - author text.
copyright - copyright text.
comment - comment text.
start time - days:hours:minutes:seconds.milliseconds.
end time - days:hours:minutes:seconds.milliseconds.
log file - the path to the log file.
dump file - the path to the dump file.
description - a description of the contents of the file.
keywords - a list of keywords for the file.
content rating - 1 = All Ages, 2 = Older Children,
3 = Younger Teens, 4 = Older Teens,
5 = Adult Supervision Recommended,
6 - Adults Only, 0 - No RatingTips:
Enter rmeditor -i <input> to view the contents of the input file.
Enter rmeditor -i <input1> -i <input2>… to paste input files.
Use 0 as the end time to specify the end of the file.
Place ” ” around the path to your file if any directory or file name contains a space
根据上面的帮助信息, 我们可以写出命令行:
rmeditor.exe -i inputfile -o outputfile -s starttime -e endtime
就可以对你inputfile进行截取相应的时间, 并输出文件outputfile.我的命令行就是
rmeditor.exe -i 01.rmvb -o out_01.rmvb -s 00:00:01:20.000 -e 00:00:37:02.000
为了对同一目录下的所有的rm/rmvb都截取相应的时间, 那就可以写出批处理如下:
FOR /F “usebackq” %%i IN (`DIR /B *.rmvb`) DO rmeditor.exe -i inputfile -o outputfile -s starttime -e endtime
这样这个命令就会搜索本目录下所有的rmvb的文件, 然后截取相应的时间后保存成另外一个文件。
我第一次就是这么做的, 做完后发现了一个问题, 发现这部连续剧有几集时间长, 有几集时间短, 这样被我固定一个时间截取后, 有几集就没有把最后的序幕截掉, 而有几集截取过多, 把电视剧的内容都截掉了。 不行啊, 这样肯定是不行的, 多点序幕的到不要紧, 但内容被截掉的就不行了, 做事总要做到最完美吗!
怎么办? 难道还要我一个个来手工截取不成? 那可是非常之体力的呀。 想来想去, 唯一的一个办法就是序幕的时间一般总是固定的, 那就先把序幕的时间提取出来, 然后每集电视剧的结束时间就是片子的总长-序幕时间长。 得到序幕的时间很容易, 看一集就可以知道序幕是从什么时候开始放, 到什么时间结束, 两者减一下就是片尾序幕的时间长度。 知道了片尾序幕的时间, 那把上面的endtime设成总时间-片尾序幕时间就可以了, 关键是如何得到整个片子的总时间长呢? 这个时候就得我们的rma出场了。
rma是一个非常优秀的rm/rmvb的分割调整软件, 它有一个参数-db就可以得到片子的总时间长度, 具体命令是
rma -db inputfile
rma -db inputfile输出的不只是一个总时间, 那如何才能提取这个时间, 命令find可以帮我们完成这个任务。 找到了总时间怎么来执行减法运算呢? CMD的命令同样可以解决, 具体文章可以参见这里《 批处理 将秒转换成日时分秒 》, 减法之后出来的我们需要的endtime是以ms的格式出现的, 而在rmeditor中需要的时间格式是DD:HH:MM:SS.XXX这样的, 那就需要把时间格式转换过来, 伟大的CMD也可以帮我们完成, 文章见上文参考。 这样子, 我们所有需要做的事情都完成了, 就可以直接来转换了。 整个批处理命令如下:
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
IF ERRORLEVEL 1 echo Unable to enable extensions
FOR /F %%i IN (’DIR /B *.rmvb’) DO (
FOR /F “tokens=4,5* delims= ” %%l IN (’rma -db %%i ^| FIND “File duration”‘) DO (
SET /A LONGTIME = %%l -序幕时间
)
SET /A MMM=!LONGTIME!%%1000
SET /A SS=!LONGTIME!/1000%%60
SET /A MM=!LONGTIME!/60000%%60
SET /A HH=!LONGTIME!/3600000%%60
SET /A DD=!LONGTIME!/86400000%%60
rmeditor.exe -i %%i -o J:\as\%%i.ram -s starttime-e !DD!:!HH!:!MM!:!SS!.!MMM!
)
ENDLOCAL
@ECHO ON
整个批处理的过程就是上面这几行代码, 具体的大家可以参考一下资料。 要解释一下的是在批处理的开头用了一个 SETLOCAL ENABLEDELAYEDEXPANSION 命令, 这个命令是干什么呢? 这个命令是用来使用延迟变量的, 什么是延迟变量? 什么时候需要使用延迟变量, 请参看这里《 什么情况下该使用变量延迟? 》
有了上面这个批处理命令, 你就可以批量分割real的电影电视了, 你可以回去睡一觉, 回来就已经全部转完了!
本方法还参考了《 生成影片的预览图像另Mencoder和ffmpeg使用实例小全 》, 在我没有想到用rma之前, 本来想只能靠mplayer来获取片子的总长, 不过最后还是没有用到, 不过这篇文章给了我很多的启示!
后记: 其实rma也有分割real格式的rm/rmvb的功能的, 但鉴于rmeditor是real自己出的, 可能分割的效果好一些, 所以采用了rmeditor, 明天我将对rma的分割电影进行测试, 完成后会写一篇文章, 讲如何用rma分割电影电视, 去除电视首尾(头尾)序幕, 因为rma只有一个文件, 运行起来更加容易更为方便!
参考文章: 批处理教程
批处理问题:SET 命令在 FOR 循环中失效 / SET 环境变量生存域/作用域
延迟变量详解
您喜欢本文吗?即刻订阅"偶爱偶家",精彩文章不再错过!现在就给我们留个话吗?


5 responses to "用rma+rmeditor+批处理批量分割rm/rmvb电影"
用rma+rmeditor+批处理批量分割rm/rmvb电影…
如何对rm/rmvb电影进行分割呢? 如何掐头去尾呢?…
[...] 昨天用rmeditor对real格式的电影进行分割, 具体见《 用rma+rmeditor+批处理批量分割rm/rmvb电影 》, 在昨天分割的过程中发现rma也可以对rm/rmvb的电影进行分割的, [...]
正是我找的东西。:)谢谢兄弟了。
[Reply]
没弄明白!!
[Reply]
不知道您哪点不明白, 我们可以讨论一下, 我的邮件是
sdec040721 at 126.com
[Reply]