ใช้ไฟล์แบตช์และสคริปต์ vbs เพื่อบันทึกวิดีโอเว็บไซต์โดยอัตโนมัติ
ขณะนี้สถานีโทรทัศน์มีพอร์ทัลของตนเองแล้ว เราจึงสามารถใช้ประโยชน์จากอินเทอร์เน็ตได้อย่างเต็มที่เพื่อขยายอิทธิพลของสถานีโทรทัศน์ท้องถิ่น ในความเป็นจริง การแขวนรายการเด่นรายวันของสถานีโทรทัศน์ท้องถิ่นไว้บนเว็บไซต์ได้กลายเป็นหนึ่งในขั้นตอนที่จำเป็นในการสร้างเว็บไซต์สถานีโทรทัศน์ แต่ปัญหาที่มาพร้อมกับกระบวนการบันทึกด้วยตนเองซึ่งจำเป็นทุกวันจะทำให้ผู้จัดการไม่สะดวกอย่างยิ่ง บนพื้นฐานของงานที่กำหนดเวลาไว้ของ Windows ปัญหานี้สามารถแก้ไขได้อย่างมีประสิทธิภาพโดยการรวมโปรแกรมแบตช์และโปรแกรมสคริปต์เข้าด้วยกัน
1: สร้างงานการเขียนโค้ด
เราจะใช้คอมพิวเตอร์ที่มีการ์ดจับภาพวิดีโอเพื่อเสร็จสิ้นกระบวนการเข้ารหัส แม้ว่าการเขียนโค้ดจะไม่ใช่จุดเน้นของบทความนี้ แต่ก็ยังจำเป็นต้องอธิบาย สิ่งสำคัญคือการใช้ helix Producer plus9 เพื่อสร้างไฟล์พารามิเตอร์การเข้ารหัส จริงๆ แล้ว มันเป็นเพียงไฟล์ xml ที่มีส่วนต่อท้าย rpjf (รูปที่ 1) ควรสังเกตว่าตัวเลือกอินพุตเสียงประกอบด้วยอินพุตสายและอินพุตไมโครโฟน ซึ่งจำเป็นต้องตรงกับสายเข้าใช้งานจริง นอกจากนี้ ไม่จำเป็นต้องเลือกตัวเลือกการเข้ารหัส 2 pass vedio การเลือกจะไม่มีผลใด ๆ ยกเว้นการแสดง คำเตือน ; นอกจากนี้ เนื่องจากโหมดการเข้าถึงเครือข่ายส่วนใหญ่ในปัจจุบันเป็นแบบ dial-up และ dsl จึงจำเป็นต้องสร้างไฟล์วิดีโอที่มีอัตราบิต 56k และ 384k เท่านั้น ในที่สุด ชื่อของไฟล์วิดีโอที่บันทึกไว้จะถูกระบุตามวันที่ได้ดีที่สุด ตัวอย่างเช่น: 20060301.rm.
<?xml version=การเข้ารหัส 1.0=UTF-8?>
<งาน xmlns=http://ns.real.com/tools/job.1.0.1>
<enableTwoPass type=bool>false</enableTwoPass>
<คลิปข้อมูล>
<รายการ>
<ชื่อ>ผู้เขียน</ชื่อ>
<value type=string>ZSTV</value>
</รายการ>
<รายการ>
<ชื่อ>ลิขสิทธิ์</ชื่อ>
<value type=string>(c) ZSTV2006 </value>
</รายการ>
<รายการ>
<ชื่อ>คำหลัก</ชื่อ>
<value type=string>ZSNews[2006-03-21]</value>
</รายการ>
<รายการ>
<ชื่อ>ชื่อเรื่อง</ชื่อ>
<value type=string>ZSNews[2006-03-21]</value>
</รายการ>
</คลิปข้อมูล>
<อินพุต>
<แคปเจอร์อินพุท>
<audioDeviceID type=string>Intel(r) Integrated Audio</audioDeviceID>
-
เราสามารถสร้างไฟล์แบตช์ชื่อ shixian.bat เพื่อเรียกไฟล์พารามิเตอร์ที่แสดงด้านบน
ผู้ผลิต -jd:/shixian/shixian.rpjf -daw -lc e,i
กระบวนการบันทึกเริ่มต้นจะตรวจสอบการเปลี่ยนแปลงเสียงแบบเรียลไทม์และบันทึกลงในไฟล์ที่เรียกว่า Producer.log อย่างไรก็ตาม มีการสร้างบันทึกจำนวนมากซึ่งทำให้ไฟล์บันทึกมีขนาดใหญ่อย่างรวดเร็วและอาจทำให้เกิดการหยุดชะงักโดยไม่คาดคิดในกระบวนการบันทึก สามารถใช้พารามิเตอร์ -daw เพื่อปิดการตรวจสอบเสียง จากนั้นใช้ lc e,i เพื่อระบุว่าจะบันทึกเฉพาะข้อผิดพลาดและข้อมูลเท่านั้น หลังจากทำเช่นนี้ กระบวนการบันทึกจะมีเสถียรภาพมากขึ้น
ตราบใดที่เราเพิ่มงานในการรันไฟล์ shixian.bat ทุกวันในแผน เราก็จะได้รับไฟล์ rm พร้อมคุณสมบัติและชื่อไฟล์เดียวกันทุกวัน ไฟล์ชื่อ 20060321.rm พร้อมด้วยแอตทริบิวต์ 2006-03-21 จะถูกสร้างขึ้นที่นี่ทุกวัน ฟังดูเหมือนพูดไม่ออก และที่แย่กว่านั้นคือมันไม่ได้ทำให้งานของผู้ดูแลระบบง่ายขึ้นอีกต่อไป เพราะเขาต้องเปิดเซิร์ฟเวอร์และเปลี่ยนชื่อทุกวัน และแม้ว่าเขาจะโชคดีพอที่จะจ้างผู้ดูแลระบบที่ขยันขันแข็ง (ที่ไม่รังเกียจที่จะทำเรื่องซ้ำซากทุกวัน) เขาก็ยังไม่สามารถเปลี่ยนแอตทริบิวต์ของวันที่ที่แสดงในไฟล์ซึ่งถูกกำหนดไว้แล้วในระหว่างขั้นตอนการบันทึกนี้ . เว้นเสียแต่ว่า…….
2: สร้างงานเพื่อแก้ไขไฟล์พารามิเตอร์การเข้ารหัส
หลักการนั้นง่ายมาก: อัปเดตฟิลด์ xml ที่เกี่ยวข้องกับวันที่ในไฟล์พารามิเตอร์การเข้ารหัสทุกวัน ในกรณีนี้เป็นแอตทริบิวต์ของไฟล์ที่แสดงวันที่และชื่อไฟล์ นี่คือโค้ดสคริปต์ที่ใช้ในการอัพเดตฟิลด์วันที่:
สลัวหรือ
set regOR=new regexp 'สร้างวัตถุนิพจน์ทั่วไป'
regOR.ignorecase=True ' ละเว้นตัวพิมพ์
regOR.global=True ' การค้นหาใช้กับสตริงทั้งหมด
regOR.pattern=^([0-9]{1})$ ' สร้างรูปแบบการค้นหาเป็นนิพจน์ตัวเลขเดี่ยว
เวลาของฉันสลัว
mytime=date ' ใช้ฟังก์ชัน date เพื่อไปยังวันที่ของระบบและกำหนดให้กับ mydate
yy=year(mytime) 'แยกปีออกจากวันที่ของระบบ
mm=month(mytime) 'แยกเดือนออกจากวันที่ของระบบ
dd=day(mytime) 'แยกวันที่ออกจากวันที่ของระบบ
ถ้า regOR.test(mm) ดังนั้น ' ตรวจสอบว่าเดือนเป็นเลขคี่ (มกราคมถึงกันยายน)
mm=regOR.replace(mm,0$1) ' ถ้าเป็นเช่นนั้น ให้เพิ่ม 0 ก่อนเดือนเพื่อให้เป็นตัวเลขสองหลัก
สิ้นสุดถ้า
ถ้า regOR.test(dd) ดังนั้น ' ตรวจสอบว่าวันที่เป็นเลขคี่ (หนึ่งถึงเก้า)
dd=regOR.replace(dd,0$1) ' ถ้าเป็นเช่นนั้น ให้เติม 0 ก่อนวันที่เพื่อให้เป็นตัวเลขสองหลัก
สิ้นสุดถ้า
mytime=yy & - & mm & - & dd ' รวมปี เดือน และวันเป็นรูปแบบ yy-mm-dd
dest=yy & mm & dd ' รวมปี เดือน และวัน เป็นรูปแบบ yymmdd
pattern1=(.*[^0-9])([0-9]{4}/-[0-9]{2}/-[0-9]{2})([^0-9]. *)
'ตั้งค่าตัวแปรรูปแบบ pattern1 เป็น %d%d%d %d- %d %d -%d %d
pattern2=(.*[^0-9])([0-9]{8})([^0-9].*) ' ตั้งค่าตัวแปรรูปแบบ pattern2 ถึง 8 หมายเลขติดต่อกัน
regOR.pattern=pattern1 ' สร้างรูปแบบการค้นหาเป็นรูปแบบ1
dimtempstring
ตั้งค่า fso = CreateObject(Scripting.FileSystemObject) 'สร้างวัตถุไฟล์ระบบ
Set f = fso.CreateTextFile(d:/shixian/temp.txt, True) ' สร้างไฟล์ข้อความใหม่ชื่อ temp
Set fr = fso.GetFile(d:/shixian/shixian.rpjf) ' รับไฟล์พารามิเตอร์การเข้ารหัส shixian.rpjf
Set ts = fr.OpenAsTextStream(1,-2) 'เปิดไฟล์พารามิเตอร์เป็นข้อความแบบอ่านอย่างเดียว
do until ts.AtEndOfStream ' สร้างลูปจนกว่าไฟล์พารามิเตอร์จะถูกอ่าน
tempstring=ts.readline 'อ่านไฟล์พารามิเตอร์ในหน่วยบรรทัด
ถ้า regOR.test(tempstring) ให้ 'ค้นหาฟิลด์วันที่ในพารามิเตอร์การเปลี่ยนบรรทัด'
tempstring=regOR.replace(tempstring,$1 & mytime & $3) 'หากมีอยู่ ให้อัปเดต
สิ้นสุดถ้า
regOR.pattern=pattern2 ' สร้างรูปแบบการค้นหาเป็นรูปแบบ2
ถ้า regOR.test(tempstring) ให้ 'ค้นหาฟิลด์วันที่ในพารามิเตอร์การเปลี่ยนบรรทัด'
tempstring=regOR.replace(tempstring,$1 & dest & $3) 'ถ้ามีอยู่ ให้อัปเดต
สิ้นสุดถ้า
regOR.pattern=pattern1 ' สร้างรูปแบบการค้นหาใหม่เป็น pattern1
f.writeline(tempstring) 'เขียนข้อมูลที่อัพเดตไปยังไฟล์ temp.txt
วนซ้ำ
ts.close 'ต่อไปนี้คือการปิดและออกจากระบบแต่ละวัตถุ
ฉ.ปิด
ตั้งค่า regOR=ไม่มีอะไร
การตั้งค่า = ไม่มีอะไร
ตั้ง fr=ไม่มีอะไร
ตั้งค่า f=ไม่มีอะไร
ตั้งค่า fso=nothing
สิ่งที่ต้องอธิบายคือเหตุใดจึงเพิ่ม 0 ก่อนเดือนและวันที่มีหลักเดียว อธิบายได้ง่ายกว่าด้วยการเปรียบเทียบ: หากไม่ได้เพิ่ม 0 ดังนั้นสำหรับไฟล์ชื่อ 2006111.rm จะหมายถึงวันที่ 11 มกราคม 2549 หรือ 1 พฤศจิกายน 2549 หรือไม่ หลังจากเพิ่ม 0 จะกลายเป็น 20060111.rm เห็นได้ชัดเจนว่าเป็นอันแรก
ฟังก์ชันเฉพาะของโค้ดสคริปต์ข้างต้นคือการนำเข้าข้อมูลในไฟล์พารามิเตอร์ไปยังไฟล์ข้อความชั่วคราวในหน่วยพฤติกรรม ตรวจสอบฟิลด์ xml ที่เกี่ยวข้องกับเวลาแบบเรียลไทม์และอัปเดตข้อมูลเหล่านั้น และสุดท้ายก็สร้างไฟล์ temp.txt หลังจากนั้น สิ่งที่เราต้องทำคือเรียกสคริปต์ด้วยแบตช์ไฟล์ ลบไฟล์พารามิเตอร์เก่า และสุดท้ายเปลี่ยนชื่อ temp.txt เป็นไฟล์พารามิเตอร์
นี่คือรหัสในไฟล์แบตช์ update.bat:
@ปิดเสียงสะท้อน
d:/shixian/update.vbs
ถ้ามี d:/shixian/shixian.rpjf เดล d:/shixian/shixian.rpjf
ถ้ามี d:/shixian/temp.txt เปลี่ยนชื่อ d:/shixian/temp.txt shixian.rpjf
เช่นเดียวกับในส่วนแรก คุณยังคงต้องเพิ่มไฟล์แบตช์ update.bat ลงในแผนและงานต่างๆ เพื่อให้สามารถเริ่มต้นได้เป็นประจำทุกวัน
3: สร้างงานเกียร์อัตโนมัติ
เพื่อให้มั่นใจถึงความเสถียร เซิร์ฟเวอร์การเข้ารหัสและเซิร์ฟเวอร์เว็บไซต์มักจะถูกแยกออกจากกัน ซึ่งกำหนดให้เราต้องถ่ายโอนไฟล์วิดีโอที่บันทึกไว้ไปยังเซิร์ฟเวอร์ของเว็บไซต์ทุกวัน คำสั่ง ftp ในแบตช์ไฟล์สามารถใช้ฟังก์ชันนี้ได้อย่างสมบูรณ์แบบ
ต่อไปนี้คือรหัสในกระบวนการแบทช์ของ Transfer.bat:
@ปิดเสียงสะท้อน
ftp -s:media.txt
ถ้ามี d:/shixian/shixian20060321.rm del d:/shixian/shixian20060321.rm
เมื่อพิจารณาถึงราคาที่น่าอัศจรรย์ของฮาร์ดไดรฟ์ SCSI พื้นที่ว่างในฮาร์ดดิสก์ของเซิร์ฟเวอร์การเข้ารหัสไม่จำเป็นต้องใหญ่เกินไป หน้าที่ของบรรทัดสุดท้ายคือการลบไฟล์วิดีโอในเซิร์ฟเวอร์การเข้ารหัสเพื่อประหยัดพื้นที่ Media.txt เป็นไฟล์พารามิเตอร์ ftp ซึ่งบันทึกชื่อ ชื่อผู้ใช้ รหัสผ่าน และการดำเนินการที่เกี่ยวข้องของเซิร์ฟเวอร์เข้าสู่ระบบ ftp โดยมีรูปแบบเฉพาะดังนี้:
เปิด/ชื่อเซิร์ฟเวอร์หรือที่อยู่ IP/
/ ชื่อผู้ใช้/
/รหัสผ่านผู้ใช้/
ใส่ / ชื่อไฟล์ที่ต้องการโอน /
ล้มเลิก
แน่นอนว่ามีนิพจน์วันที่จำนวนมากที่ต้องได้รับการอัปเดตในตัวอย่างโค้ดด้านบน ด้วยเหตุผลเดียวกัน เราจึงจำเป็นต้องใช้สคริปต์อัปเดตที่คล้ายกัน และรหัสเฉพาะจะไม่ถูกทำซ้ำ
4: ข้อเสนอแนะบางประการเพื่อการปรับปรุง
1: ฟังก์ชั่นการเข้ารหัสสามารถทำได้โดยใช้เครื่องเล่นสื่อ
2: ในสคริปต์อัปเดต โค้ดที่ใช้ในการประกาศและยกเลิกการลงทะเบียนออบเจ็กต์มีหลายบรรทัด ซึ่งสามารถทำให้ง่ายขึ้นมากหากใช้ Perl เนื่องจาก Perl มีชุดสัญลักษณ์การดำเนินการเพื่อใช้ฟังก์ชันของนิพจน์ทั่วไป และในความเป็นจริง Perl เกิดมาเพื่อประมวลผลข้อความ
open(RPJF,<c:/code/10161.rpjf) หรือ die(ไม่สามารถเปิดได้เนื่องจาก $!/n);
open(TEMP,>c:/code/temp.txt) หรือ die (ไม่สามารถเปิดได้เนื่องจาก $!/n);
($วินาที,$นาที,$ชั่วโมง,$mday,$mon,$ปี,$wday,$yday,$isdst)=localtime();
$mday=sprintf(%.2d,$mday);
$mon=sprintf(%.2d,$mon+1);
$ปี+=1900;
$timerF=$year.$mon.$mday;
$timerS=$year.-.$mon.-.$mday;
ในขณะที่(<RPJF>){
สับ();
$_=~s/(.*)([0-9]{8})(.*)/$1$timerF$3/;
$_=~s/(.*)([0-9]{4}/-[0-9]{2}/-[0-9]{2})(.*)/$1$timerS$3/ ;
พิมพ์อุณหภูมิ $_/n;
-
ปิด(RPJF);
ปิด(ชั่วคราว);
3: การใช้การแมปดิสก์ทำให้การถ่ายโอนไฟล์สะดวกยิ่งขึ้น แต่ต้องคำนึงถึงปัญหาด้านความปลอดภัยด้วย