我的新書AI 職場超神助手:ChatGPT 與生成式 AI 一鍵搞定工作難題的教材投影片已製作完成

歡迎各位有需要的教師和博碩文化索取教材

  • 限制ffmpeg初始連接的時間

    ffmpeg中的analyzeduration和probesize 在FFmpeg中,-analyzeduration和-probesize是用於設置媒體分析的參數。 -analyzeduration參數用於指定分析媒體文件的持續時間。當你在FFmpeg中打開一個媒體文件時,它需要一些時間來分析文件的內容,以確定其格式、編解碼器和其他相關的信息。這個參數設置了分析的時間長度。較長的-analyzeduration值可能會導致更準確的分析結果,但同時也會增加打開文件的時間。預設值為5,000,000微秒(5秒)。 -probesize參數用於指定分析媒體文件時讀取的數據大小。當FFmpeg分析媒體文件時,它會從文件中讀取一些數據並進行分析。這個參數設置了從媒體文件中讀取的數據大小。較大的-probesize值可能會導致更準確的分析結果,但同時也會增加分析的時間和記憶體使用量。預設值為50,000字節。 前置metadata 播放器在網絡點播場景下去請求MP4 視頻數據,需要先獲取到文件的metadata,解析出該文件的編碼、幀率等信息後才能開始邊下邊播。如果MP4 的metadata 數據塊被編碼在文件尾部,這種情況會導致播放器只有下載完整個文件後才能成功解析並播放這個視頻。對於這種視頻,我們最好能夠在服務端將其重新編碼,將metadata 數據塊轉移到靠近文件頭部的位置,保證播放器在線請求時能較快播放。比如FFmpeg 的下列命令就可以支持這個操作: 控制讀取的數據量大小 在外部可以通過設置 probesize 和 analyzeduration 兩個參數來控制該函數讀取的數據量大小和分析時長為比較小的值來降低 avformat_find_stream_info 的耗時,從而優化播放器首屏秒開。但是,需要注意的是這兩個參數設置過小時,可能會造成預讀數據不足,無法解析出碼流信息,從而導致播放失敗、無音頻或無視頻的情況。所以,在服務端對視頻格式進行標準化轉碼,從而確定視頻格式,進而再去推算 avformat_find_stream_info 分析碼流信息所兼容的最小的 probesize 和analyzeduration,就能在保證播放成功率的情況下最大限度地區優化首屏秒開。 probesize 和 analyzeduration太短的可能影響 如果將-probesize和-analyzeduration設置得太短,可能會導致以下問題:

    Continue Reading…: 限制ffmpeg初始連接的時間

  • 為影片產生會議紀錄及重點擷取

    將影片轉為MP3 先照這篇的方式安裝FFMPEG,接著就可以使用ffmpeg將影片轉成mp3檔案 在上述命令中,input.mp4是輸入的MP4文件路徑,output.mp3是輸出的MP3文件路徑。 從語音檔案使用AI提取文字 這個功能在WORD就有了,若是沒有WORD,GOOGLE文件也有相似的聽寫功能,以下為我使用Office內建聽寫功能的示範 先使用轉錄功能 接著選擇輸入語言為台灣國語,並上傳剛剛擷取出來的mp3檔案 選擇完檔案會開始上傳MP3並且擷取音檔內的文字,這也是為什麼一開始我會希望將mp4轉成mp3,因為含影像的檔案較大,純音檔較小,上傳較小的檔案這邊所花費的時間會少一點 當節錄文字完成後,選擇將文字加到檔案內,就會出現如下的語音謄錄文字 讓文字更易懂 使用工具: ChatGPT 一直到這邊所產生的文字,都很不容易讓人理解,因為所擷取出的文字很容易會有錯別字,例如: 【視障小孩】可能會被聽寫成【師丈小孩】,根本意義完全不同,讓人難以理解。 但是ChatGPT對於理解這樣的錯別字,比對上下文去猜出正確辭意的能力頗強,所以可以使用ChatGPT請他幫忙整理內容 例如上面的文字GTP所整理出的內容如下 接著再重複使用上面產生的內容,請GPT產生摘要、標題,我們只需要作內容審核、確認、修正即可,可以大幅節省人力唷! 另外,對CHATGPT所下的指令也會影響到產出,例如上面我使用【順成文章】的指令,所以最後面CHATGPT就自己唬爛了一些不相關的內容(甚麼不僅僅是個人問題之類的老師根本沒有講)。這時候就可以改使用【順過讓文字更好讀】這樣的指令,就比較不會產生不相關的內容。 建議可以多嘗試幾種不同的指令,直接針對他所整理過的不滿意的方向請她重新整理,直到CHATGPT給出較滿意的產出後,再自行做驗證/整理

    Continue Reading…: 為影片產生會議紀錄及重點擷取

  • 使用OBS做會議錄影

    使用OBS把線上會議錄起來 若是線上會議,推薦使用OBS可以很方便的對所有類型的會議做錄影。 這邊是OBS的下載位置: https://obsproject.com/ OBS可以擷取視窗螢幕,只要是可以在桌面上執行的軟體,都可以從【+】 ->【 Window Capture】去獲取該程式的畫面並放置於OBS畫面上。使用這個方式錄影的優點是,我們可以在錄影的時候同時使用其他的軟體,並且不會被錄到除了你所選擇的應用程式以外的電腦上的操作,OBS只會持續的錄該程式的畫面。 例如下面這樣子就只會錄到所選擇的Chrome的視窗,我們在電腦上回Line訊息、開別的Chrome瀏覽網頁,都不會被錄進去 這樣的方式在Window上直接就會可以錄到畫面+聲音,但是若你的電腦是Mac,則需要另外做額外的設定,才能夠讓OBS取得電腦內部的聲音。這邊為教學文章: https://www.casper.tw/life/2021/06/13/mac-reacord-by-soundflower/ 開始錄影 在上面設定完之後,按下右下的【開始錄製】並在會議結束時按下【結束錄製】,就可以在本機>影片找到錄好的影片,檔名會是錄影的時間 安裝FFMPEG 接著則要做影片的剪裁+合成,以下是一些簡單的影片操作指令 首先,下載別人已經Build好的ffmpeg: https://www.gyan.dev/ffmpeg/builds/packages/ffmpeg-5.1.2-full_build.7z 接著,把ffmpeg.exe丟到系統的路徑裡面,如C:\Windows\System32,或者將ffmpeg的路徑加到環境變數的Path裡面,讓系統能夠找的到ffmpeg的位置。 驗證方式: 開啟命令提示字元,輸入ffmpeg,如果能出現以下畫面,代表設定成功 做一些簡單的影片操作 擷取影片片段 在上述命令中,input.mp4是輸入的視頻文件路徑,output.mp4是輸出的視頻文件路徑。 00:12表示起始時間,00:15:30表示結束時間。 刪除影片片段 在上述命令中,input.mp4是輸入的視頻文件路徑,output.mp4是輸出的視頻文件路徑。 0:4表示要刪除的起始時間範圍,8表示要刪除的結束時間。 合併多個影片檔案 為影片加上浮水印 在上述命令中,input.mp4是輸入的視頻文件路徑,watermark.png是水印圖片文件的路徑,output.mp4是輸出的帶有水印的視頻文件路徑。 -filter_complex “overlay=W-w-10:H-h-10″:使用filter_complex選項應用複雜的過濾器。 overlay過濾器用於將水印圖像疊加在視頻上。 W-w-10表示水印圖像的水平位置,H-h-10表示水印圖像的垂直位置。在這個示例中,水印位於視頻的右下角,並與邊緣保持10像素的間距。

    Continue Reading…: 使用OBS做會議錄影

  • ,

    Ubuntu 18.04的apt update更新失敗

    錯誤訊息 W: Failed to fetch http://repo.mysql.com/apt/ubuntu/dists/bionic/InRelease The following signatures couldn’t be verified because the public key is not available: NO_PUBKEY 467B942D3A79BD29 W: Some index files failed to download. They have been ignored, or old ones used instead. 問題原因 這個錯誤訊息是說您的系統在嘗試從 http://repo.mysql.com/apt/ubuntu/dists/bionic/…

    Continue Reading…: Ubuntu 18.04的apt update更新失敗

  • ,

    wordpress 永久連結設定失效

    故障的可能原因 在Apache2支持永久連結 要啟用 Apache2 的 mod_rewrite 模組,您需要將以下內容添加到 Apache2 的設定檔案中: 這個設定通常會加入到 mods-enabled 目錄中的一個設定檔案中。例如,您可以創建一個名為 rewrite.load 的檔案,並將上面的設定添加到這個檔案中。請按照以下步驟進行操作: 啟用rewrite功能 若您的 /etc/apache2/mods-available 目錄下已經有了 rewrite.load 設定檔案,您可以透過建立符號連結方式來啟用 mod_rewrite 模組。 請按照以下步驟: 執行完上述步驟後,Apache2 的 mod_rewrite 模組即會啟用。您可以再次檢查 /etc/apache2/mods-enabled 目錄,確保 rewrite.load 的符號連結已經建立。若您需要停用 mod_rewrite,則可以刪除這個符號連結即可。

    Continue Reading…: wordpress 永久連結設定失效

  • ,

    在K8S內ksoftirqd耗費大量CPU

    問題描述 我們在K8S內架設串流伺服器,在做loadtest時發現,當流量變高之後,K8S用來管理線程的cadvisor所調用的ksoftirqd會占掉非常大的CPU使用率,並導致整個worker node變得緩慢。 相關的問題說明請見: Debugging network stalls on Kubernetes 形成原因 這是因為當使用 Kubernetes 的 NodePort 來公開一個服務時,它將在每個工作節點上開放一個端口,以便外部可以連接到該端口,並將流量轉發到服務的後端 Pod 上。當流量高峰期間,可能會導致節點的 CPU 負載增加,並導致大量的 IRQ 請求,這是因為每個數據包都會觸發一次 IRQ 請求。 IRQ是甚麼 IRQ 是中斷請求的簡寫,是一種處理設備 I/O 操作的機制。當設備有 I/O 操作時,它會觸發一個中斷請求,通知操作系統或應用程序需要處理這個 I/O 操作。在網絡通信中,每個數據包都會觸發一次 IRQ 請求,因此當流量高峰期間,大量的 IRQ 請求可能會導致節點的 CPU 負載增加,從而影響應用程序的性能。中斷請求通常由外部設備發出,例如鍵盤、鼠標、網卡、磁盤控制器等,這些設備需要與 CPU 進行通信,以便進行數據傳輸、讀寫、處理等操作。…

    Continue Reading…: 在K8S內ksoftirqd耗費大量CPU

  • 最大子序列和問題

    概念解釋 最大子序列和問題(Maximum Slice Problem)是指在一個給定的整數序列中,找到一個連續子序列,使得子序列的和最大。 例如,在序列[-2, 1, -3, 4, -1, 2, 1, -5, 4]中,最大的子序列為[4, -1, 2, 1],其和為6。 這個問題在實際應用中經常出現,比如在股票交易中,尋找一段時間內股票價格的最大漲幅,或者在信號處理中,尋找一段時間內信號的最大能量。 最大子序列和問題可以通過暴力枚舉和動態規劃兩種方法解決。暴力枚舉的時間複雜度為O(n^2),動態規劃的時間複雜度為O(n)。其中,動態規劃是更加高效和常用的方法。 下面介紹一下動態規劃的解法思路: 設f[i]表示以第i個元素結尾的最大子序列和,那麼有: f[i] = max(f[i-1] + nums[i], nums[i]) 其中,nums是原始的整數序列,可以看出,f[i]的值只與f[i-1]和nums[i]有關。 狀態轉移方程表示以第i個元素結尾的最大子序列和要么是以第i-1個元素結尾的最大子序列和加上nums[i]得到,要么是只包含第i個元素。 最終的結果就是max(f[0], f[1], …, f[n-1])。 這個算法只需要遍歷一遍整個序列,時間複雜度為O(n),是一個線性算法。因此,在解決最大子序列和問題時,動態規劃是一個高效的解法。 解題思路 假設我們有一個整數序列 nums = [-2, 1, -3,…

    Continue Reading…: 最大子序列和問題

  • Leader – Dominator解題紀錄

    題目內容 題目頁面: https://app.codility.com/programmers/lessons/8-leader/dominator/ Leader概念教學 在LeetCode中,”Leader”通常指的是一個數組中出現次數超過數組長度一半的元素。因為這種元素在數組中出現的次數比其他元素都多,所以被稱為”Leader”。 LeetCode中的一些問題會要求你尋找數組中的Leader或者判斷數組中是否存在Leader。解決這些問題的一種常見方法是使用摩爾投票算法(Moore Voting Algorithm)。 摩爾投票算法的基本思想是遍歷數組,對於當前遍歷到的元素,如果它和當前候選元素相同,則將計數器加一,否則將計數器減一。當計數器為零時,更換當前的候選元素。最後剩下的候選元素就是可能的Leader,需要再次遍歷數組來驗證它是否真的是Leader。 需要注意的是,摩爾投票算法的前提是數組中一定存在Leader,如果數組中不存在Leader,那麼算法得出的結果可能是錯誤的。 摩爾投票算法 摩爾投票算法是一種快速尋找數組中出現次數超過一半的元素的方法,其基本思想已經在之前的回答中進行了介紹。這裡再介紹一下摩爾投票算法的實現方法。 假設我們要在數組中尋找出現次數超過一半的元素,可以使用一個計數器count和一個候選元素candidate來輔助實現。初始時,將count和candidate分別設為0和null。 遍歷數組,對於每一個元素: 它的時間複雜度是O(n) 解題紀錄 https://app.codility.com/demo/results/trainingNPG8GS-3QA/ EquiLeader題目內容 題目連結: https://app.codility.com/programmers/lessons/8-leader/equi_leader/ 解題想法 我的解題

    Continue Reading…: Leader – Dominator解題紀錄

  • Stacks and Queues – StoneWall解題紀錄

    題目內容 題目頁面: https://app.codility.com/programmers/lessons/7-stacks_and_queues/stone_wall/ 題目解釋 在這個例子中,最後要建造的牆的寬度是 N = 9 米,高度在不同的位置上是不同的。牆的左端高度是 H[0] = 8,右端高度是 H[8] = 8。 這道題的目標是計算構建牆所需的最小石塊數,因此我們需要找到一種方法來計算構建牆所需的石塊數。我們可以使用一個堆疊來維護已經堆疊的石塊,然後從左到右遍歷數組,將石塊一層一層地堆疊起來。當當前高度高於前面高度時,應該添加一個新石塊。在堆疊石塊時,我們應該儘可能地重複使用現有的石塊,以減少新石塊的使用量。 你要建造一堵石牆,牆長 N 公尺,而牆的厚度是恆定的,但不同的位置高度不同。牆的高度由一個長度為 N 的正整數數組 H 指定。H[i] 表示牆的左端到右側 i 公尺處的高度。特別地,H[0] 是牆的左端高度,H[N-1] 是牆的右端高度。 石牆應由長方體石塊建造,所有面都是矩形。你的任務是計算構建牆所需的最小石塊數。 比方說,給定一個包含 N = 9 個整數的數組 H: H[0] = 8 H[1] =…

    Continue Reading…: Stacks and Queues – StoneWall解題紀錄

  • Stacks and Queues – Fish解題紀錄

    題目內容 題目頁面: https://app.codility.com/programmers/lessons/7-stacks_and_queues/fish/ 題意分析 又是一個有故事的題目,最討厭了,不要管魚的故事的話,大概就是有一個循序數列會從0~N-1這樣子,例如[1,2,3,4,5],但是不會照著順序排列,而是會打散著的排列,如[4,3,2,1,5],然後有另一個陣列B,會指定該數字是往上還是往下,如[0,1,0,0,0],接著往下的若是遇到往上的,就比大小,刪掉較小的數字。 然後回傳最後剩下的數字的數量 解題紀錄 這是我第一次的解題紀錄 只拿了12分,慘不忍睹,應該有思考邏輯上的錯誤。 仔細想一下這一題,我覺得應該會是2N左右的複雜度,就是往上遍歷一次、往下遍歷一次。往下遍歷時,選擇方向為下的,且之後的數字的方向為上的,把該吃掉的吃掉。接著再從下往上一次,選擇方向為上的,且之前的數字的方向為下的,把該吃掉的吃掉,應該就會試剩下的了。 下面為嘗試的實作程式碼 25%,慘不忍睹+1。 我發現問題是他們往上或往下可能不會只有兩次,而是會不停地變換方向,所以應該會需要把這樣的程式碼抽出來,然後使用迴圈或遞迴的去呼叫。但是比較慘的是,下面的效能測試其實是超時的,若是再透過遞迴或者迴圈,整個效能應該會更差。 觀察之後,因為我是整個陣列去掃,而事實上,他們往上或往下的範圍不會是整個陣列,而會是遇到與自己方向不同的範圍。所以我覺得應該不會是完整的掃過兩次迴圈,而是會有兩層的迴圈,然後根據現在的方向,掃到以自己方向為準最多可吃掉的位置做停止,在構想上應該比較類似我第一次的做法。 邏輯正確了,但是效能不佳…要來優化了! 上面的作法會耗時間是因為下面的原因 為了解決這個問題,我們可以使用一個堆疊,它用於記錄下游游動的魚,這些魚還沒有被吃掉。從頭到尾遍歷所有魚,並將所有向上游動的魚推入堆疊。如果遇到向下游動的魚,則將其與堆疊中的魚進行比較。如果堆疊中的魚較小,則將其彈出,並繼續與新的堆疊頂部進行比較,直到它遇到較大的魚,或者堆疊為空。 在這個算法中,堆疊中的魚保證向下游動,因此它們是可以被吃掉的魚。當向上游動的魚遇到堆疊頂部的魚時,它們的大小也被比較。如果它們相等,它們都可以保持存活,因為它們不會相互吃掉。如果向上游動的魚比堆疊頂部的魚大,則堆疊中的魚會被吃掉,否則向上游動的魚會被堆疊頂部的魚吃掉。在此過程中,我們不斷更新堆疊的內容,以便在下一輪比較中使用。 最後,堆疊中剩下的所有魚都可以保持存活,因為它們沒有遇到向下游動的魚,或者在它們前面的向下游動的魚都比它們大。 https://app.codility.com/demo/results/trainingHMNQVG-XRN/

    Continue Reading…: Stacks and Queues – Fish解題紀錄


17年資歷女工程師,專精於動畫、影像辨識以及即時串流程式開發。經常組織活動,邀請優秀的女性分享她們的技術專長,並在眾多場合分享自己的技術知識,也活躍於非營利組織,辦理活動來支持特殊兒及其家庭。期待用技術改變世界。

如果你認同我或想支持我的努力,歡迎請我喝一杯咖啡!讓我更有動力分享知識!