發表文章

解決升級node.js 20版本後import json file的警示'assert' is deprecated in import statements and support will be removed in a future version

完整的警示訊息是 (node:16142) V8: file:///workspace//src/main.mjs:3 'assert' is deprecated in import statements and support will be removed in a future version; use 'with' instead   原本 import serviceAccount from '../serviceAccount.json' assert { type : 'json' }; 改成 import serviceAccount from '../serviceAccount.json' with { type : 'json' }; 解決!

用BASH批次改影片名-時間戳轉換與去除前綴

使用BASH修改影片檔名格式 1. 轉換時間戳成日期 舉例說明: 1685877964314.mp4 改成 20230604_192604.mp4  1688511747190.mp4 改成 20230705_070227.mp4 2. 去除前綴詞 舉例說明: video_20230601_204241.mp4 改成 20230601_204241.mp4

連拍照片轉成gif或影片(ffmpeg)

跑馬拉松會有場邊幫忙拍照的,有時候給一連串個人照片,我們就可以透過ffmpeg把他們轉成動圖或是影片 ffmpeg照片轉mp4影片 ffmpeg照片轉gif動圖 以下分別介紹轉換方法 ffmpeg照片轉mp4影片 ffmpeg -framerate 3 -i %02d.jpg -c:v libx264 -pix_fmt yuv420p output.mp4 如果覺得轉成的mp4影片速度比較慢,可以把-framerate 3改成-framerate 6或更大得數值;反之,若覺得mp4影片速度較快,可以把-framerate 3改成-framerate 2或更小得數值。 -i %02d.jpg 是指照片檔案的檔名為01.jpg,02.jpg,03.jpg.... ffmpeg照片轉gif動圖 ffmpeg -framerate 3 -i %02d.jpg -loop 0 output.gif 如果覺得轉成的動圖速度比較慢,可以把-framerate 3改成-framerate 6或更大得數值;反之,若覺得動圖速度較快,可以把-framerate 3改成-framerate 2或更小得數值。 -i %02d.jpg 是指照片檔案的檔名為01.jpg,02.jpg,03.jpg.... -loop 0是表示反覆播放 使用上述這個指令產生出來的圖片會有網格感,是因為採用的色盤沒有經過最佳化。 最佳化轉gif動圖 最佳化就是需要分成兩個階段來處理 階段1. 生成使用的顏色色盤 階段2. 轉換成動圖 ffmpeg -i %02d.jpg -vf palettegen palette.png ffmpeg -framerate 3 -i %02d.jpg -i palette.png -lavfi paletteuse - loop 0 output.gif 參數同前面得解釋

ffmpeg將mp4影片轉換成mp3音檔

  ffmpeg將mp4影片轉換成mp3音檔 原來我沒紀錄過這個,不過在AI時代,這些已經不重要了。 只要在google打一句話 convert mp4 video to mp3 audio using ffmpeg in bash, AI就會回答我們了 #!/bin/bash for file in *.mp4; do filename = "${ file % . * }" echo "to mp3 $filename ..." ffmpeg -y -i " $file " -vn -dn -sn -acodec libmp3lame -b:a 128k " $filename .mp3" done ffmpeg的參數 -y 若輸出的檔案已存在,強制覆蓋不詢問 -i 檔案名稱  指定輸入檔案 -vn -dn -sn 不要處理影片(video),資料(data),字幕(subtitle) -acodec 指定音訊編碼器 -b:a 指定audio的碼率(bitrate) 以前紀錄的只有Windows Prompt(命令提示字元)的版本 用ffmpeg轉換任意影片成mp3

升級gitea

圖片
升級gitea 至 1.23.7 (2025-04-24)

Ubuntu 24.04.2 安裝繁體中文語系與中文輸入法

圖片
這週協助安裝24.04桌面版發現繁體中文語系又得要紀錄一下了。以前在Ubuntu 22.04.3時也有紀錄一下只是被自己遺忘,這裡補紀錄  Ubuntu 22.04.3 新酷音中文輸入法安裝紀錄   以下以快速筆記方式進行 1. 安裝Ubuntu 24.04.2桌面版 這裡就掠過安裝過程,請大家自行完成。依照慣例會是以英文安裝,以避免目錄預設變成以中文命名。 建議先執行軟體升版再繼續 sudo apt update sudo apt upgrade 2. 安裝並設定繁體中文語系 安裝繁體中文語系套件 sudo apt install language-pack-zh-hant 產生語系資料 sudo locale-gen zh_TW.UTF-8 啟用 繁體中文語系 sudo localectl set-locale LANG=zh_TW.UTF-8 完成後,請重新啟動電腦! 3. 重啟電腦並選擇保留命名 然後果看到系統顯示下面這張圖,請選擇 '保留舊名稱' ,不然以英文安裝的心血就白費了!!!! 4. 安裝中文輸入法 安裝酷音輸入法 sudo apt install ibus-chewing 5. 設定系統要使用輸入法 點擊螢幕左下角的環狀圖示,找到' 設定' 並點擊,等待設定頁App啟動 左列選單找到' 鍵盤 '並點擊→在輸入來源這區塊,找到' 加入輸入來源 '並點擊 點擊' 中文(臺灣) '→點擊' 中文(新酷音)' →右上角點擊' 加入 '按鈕 這樣就設定完可以用中文輸入法了。

在Ubuntu 22.04中更新成VirtualBox 7.1並啟用NVMe

圖片
使用Docker開發後很少開VirtualBox,不知不覺VirtualBox已經到了7.1版,之前建立的一些虛擬機器也因為Ubuntu升級無法正常啟動了,今天就來一併解決。 1. 將Ubuntu 22.04中的VirtualBox更新成7.1 從官方網站下載deb安裝檔 https://www.virtualbox.org/wiki/Linux_Downloads 我的OS是22.04.5 LTS (Jammy Jellyfish),可從 `cat /etc/os-release` 得知 VirtualBox新版本deb檔案是virtualbox-7.1_7.1.6-167084~Ubuntu~jammy_amd64.deb 對應的extpack檔案是 Oracle_VirtualBox_Extension_Pack-7.1.6.vbox-extpack 1.1 移除舊版Virtualbox sudo apt-get remove -y virtualbox sudo apt-get remove -y virtualbox-dkms 1.2 安裝新版本 首先安裝相依套件 sudo apt install libxcb-cursor0 安裝主套件 sudo dpkg -i ./virtualbox-7.1_7.1.6-167084~Ubuntu~jammy_amd64.deb 確認已安裝版本為7.1.6r167084 vboxmanage -v 1.3 安裝extpack sudo vboxmanage extpack install ./Oracle_VirtualBox_Extension_Pack-7.1.6.vbox-extpack 確認已安裝的extpack vboxmanage list extpacks 2. 啟用NVMe功能 為了讓VM能夠正確的抓取NVMe裝作為開機碟,請在一般分頁下方的系統部份,將主機板子分頁中EIF功能勾選,以便OS能正常存取磁碟。 存儲裝置分頁中,將硬碟控制器的類型改變成NVMe即可。 在VM管理員中的狀態會顯示成下面這樣 然後就可以啟動VM,再去裝你想要的作業系統囉!

[Node.js]計算檔案雜湊用來比對Cloud Storage的md5Hash

圖片
由於Cloud Storage返回的Metadata的md5Hash值是BASE64編碼過得資料,如下附圖,要比對是否相同需要生成相同的值。 這篇裡面會分別給予BASH指令和Node.js程式如何作用來比對GCS檔案的md5雜湊值

[Node.js]讀取JPEG相片EXIF資訊中的GPS和時間戳記

圖片
一些網站,如google photo,上傳相片後,會抓取偵測你的相片中的EXIF(Exchangeable image file format),自動得使用時間戳記資訊並歸類到合適的位置。 以前我是使用exiv2指令操作或複製exif資訊 ,這篇整理使用Node.js程式取出EXIF的GPS與時間戳記,時間戳記還會轉換有時區資訊的Date物件。 安裝套件 npm install exif 程式碼 import exif from 'exif' ; const ARGS = process . argv . slice ( 2 ); if ( ARGS . length < 1 ) { console . error ( `given 1 arg, usage: node ${ process . argv [ 1 ] } <input-image-path>` ) process . exit ( 1 ); } // 從第一個參數取的照片檔案路徑 const photoPath = ARGS [ 0 ]; // 從指定路徑取得exif資訊, 這是一個async函數 function readExifFromPathAsync ( image ) { return new Promise (( resolve , reject ) => { new exif . ExifImage ({ image }, ( error , exifData ) => { error ? reject ( error ) : resolve ( exifData ); }) }) } // 將timestamp字串轉換成Date function exifTS2Date ( timestamp , timezone ) { // 時間戳記字串格式是 YYYY:MM:DD HH:MM:SS const regex = / ^ ( \d {4} ) : ( \d {2} ) : ( \d {2} )[ T ]( \d {2} :\d {2} :\d {2} ) $ / ; // ...

[Next.js][App router]在LINE內瀏覽器內多選檔案/圖檔觸發onchange事件的問題

圖片
因為遭遇了在Android手機LINE瀏覽器內使用網頁時,當設定input type="file"容許多選,在onchange事件取不到多選的檔案。 *我實測若點了界面上的...按鈕,選其他資料夾內的檔案,則不會取不到多選檔案,初步判定是LINE瀏覽器與Android系統之間的溝通問題* 因為暫時還沒有好的方式,所以就在網頁上顯示提示,然後請不能接受的使用者移動到外部瀏覽器來觀看。 下圖是LINE瀏覽器的user agent字串於三星s22手機上