[教學] [15#完成更新]MagicTV HDD 的 Excel 小工具

本帖最後由 C_Law 於 2024-3-9 17:49 編輯

首先嗚謝亞基拉師兄在以下舊 Post 介紹我用這個  MagicTV 的 TV Editor 以及要多謝這個 TV Editor 的原作者:
https://www.hkepc.com/forum/viewthread.php?fid=116&tid=2705788

http://mtvlab.blogspot.com/search/label/Magic%20TV%3A%20TV%20File%20Editor

雖然這個 2008 年寫落的 TV Editor 已不能開啟現時由 MagicTV 錄出來的 *.tv 檔,但它能從 *.ts 檔製作出 *.tv 檔,而它做出來的 *.tv 檔仍然可被現時的 MagicTV 機認得到。從它製作出來的 *.tv 檔有助我理解 *.tv 檔案的結構,我先至可以寫得出這個 Excel 檔。

這個 Excel 檔有關轉換 UTF8 byte array 到文字的 Function,來自:
https://www.di-mgt.com.au/howto-convert-vba-unicode-to-utf8.html

另外要感謝這裡的 aarv 師兄,幫忙改寫到可在 32 同 64bit MS Office 都行得到。




這個 Excel 檔,我已用了個零兩個月,本來寫來自己用,但今日放假放到最後一日,開始無所事事,就執一執,寫好小再 Post 出來睇下有無其他 MagicTV 用家合用。不過……

戴定頭盔先
1.
這個 Excel 檔只在兩部「古董」 3200D  上試用過(兩部機雖然是古董,但 Firmware 是最新的),我不肯定其他型號或者其他舊版 Firmware 的 MTV 機錄出來 *.tv 檔格式是否都一樣。我兩部古董的 Firmware 版本:


2.
這個 Excel 檔不會修改任何 *.tv 或 *.ts,極其量只是 Find Orphan 會將孤兒檔移到另一個資料夾,斷估不會導致原有的正常錄影節目遺失。不過世事無絕對,我只係斷估(尤其我無在其他型號、其他 Firmware 的 MTV 機做測試),只能講句使用後果由用家自負!無信心就先 Backup 所有錄影檔,甚至索性不要用這個 Excel 檔。(註:Ver 1.1.0 起可修改 *.tv)

3.
已知問題:
a. 避免當 HDD 正在進行大量讀寫工作時使用 B2 格去 Refresh HDD List,有機會出現硬碟無反應之類的 Error。
b. 有時候,如果同時開啟了其他 Excel 檔,當使用 Find Orphan 時,有機會出 Error,但這問題是有時出現有時又無事,我都不肯定成因。(15# 的 Version 1.1.1 應該已解決)
c. 萬一執行中途出現 Error,有時需要先關閉這 Excel 檔再重開。(10# 的 Version 1.1.0 應該已解決)
d. 部份 *.tv 檔修改節目名/簡介後,在播放時打開資訊畫面仍然會顯示舊節目名及無簡介(15# 尾)。




MagicTV Excel 小工具
MTV 的錄影檔分為 *.tv 及 *.ts,分別放入在 HDD 的 tv 及 ts 資料夾。當中 *.tv 是每個錄影節目的資訊,例如:錄影日期時間、中英文節目名、中英文節目簡介、錄影長度……等等。而 *.ts 是實際的 Video 檔。

這個用 Excel VBA 寫出來的小程式是用來讀取 Magic TV 錄影用的 HDD 內 *.tv 檔的資訊(註1),以及找出 HDD 內的「孤兒檔」(註2)。

以下網址可到我個 Google  drive 下載這個 Excel 檔的 Zip 檔,解壓後可得 MagicTV.xlsm。

15# Version 1.1.1(32+64bit MS Office)
https://drive.google.com/file/d/1XwPAHlIrms9sQAFuKWf1IsP-k8AMiVMC/view?usp=sharing

10# Version 1.1.0(32+64bit MS Office)
https://drive.google.com/file/d/1nCoszsUsjkwSV3FKuXeCtwFcXStCTaH4/view?usp=sharing

Version 1.01(32+64bit MS Office)
https://drive.google.com/file/d/1bth-MDCBLzW9r2oVvlAsJ3q-Yqm86YGL/view?usp=sharing

Version 1.0(32bit MS Office only)
https://drive.google.com/file/d/1A1XTLLTytULwY8O2c_hYQ-v4jSnoi9hB/view?usp=sharing

初步設定
由於將 USB HDD 插入不同電腦可能會被 Assign 不同的 Drive letter,所以我選擇以 HDD 的 Volume name 作為記認,如果用家有多個用來駁 MTV 做錄影的 HDD,建議將每個 HDD 都設定不同 Volume name(係 Windows 去本機/我的電腦 Right click 個 HDD 揀內容可更改 Volume name)。

使用本 Excel 檔前,建議先在 MagicTV 刪除不用保留的錄影節目,並且清空廢物箱。等一陣,確保 MTV 有足夠時間真正刪除檔案,然後用遙控器將部 MTV standby,最後才把 HDD 從 MTV 拔除。

Clipboard01.jpg

將 MTV 的 HDD 駁入電腦,初次打開 MagicTV.xlsm 及啟用巨集與 ActiveX 後,Excel 會彈 Message box 話未設定 HDD ……之類,去 Main sheet B2 格的 Pull down menu 選取 MTV 的 HDD,然後 Double click B5 格將所選的 HDD 的 Volume name 複製到 Default volume name 格 B1。存檔後(如果有多個 HDD,建議每個 HDD 都另存新檔),以後再開這個 Excel 檔,如果相關 HDD 已連接,都會根據 B1 格的 Default volume name 自動選擇相關 Drive letter 的 HDD。

之後去 Double click B6 和 B7 格選擇/新增用作搬遷孤兒檔的資料來(只能用同一個 HDD),我會在 MTV 個 HDD 開個叫 MagicTV 資料夾,再在它之下分別開 Orphan_tv 和 Orphan_ts 資料夾。如果在 MTV 的 HDD 開個叫做 AVCHD 的資料夾並設定成這個 Excel 檔的 Orphan ts folder,被移到這 AVCHD 資料夾的 *.ts 檔,在 MTV 去:設定>增值功能>高清攝錄機影片,可以顯示出來,但只可作基本播放(不能落 Bookmark…之類額外功能),也不能在 MTV 刪除,要將個 HDD 駁返去電腦才可刪除。




Read One TV File
這按鈕用作讀取一個 *.tv 檔的資訊,包括:錄影日期/時間、台號、片長、中/英文節目名稱、中/英文節目簡介、相關的 *.ts 檔名……等等。

Clipboard02.jpg

如果 tv 檔內的相關 *.ts 檔之中有一個或多個遺失,MTV 會視作無效檔案,不會在錄影清單中顯示出來,而這個 Excel 會視作 No. of ts files =0(B19 格)。




Find Orphan
這按鈕會讀取所有 tv 和 ts 資料夾內所有檔案並互相比較,從中找出無用的「孤兒檔」(註2),找到的「孤兒檔」可移送到相關的「孤兒」資料夾(B6 和 B7 格),如無意外,這些孤兒檔不會被 MTV 使用,殘留係 HDD 都只是浪費空間,用家可自行決定是否刪除。

完成 Find Orphan 程序後,所有正常(可被 MTV 認出的 *.tv 及 *.ts)的檔案會分別在 tv 及 ts sheet 中列出。孤兒檔會在 Orphan_tv 及 Orphan_ts sheet 列出。如果選擇將孤兒檔移到孤兒資料夾,這兩張 Orphan_t* sheet 將被清空。

註1
如果跟 EPG 以預校方式進行錄影,「通常」 MTV 的錄影檔會以日期時間(yymmdd_hhmmss)、台號(ch)以及錄影節目名稱作為 *.tv 及 *.ts 的檔名,檔名格式是:yymmdd_hhmmss_ch_節目名稱.tv(及.ts),如果想將某個節目抄入電腦睇,要找出相關檔案本來並不難。不過,有時候錄影檔案名並非跟節目名。

例如,當初從 EPG 揀一個節目(A)做星期一至五的錄影(並非用系列錄影),即使電視台已將這節目 A 全部播放完畢,但 MTV 仍然會按時繼續錄影之後在同時段播放的新節目 B,不過就會繼續用舊節目名 A 做 *.tv 及 *.ts 的檔名。

又例如,預校錄影兩個同台的相連節目 A 和 B(甚至多個相連節目),而且每個節目又各自提早開始及延長結束時間,兩個錄影節目之間會有一段重疊時間,雖然 *.tv 的檔名仍然會分別用上節目名 A 和 B:
yymmdd_hhmmss_ch_A.tv 及
YYMMDD_HHMMSS_ch_B.tv
(yymmdd_hhmmss 及 YYMMDD_HHMMSS 分別是兩個節目的實際開始錄影日期時間)
但 *.ts 方面,MTV 不會將重複將重疊時間分別寫入各自的錄影檔,而係會分開成以下三個檔:
yymmdd_hhmmss_ch_A.ts
yymmdd_hhmmss_ch_A.001.ts
yymmdd_hhmmss_ch_A.002.ts
當中的 yyymmdd_hhmmss 是第一個節目的實際開始時間,三個檔都會跟節目 A 的名稱,當中 *.001.ts 是兩個節目重疊的部份。
如果想抄節目 A 入電腦就要抄
yymmdd_hhmmss_ch_A.ts 及
yymmdd_hhmmss_ch_A.001.ts
想要 B 就要抄:(B 節目的 *.tv 檔跟 B 節目名,但相關的 *.ts 檔卻是跟 A 的節目名)
yymmdd_hhmmss_ch_A.001.ts
yymmdd_hhmmss_ch_A.002.ts

從這裡可見到雖然節目 B 的 *.tv 檔跟 B 的檔名,但相關的 *.ts 檔卻是跟 A 的節目名,所以想抄 B 入電腦的話,驟眼望落 ts 資料夾都不知究竟需要抄那些檔案。

除此之外還有其他情況會令錄影檔的檔名同節目名稱有出入,有見及此,就萌生個念頭想寫個程式去讀取 MTV 的 *.tv 檔去搵出相關的 *.ts 檔。

TOP

註2.
可能係因為我以前的壞習慣,有時想將 MTV 個 HDD 拆出來駁去電腦,只要當時並非正在錄影或者播放 HDD 的錄影節目,我就直接從 MTV 拔走個 HDD,可能因此令一些本應已用 MTV 刪除(甚至連廢物箱都已清理)的節目的檔案殘留在 HDD 裡,有時候是刪了 *.tv 檔但留低了 *.ts 檔(分開多成個 ts 的檔可能只刪除了一部份),有時就係刪了 *.ts 但留低了 *.tv。只要 *.tv 失去其中一份 *.ts 或全部 *.ts,又或者失去了 *.tv 但留低 *.ts,MTV 就不會再理會這堆「孤兒檔」,而且越積越多孤兒檔。

*.tv 的孤兒檔都還好,每個都只係幾個 kB,就算積存大量孤兒檔都不算太浪費 HDD 空間。

但係 *.ts 檔閒閒地幾百 MB、幾 GB 甚過 10GB,留低孤兒檔就好浪費 HDD 空間。

我懷欵有孤兒檔殘留係 HDD 的原因係我以前會直接拔走個 HDD,當我發現有孤兒檔後,我開始改變習慣,想拔走 HDD 的話會先用遙控器 Standby 部 MTV,等 MTV 機身個 Display 顯示閃閃下的「Plase wait」,閃完後改為顯示日期/時間後,部機完全進入 Standby mode 才拔走 HDD,從此之後就好似再無新的孤兒檔出現,但舊的孤兒檔仍然要諗辦法去清理,既然寫開程式去讀取 *.tv 檔,就順手寫多個功能去搵出孤兒檔。

TOP

本帖最後由 aarv 於 2023-12-26 23:14 編輯

發覺64bit excel行唔到,自行google後要修改vba sheet1個map UTF-16段code先得
  1. #If VBA7 Then
  2. Private Declare PtrSafe Function MultiByteToWideChar Lib "kernel32" (ByVal CodePage As Long, ByVal dwFlags As Long, ByVal lpMultiByteStr As LongPtr, ByVal cchMultiByte As Long, ByVal lpWideCharStr As LongPtr, ByVal cchWideChar As Long) As Long
  3. #Else
  4. Private Declare Function MultiByteToWideChar Lib "kernel32" (ByVal CodePage As Long, ByVal dwFlags As Long, ByVal lpMultiByteStr As Long, ByVal cchMultiByte As Long, ByVal lpWideCharStr As Long, ByVal cchWideChar As Long) As Long
  5. #End If
複製代碼
但咁改法唔知office 2007行唔行到,等樓主試

TOP

本帖最後由 C_Law 於 2023-12-26 23:43 編輯
發覺64bit excel行唔到,自行google後要修改vba sheet1個map UTF-16段code先得但咁改法唔知office 2007行唔 ...
aarv 發表於 2023/12/26 22:37


多謝指正,Thanks~~~

因為我的 Digital TV card/USB 手指都是裝入部行 32bit Win7+32bit M$ Office 的古董電腦,習慣了用這部古董去搞錄電視的相關動作,寫這個 Excel 檔時也是用這古董,都忘了分別用係 32/64bit M$ Office 的 VBA Code 要改一改。

TOP

發覺64bit excel行唔到,自行google後要修改vba sheet1個map UTF-16段code先得但咁改法唔知office 2007行唔 ...
aarv 發表於 2023/12/26 22:37


Thanks~~~~

剛剛試過,係我部古董用 32bit 的 M$ Office 行得到你段 #If...#Else...#End If。
你是用 64bit 的 Office 也行到?

TOP

Thanks~~~~

剛剛試過,係我部古董用 32bit 的 M$ Office 行得到你段 #If...#Else...#End I ...
C_Law 發表於 2023-12-26 23:48

office 2021, mtv3700d, 簡單測試過下應該無問題

TOP

office 2021, mtv3700d, 簡單測試過下應該無問題
aarv 發表於 2023/12/27 00:10


Thanks again!!

已上載新版本 Version 1.01,係 1# 可找到下載連結。

TOP

多謝版主幫忙解鎖這個 Post。

新版預告,加入新功能:
1. 可修改 *.tv 檔的檔名、中/英文節目名、節目簡介、電視台名
2. 可估計「假剪接」後的節目時間長度
3. 由 Sheet TV 去讀取/修改 *.tv 檔

TOP

本帖最後由 C_Law 於 2024-2-13 17:18 編輯

Version 1.1.0
下載:
https://drive.google.com/file/d/1nCoszsUsjkwSV3FKuXeCtwFcXStCTaH4/view?usp=sharing

同之前的版本一樣,我只係試過在以下 Firware 版本的 MTV3200D 試用過。
Firmware.jpg

新增功能:
1. 讀取 *.tv 檔內的中/英文電視台名
2. 粗略估計用 Bookmark「假剪接」後的時間長度
3. 新增「Edit tv file」按鈕,可修改 *.tv 檔內的中/英文節目名、簡介及電視台名
4. Double click Main sheet 的 B10 格可修改該 *.tv 檔
5. Double click TV sheet 內任可一格可讀取/修改相關的 *.tv 檔
NewRead.jpg

詳細解說
1. 讀取 *.tv 檔內的中/英文電視台名(Main sheet 的 C14/D14 格)
我部古董 3200D 錄出來的 *.tv 檔本身內藏中/英文電視台名,用這 Excel 檔開啟 *.tv 檔可讀取電視台名並放到 Main sheet 的 C14/D14 格。不過,由 1# 提到的 MagicTV TV Editor 所做出來的 *.tv 檔內並無電視台名,只有電視台號,用這 Excel 程式讀取時不會顯示電視台名。

2. 粗略估計用 Bookmark「假剪接」後的時間長度(Main sheet 的 C13 格)
MagicTV 可落 Bookmark 做假剪接,播放時會跳過被剪走位置,不過,在錄影節目清單中只會列出原本的錄影節目長度。
中文界面節目清單
cList.jpg
英文界面節目清單
eList.jpg

以上兩圖的 A、B、C 分別是:
A. 原裝由 MagicTV 錄出來的 *.tv
B. 經這 Excel 程式修改過的 A
C. 用 SmartCutter 將 *.ts 剪接後再用 MagicTV TV Editor 做出來的 *.tv 檔

例如以上節目清單中的 A 和 B,即使已做假剪接,但清單中仍然顯示原來的長度 01:05:00。而這 Excel 工具可從 *.tv 檔內讀取 Bookmark 位置去估計假剪接後的時間(Main sheet C13 格的 00:40:41)。

以下是人手紀錄這節目的 Bookmark 位置:
TimeBar.jpg

從人手紀錄的 Bookmark 計算出來的假剪接後時間應該是 00:39:45,而這 Excel 檔計算的時間卻是 00:40:41,相差約 2~3%,估計原因是現時電視台以浮動 Bitrate 廣播,Bitrate 不停變,而這 Excel 程式並無讀取 *.ts 內的 Time code,只係按固定比例去計算時間,所以會出現頗大誤差。這 Excel 程式顯示的假剪接後時間長度只算是個「好過無」的粗略估計! 試過錄影收台後靜態畫面的顏色板,落幾個 Bookmark 做假剪接,結果估計的剪接後時間係好準,相信因為係靜態畫面,Bitrate 可以話不會有什麼變化,所以可以估計得好準。

至於用 SmartCutter 實際剪接後的長度是 00:39:38。同人手紀錄 Bookmark 位置計算的時間很接近。(SmartCutter 可以按指位一個 Frame 做剪接,而 MagicTV 只能選擇大約位置,所以我在 MagicTV 落  Bookmark 的位置並非我用 Smartcutter 做剪接位置,因此兩者始終會有分別)。

3. 新增「Edit tv file」按鈕,可修改 *.tv 檔內的中/英文節目名、簡介及電視台名
其實我主要想改節目名,不過節目名、簡介及電視台名係 *.tv 檔內相連,而且修改原理係一樣,既然寫到改得節目名就順手寫到可以改埋簡介及電視台名。

我之所以想改節目名,有三個原因:
a. 想加入假剪接後的時間,方便日後揀節目睇時預時間;
b. 有些旅遊/生態類的節目系列,集集去不同地方,但每集都用同一個節目名及簡介,我想加返地方名上去;
c. 有時電視台提供的節目名前加上廣告商品名 and/or 後面再加個「攝時間」的節目名,例如將本來簡簡單單的
  節目名
變成
  乜乜商品呈獻:節目名 及 物物攝時間節目名
搞到個節目名「水蛇春咁長」,我想刪除多餘的字。

在 Main sheet 按「Edit tv file」按鈕可選擇想修改的 *.tv 檔(例如開啟 10# 第一幅圖個 tv 檔,相關內容可睇返第一幅圖),以下的 Window form 將會打開,並已載入原本該 *.tv 檔內的相關資料。
SaveAs.jpg

當中的中/英文節目名前會自動加上「(改)/(Mod)」,用家也可再修改,但建議節目名要改到同原來的不一樣,否則事後在 MagicTV 的錄影節目清單中將會出現兩個相同名稱的節目,不知那個是原裝、那個是修改過的。

張 Window form 左下角會列出假剪接後的估計長度,有需要時可手動加埋入去節目名(例如我加在尾的 40m,反正這時間不準,無必要太詳細加埋秒 )。

如有需要,節目簡介及電視台名都可以改,我就貪得意將中/英文的電視台名都改一改。

不過,中/英文節目名、節目簡介及電視台名加埋的總字數係有上限(正確來講係 Byte 數上限,通常英文/數字是每字 1byte,中文字就每字 3byte),憑觀察 *.tv 檔內容去估計,總字數上限大約是 1000byte,如果加入太多字,做 Save as 時會出提示並拒絕存檔。不過,這個 1000byte 只是我的估計,說不定 MagicTV 的實際運作可能有更低的上限,所以做 Save as 時就算無出字數太多的提示都不保證一定得,因此如非必要都不要亂加字入去。

完成修改後就可以按「Save as」存檔。程式預設會在原來的 *.tv 檔名前加上「Mod_」變成 Mod_*.tv,用家可再自行修改,也可刪除開頭的 Mod_ 用返原檔名存檔(會有提示問是否 Overwrite 舊檔)。由於我只在兩部相同 Firmware 的 3200D 測試過,我不肯定其他型號、其他 Firmware 的 MagicTV 機的反應是否一樣,所以我建議最初使用時不要用原名 Overwrite 舊檔,試清楚真係無問題,日後再要修改其他 *.tv 檔先至直接用原檔名 Overwrite 舊檔。

如果用原名 Overwrite 舊檔,記得去 MagicTV 個 HDD 的 Root folder,刪除 tv.dd 檔。如果無刪除這檔,將 HDD 駁返去 MagicTV 後,修改過的新檔會被打回原狀。

將 HDD 駁返去 MagicTV 後,按遙控器 Play 鍵打開錄影清單會見到原本的舊節目 A 及修改後的 B(如果存檔時用同名 Overwrite 舊檔就只會見到修改後的 B,原本的 A 會消失),試下播放修改後的節目 B,如無意外,播放時按遙控器的 Info 鍵打開錄影節目的資訊,應該會見到修改後的資料:
中文界面的資訊畫面:
cInfo.jpg

英文界面的資訊畫面:
eInfo.jpg

如果一切正常,就可以停止播放,返回錄影節目清單刪原裝的節目 A。由於 A 和 B 都共用相同的 *.ts 檔,用 MagicTV 刪除節目 A 時只會刪除 A 的 *.tv 檔,不會刪除任何 *.ts 檔,要將 A 和 B 都刪除才會刪除 *.ts 檔。不過,如果還有其他已錄影節目都用這些 *.ts 檔,被其他節目使用的 *.ts 檔還是會被保留。

4. Double click Main sheet 的 B10 格可修改該 *.tv 檔
等如按「Edit tv file」再揀 B10 格的 *.tv 檔去修改。

5. Double click TV sheet 內任可一格可讀取/修改相關的 *.tv 檔。
在 TV sheet 內 Double click 任何一格,會先彈出提示問是否要讀取這格相關的 *.tv 檔,如果在提示中揀「Yes」就會再 Main sheet 打開這個 *.tv檔,等如在 Main sheet 按「Read One TV File」再揀這個 *.tv 檔。

如果在提示中揀「No」會再彈出下一個提示問是否要修改這 *.tv 檔,揀「Yes」可修改它,等如在 Main sheet 按「Edit tv file」再揀這個 *.tv 檔。

已知問題
有部份錄影節目,即使用「Edit tv file」修改中/英文節目名 and/or 節目簡介,並已把 HDD root folder 內的 tv.dd 刪除,但係將個 HDD 駁返去 MagicTV 後,雖然在錄影節目清單中可見到修改後的新節目名,但係播放時按遙控器 Info 鍵,資訊畫面仍然顯示原本的節目名/簡介,不過如果有改過電視台名,仍然可見到修改後的電視台名。這情況似乎只會出現係本身並無中/英文節目簡介的錄影節目(11# 試過另一個本身無簡介的節目係改得到又正確顯示得到)。

例如以下的錄影節目,左邊係原裝,右邊係我嘗試修改:
NoDescription.jpg

改完後駁返個 HDD 去 MagicTV,開錄影清單睇下,X 係原裝,Y 後修改後,可以見到 Y 已改了節目名同電視台名:
NoDescriptionList.jpg

但播放 Y 時按遙控 Info 鍵卻見到節目名仍然是原裝節目名,節目簡介仍然是空的,只有電視台名係改了。
NoDescriptionInfo.jpg

改用英文界面睇下,結果都一樣。(費事Upload 相上來 )

初時我以為是修改時搞錯了,拆返個 HDD 駁去電腦再睇下,見到個 *.tv 檔的確已經改了,只係部 MagicTV 無顯示出來。我都不知原因。

TOP