2008/10/26

懶人mp4/avi壓制上傳法

之前受到CR字幕組的TOA壓制委託,又因為我網路很慢,所以就想出了用批次檔作懶人壓制上傳。

不過因為跟dos指令不太熟,所以寫的很不成熟,高手就可以跳過這篇沒內容的文章了 ^^;

##ReadMore##

首先,需要用到以下的東西(斜體字為非必要)

1.Windows系統(Linux我不會用..)

2.要壓的片源,本懶人包僅適用於mp4片源(沒要壓影片也可以不要看這篇了 XDD)

3.avisynth (推薦使用2.5.7,如果嫌我寫的太簡單,可以參考wiki,有更多內容。)

4.MP4Box (用來拆mp4跟包mp4用)

5.x264 (作H.264編碼用)

6.mencoder (作Xvid/Divx編碼用,不過其實他也可以編H.264..但是我不熟 XD)

7.faad (用來將mp4解出來的aac轉成wav)

8.lame (將wav編碼成mp3,mencoder也是可以做,不過一樣我不熟...orz)

9.neroAacEnc (將wav轉成aac用)

[10.crcp (算CRC32用)]

[11.VSfilter (需要將字幕壓進影片中使用)]


接下來進入正題

首先,先建立一個專案用的資料夾,裡面有以上除了avisyth(要安裝)以外的全部exe),跟一個rawbackup及upload的資料夾,rawbackup是拿來備份原始檔,upload為壓制完成的檔案要上傳的資料夾。

再來用記事本(個人推薦改用Emeditor XD)寫下:
LoadPlugin("F:\VSFilter.dll")#本行如果需要將字幕壓入再寫,不用則無需加,位置需隨放置位置修改
DirectShowSource("convertraw.mp4",fps=23.976,convertfps=true,audio=false)
TextSub("toaraw.ssa")#同第一行,需要再加即可
LanczosResize(1280,720)#將影片resize
存成convertavi.avs以及convertmp4.avs(如果只要壓一種格式只要用一個檔案即可)


@echo off
set filesite=F:\forCR\
set rawfilename="raw.mp4"
set rawssaname="raw.ssa"
xcopy /v /y %filesite%%rawfilename% "%filesite%rawbackup"
xcopy /v /y %filesite%%rawssaname% "%filesite%rawbackup"

ren %rawfilename% convertraw.mp4
ren %rawssaname% convertraw.ssa

call extract.bat

call mp4encode.bat

call aviencode.bat

call hash.bat

call upload.bat

call del.bat

並且另存成start.bat
其中紅色的部分是可以改的,F:\forCR\是專案用資料夾的完整位置最好是不要有空白/非英文字元,不然可能會出錯。
raw.mp4raw.ssa是字幕檔跟片源的原始檔名,每次使用前可以做適當的修改。
convertraw.mp4convertraw.ssa是要配合後面avs所使用的檔名(這樣才不用每次都去修改avs檔),如果不想要這個名字可以改掉,只是後面會有很多東西要改 XD
這個批次檔的作用是,將raw的片源複製一份到rawbackup中,然後將原本的檔案改名為convertraw.mp4convertraw.ssa
如果沒要掛字幕,可以將
set rawssaname="raw.ssa"
xcopy /v /y %filesite%%rawssaname% "%filesite%rawbackup"
ren %rawssaname% convertraw.ssa
這三行給刪除掉。

接下來,開新檔案,將以下內容儲存為extract.bat
@echo off
mp4box -raw 2 "convertraw.mp4"
faad "convertraw_track2.aac" -o "temp.wav"
這個bat的動作是將convertraw.mp4中的音軌給抽出來(TVRIP通常只有一個音軌,並且放在第二個順序),並且用faad將aac轉成wav供之後轉檔使用。

再開一個檔案,將以下內容儲存為mp4encode.bat
@echo off
neroAacEnc_SSE.exe -br 96000 -if "temp.wav" -of "convertmp4.aac"
x264 --pass 1 --bitrate 400 --stats ".stats" --level 3 --keyint 300 --min-keyint 30 --bframes 5 --direct auto --subme 1 --analyse none --qpstep 24 --vbv-bufsize 10000 --vbv-maxrate 10000 --ratetol 4.0 --me dia --merange 32 --threads auto --thread-input --progress --no-dct-decimate --no-psnr --no-ssim --output NUL "convertmp4.avs"
x264 --pass 2 --bitrate 400 --stats ".stats" --level 3 --keyint 300 --min-keyint 30 --ref 2 --mixed-refs --no-fast-pskip --bframes 5 --b-rdo --bime --direct auto --subme 6 --trellis 1 --analyse p8x8,b8x8,i4x4 --qpstep 24 --vbv-bufsize 10000 --vbv-maxrate 10000 --ratetol 4.0 --me umh --merange 32 --threads auto --thread-input --progress --no-dct-decimate --no-psnr --no-ssim --output "convertmp4temp.mp4" "convertmp4.avs"
MP4Box -add "convertmp4temp.mp4"#video -add "toamp4.aac:name=2ch:lang=ja" -new "mp4done.mp4"

這一卡車是x264的指令,可以更改的部分用紅色標起來了,如果改了其中一個,其他跟有改的一樣的必須全部作修改,建議是不要修改,反正轉完都會自己砍掉 XD
-br 96000 為aac的碼率(以bps為單位,所以如果要192kbps,需寫成192000),建議不要高於來源檔的碼率,來源檔的碼率可以使用mediainfo看。
-bitrate 400 為影片的碼率,也最好不要高於來源檔。
這個設定可以讓影片在psp上撥放,參考來源: MasaHeroの日記(日文網站)
如果不要轉mp4,可以略過這個檔案,並將start.bat中的call mp4encode.bat刪除即可。


再開一個檔案,存成aviencode.bat
@echo off
lame -b 160 "temp.wav" "toaavi.mp3"
mencoder "convertavi.avs" -vf-add harddup -ofps 23.97 -ovc xvid -xvidencopts bitrate=1200:pass=1 -nosound -o NUL
mencoder "convertavi.avs" -vf-add harddup -ofps 23.97 -ovc xvid -xvidencopts bitrate=1200:pass=2 -oac copy -audiofile "toaavi.mp3" -o "avidone.avi"

一樣紅色的部分可以更改,修改必須注意前後有沒有做過修改。

接下來是改檔名的部分

hash.bat
@echo off

copy \n > hashmp4.txt
copy \n > hashavi.txt
crcphashmp4.txt
crcphashavi.txt
copy apart.txt+hashmp4.txt+bpart.txt+hashavi.txt+cpart.txt rename.bat
call rename.bat

apart.txt
@echo off
set mp4crc=

bpart.txt
set avicrc=

cpart.txt
ren mp4done.mp4 "[#CHAT RUMBLE#][Tales_Of_the_Abyss][04][BIG5][%mp4crc%].mp4"
move "[#CHAT RUMBLE#][Tales_Of_the_Abyss][04][BIG5][%mp4crc%].mp4" F:\forCR\upload
ren avidone.avi "[#CHAT RUMBLE#][Tales_Of_the_Abyss][04][BIG5][%avicrc%].avi"

move "[#CHAT RUMBLE#][Tales_Of_the_Abyss][04][BIG5][%avicrc%].avi" F:\forCR\upload

紅色部分可以修改,但也要注意前後的關係,將要放置CRC碼的檔名位置填入%avicrc%%mp4crc%即可。

關於這邊我也想很久,最後是用土法砲製來完成的,如果有人有更好的方法請告訴我 <(_ _)>

如果不需要CRC,將hash.bat修改成
@echo off
ren mp4done.mp4 "xxxxxxxx.mp4"
move "xxxxxxxx.mp4" F:\forCR\upload
ren mp4done.avi "xxxxxxxx.avi"
move "xxxxxxxx.avi" F:\forCR\upload
即可,綠色部分都是最後上傳到FTP的檔名,所以請謹慎取名 XD

接者是上傳到FTP的動作,如果沒有要上傳到FTP,可將start.bat中的call upload.bat刪除

upload.bat
@echo off
ftp -s:ftp.txt

需搭配ftp.txt(名字可任取)

ftp.txt
open myhost
user
password
cd "上傳資料夾"
prompt
mput upload/*.*
bye

如果有多層資料夾可以多幾行cd指令,最後的bye是用來離開程式的。

終於到最後了.....orz
最後的動作是刪除暫存檔,開一個del.bat

@echo off
del temp.wav
del convertraw_track2.aac
del convertmp4.aac
del .stats
del convertmp4temp.mp4
del convertavi.mp3
del divx2pass.log
del hashavi.txt
del hashmp4.txt
del rename.bat
del convertraw.mp4
del convertraw.ssa

這個動作是刪除作業中可能會產生的檔案,如果有修改過檔名當然也要修改摟
懶者說明了....orz


這樣大慨就完成整個流程,如果有看不懂的地方歡迎留言發問 ^^

沒有留言:

張貼留言