透過 DVDFab 備份 4K UHD 光碟 (需使用特定 UHD BD 藍光燒錄機並刷韌體降版)

透過 DVDFab 備份 4K UHD 光碟 (需使用特定 UHD BD 藍光燒錄機並刷韌體降版)

為 UHD BD 進行備份需準備以下三件事情:1. 準備一台可支援的光碟機:像是 LG BU40N、Archgon UHD 藍光燒錄機 (MD-8107-U3YC-UHDB-S)、Buffalo BRUHD-PU3-BK,或其他官方列出可支援的機器型號2. 使用 DVDFab UHD Drive Tool 重刷機器韌體,降至可支援版本3. 使用 DVDFab 進行備份 UHD BD 與一般藍光光碟的不同 UHD BD 的外型雖然與一般藍光光碟長的一樣,但實際 UHD BD 的光碟片以一般藍光光碟為基礎進行改良,調整內部數據的紀錄方式及物理特性。改良後的 UHD BD 可以容納更多的資料,最高可以容納三層的儲存空間,每層可寫入 33GB 的資料量,等於最高可寫入將近 100GB 的容量。因此需要可以相容的光碟機才能讀取 UHD BD 的內容。這還只是光碟讀取層面的相容性需求。 若想要在電腦上播放 4K UHD BD 的電影,除了需要相容的光碟機之外,還需要有相容的軟硬體才能播放。其原因是因為 UHD 藍光光碟所使用的數位版權管理(Digital Rights Management,DRM)機制需要搭配 Intel 處理器的 SGX (Intel® Software Guard...

Winsows / 如何為不明裝置安裝驅動程式 (unknown device)

Winsows / 如何為不明裝置安裝驅動程式 (unknown device)

有時候我們安裝新系統的時候,難免會漏掉一些裝置的驅動程式,卻又不確定究竟到底是哪個晶片或PCI-E、USB…裝置忘了安裝 (或是懶得打開電腦一個一個測試) 😅 這邊有兩個方法可以幫助我們找出正確的裝置名稱並且找到對應的驅動程式: 以下圖為例,目前電腦中有一個不明裝置,以下分別說明兩種查詢方法。 ▍方法一:從硬體的 Device instance path、Hardware Ids 或 Device description 詳細資訊查詢 1. 從裝置管理員當中找到未知裝置 [右鍵] → [內容] → [詳細資料] 2. 查詢 [屬性] 當中的 Device instance path (裝置例項路徑)、Hardware Ids (硬體識別碼) 或 Device description (裝置描述) 等等資訊 3. 直接 Google 或許可以找到相對應的驅動程式 ▍方法二:利用 DriverIdentifier 自動搜尋驅動程式 (本篇比較推薦的方式) 👑 DriverIdentifier 這個網站建立了大量的硬體資料庫,可以透過他的軟體分析目前電腦上所有的硬體元件,並盡可能的找出各個裝置的驅動程式,告訴你哪個未知裝置需要安裝、或是可以更新版本的驅動,非常的迅速方便。即便目前的電腦暫時不能上網,他也有離線模式:查詢的結果會輸出成一個網頁檔,將檔案一道有網路的環境並打開它,就可以查到整個驅動程式的清單。 1. 首先,先下載 DriverIdentifier 並安裝 2. 執行 DriverIdentifier,點擊...

Excel / 利用萬用字元搜尋欄位內容包含某字串並加總數值 (Sum if cells contain specific text)

Excel / 利用萬用字元搜尋欄位內容包含某字串並加總數值 (Sum if cells contain specific text)

在 Excel 當中我們可以使用 SUMIF 或 SUMIFS 函數來根據某一欄位的內容,決定另一欄位的數值是否要被加總。但如果我們要判斷的是欄位內容是否包含某個特定字串呢?這時候可以利用 * 這個萬用字元 (Wildcard) 作為判斷條件。下面範例計算當 Item 欄位內容含有 Hoodie 的字串,就加總該列的 Quantity 數值: 同樣的,也可以搜尋含有特定字串開頭或結尾的值,只需標上單邊的萬用字元即可。當萬元字元擺在前面表示字串前方還有其他文字存在,也就是字串是出現在結尾的地方。反過來把萬用字元擺在後面,就是字串出現在開頭的地方: 必須注意的是,SUMIF / SUMIFS 這個函數會忽略大小寫的差異,若需判斷大小寫的不同,則可使用下面另一個區分大小寫的方法。 其他萬用字元 (wildcare) 除了 * 這個萬用字元代表任何字元或字串外,還有其他幾個常見的萬用字元可以交互使用,使用方式如下: Target Criteria 包含 3 個字元 “???” 在 x 和 z 中間夾一個字元,如 ‘xyz’, ‘xxz’, xaz’… “x?z” 以 xyz 開頭的字串 “xyz*” 以 xyz 結尾的字串 “*xyz” 任何含有 xyz 的字串,包含 ‘xyz’...

SQL Server / 取得資料表使用的容量大小

SQL Server / 取得資料表使用的容量大小

在 SQL Server 下可以透過指令取得各 table 使用的容量和資料列數等資訊: 使用指令統計所有資料表使用容量 另外,根據微軟文件也可以使用 stored procedure 查詢資料表使用容量 (sp_spaceused): 查詢單一資料表使用容量 查詢所有資料表使用容量 Reference Get size of all tables in database | StackOverflow Get size of tables in SQL Server | ParisPolyzos Copyright announcement:Photo by sarah tatton on Unsplash

影音剪輯 / 使用 ffmpeg 分割影片 (指定開始及結束時間或固定時間長度分割)

影音剪輯 / 使用 ffmpeg 分割影片 (指定開始及結束時間或固定時間長度分割)

使用 ffmpeg 可以很有效率地完成很多影片或聲音檔的剪輯動作,安裝 ffmpeg 就不多做討論了可以參考這篇 安裝 ffmpeg 以指令進行影音剪輯,剪輯影像和聲音檔的方式是一樣的,以下就以 mp4 檔為範例。 依據給定的時間切割影片 ▍ 給定時間切割影片 (開始時間及時間長度) ffmpeg 基本的影片分割指令僅需給定開始時間和時間長度即可: 其中 -ss 參數指定起始時間、 -t 指定時間長度,上面範例是從影片第 30 秒開始,並切割時間長度為 1 分鐘 (60秒),也就是切割從 30 秒至 90 秒的影片。可以接受 timestamps 格式 HH:MM:SS.xxx 或秒數 s.msec 兩種時間格式 (如上範例)。 -i 、 -c 則為來源檔案及編碼,這裡輸入 input.mp4 檔案並且不重新編碼 (copy)。 ▍ 給定時間切割影片 (開始時間及結束時間) 另外也可以明確指定開始及結束時間切割影片,使用 -to 參數: ▍ 給定時間切割影片並重新編碼 這邊也可以給定編碼資訊分別對影像及聲音重新編碼,以下範例給定影像編碼 libx264 並且不對聲音編碼: 固定時間長度自動分割整個影片 這邊如果我們希望將一個影片檔案,依照給定的固定時間長度將整個檔案分割成數的小檔案,只需要加入...

影音剪輯 / 使用 ffmpeg 指令合併影片及聲音檔 (直接複製資料不重新編碼)

影音剪輯 / 使用 ffmpeg 指令合併影片及聲音檔 (直接複製資料不重新編碼)

最近因為在寫一些關於影片或聲音檔案合併的程式時,發現了 ffmpeg 本身有出了一個以指令介面為主的剪輯程式。其中可以透過這套程式做到基本的影片剪輯、合併、編碼等動作,詳細的指令和使用方式可以參考官方文件。 如果我們想要將一個影片檔案及聲音檔案直接合併起來,例如當我們從 YouTube 上分別將影片的影像及聲音下載下來,最終還是需要將兩個檔案合併成為一個完整的影片檔,這時候就可以簡單透過 ffmpeg 指令去完成。 ▍ 直接複製影像內容,並對聲音重新編碼後合併影片 這邊先簡單介紹最基本的合併動作:直接複製影像內容,不對影像進行重新編碼 (re-encoding),並對聲音重新編碼。這樣的目的是為了加快處裡速度,因為當我們需要對影像進行重新編碼時將會需要大量的運算,那處理速度上就會差很多,但由於聲音的資料量相對小很多,對其重新編碼並不會對速度造成太大的影響。所以一般的狀況下,如果沒有特殊的需要,我們可以選擇直接以這個方式進行合併。指令如下: 其中影像及聲音檔案最好在同一個目錄底下,且檔名應包含副檔名。在這指令下,我們是假設影片檔並不包含聲音資訊,該聲音資訊是分開存在另一個聲音檔當中,所以才需將它完全對應的合併。例如我在 YouTube 下載了影像及聲音檔案後,分別為 video.mp4 及 audio.webm,並且輸出至 output.mp4,那麼就會以下指令進行: 在這邊我們是以 AAC 編碼對聲音進行重新編碼,原因是 AAC 是 MP4 container 可支援的聲音編碼格式之一 (AAC 編碼資訊:FFmpeg Wiki: AAC Encoding Guide),若有需要,也可以替換成任何可支援的聲音編碼格式。 若影像或聲音檔的長度不相同,可以加入--shortest參數,輸出的影片將會結束在較短的時間。 ▍ 複製影像及聲音內容,且不做任何重新編碼直接合併影片 這取決與你的 container 是否可以支援該影音編碼,例如 MKV 對於編碼的支援程度就很高,這時我們可以不對影像及聲音進行任何重新編碼,只需直接複製即可。指令如下: ▍ 替換影片中的聲音,並對聲音進行重新編碼 另一種狀況,如果匯入的影像檔案以包含音軌資訊,但我們想用另一個聲音檔取代,則必須使用-map參數告訴 ffmpeg 這邊採用第一個匯入檔(input)的第一個影像資訊,及第二個匯入檔的第一個聲音資訊。指令如下: 同樣的,這裡也對聲音進行重新編碼,並採用 AAC 編碼格式。 Reference How to merge audio and video file...

Python / 解決 pip 安裝套件時遇到 SSL CERTIFICATE_VERIFY_FAILED

Python / 解決 pip 安裝套件時遇到 SSL CERTIFICATE_VERIFY_FAILED

稍微查了一下,使用 pip (或 pip3) 安裝 Python 套件時遇到 SSL CERTIFICATE_VERIFY_FAILED 錯誤可能的原因有很多,錯誤的狀態也有很多種,不過總體來看就是 SSL 的認證問題。如果在不嘗試解決認證問題之下,還可以透過以下指令參數忽略 SSL 認證直接安裝套件,目前試過是成功的。 ▍ 安裝套件的 pip 指令: ▍ 加入信任參數後的 pip 指令: 透過升級 pip 解決此問題 在 pip 10.0 之後可以透過指令升級 pip 來解決此問題,指令如下。 ▍ 升級 pip 的指令: Reference pip install fails with “connection error: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:598)” | stack overflow Copyright announcement:Photo by Markus Spiske on...

WordPress / 如何讓 Enlighter sourcecode 在小螢幕上自動出現水平卷軸

WordPress / 如何讓 Enlighter sourcecode 在小螢幕上自動出現水平卷軸

如果在 WordPress 中撰寫一些程式相關的內容,通常我們都會希望程式碼的文字格式和一般文章會稍微有點不一樣,讓程式碼的閱讀性更佳。以本網站來說,目前使用了 Enlighter Sourcecode 這個外掛套件來存放程式碼的內容。不過當網站在小螢幕的裝置上閱讀的時候,會發現預設的格式是不會出現水平卷軸的,而是以斷行的方式呈現,這對程式碼來說在閱讀上實在有些的不方便。 ▍ 只需調整 CSS 屬性讓水平卷軸自動隱藏或出現,不讓畫面切斷程式碼 調整的方法很簡單,只需要修改 .enlighter-default 的 CSS Code: 調整 overflow 和 white-space 這兩個屬性,並且其中 !important 可以視情況選擇要不要加入,調整完後就會自動視螢幕大小出現水平卷軸了! Reference Horizontal scroll on small screen | EnlighterJS / Plugin.WordPress Copyright announcement:Photo by Rishabh Pammi on Unsplash

Python / 如何移除字串中的特殊字元 使用 Unicode 編碼判斷保留中(日韓)、英文及數字字元

Python / 如何移除字串中的特殊字元 使用 Unicode 編碼判斷保留中(日韓)、英文及數字字元

在做文字資料的清理時,最頭痛就是內含有特殊的字元,諸如一些標點符號 (如”^*/$#)、特殊符號 (如空白、TAB) 甚至,系統控制符號 (如 \n 換行字元、\b 退位字元) 或尚未被定義的編碼。如果是在全英文的環境,要清理字元還算簡單,只需利用 ASCII Code 判斷字元是不是英文或數字即可。最直覺的辦法就是利用 replace() 這個函數以窮舉法去將目標字元移除,例如欲移除字串中的空白、TAB和換行字元可以用下列方式移除: (由於接下來稍為對編碼及語法做簡單的說明,若已熟悉編碼或Python語法可以跳到最後直接參考範例程式) 利用字元編碼清除特殊字元 Python 內建就可以利用 ord() 函數取得字元的實際編碼,反過來也可以利用 chr() 函數將編碼重新轉換成字元。 ▍ 利用 ord() 函數取得字元編碼 同樣得,如果是在英文環境那還算單純,由於 ASCII Code 其實就是對應 0 ~ 255 的數字,例如換行字元 (\n) 等同於 10、TAB 字元等同於 9。所以若只希望保留大小寫英文字元及數字,可以利用 ord() 函數取得字元的編碼,再判斷該字元應該被保留或移除。大寫英文字母 (A-Z) 的編碼分別對應 65~90、小寫英文字母 (a-z) 則為 97~122,而數字 (0-9) 的編碼則是 48~57。清除字元的範例如下,最終 string 的結果會是 'teststring': 當然,也可以把上面的程式改成函數的方式重複使用:...