最近因為在寫一些關於影片或聲音檔案合併的程式時,發現了 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
稍微查了一下,使用 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 這個外掛套件來存放程式碼的內容。不過當網站在小螢幕的裝置上閱讀的時候,會發現預設的格式是不會出現水平卷軸的,而是以斷行的方式呈現,這對程式碼來說在閱讀上實在有些的不方便。 ▍ 只需調整 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 編碼判斷保留中(日韓)、英文及數字字元
在做文字資料的清理時,最頭痛就是內含有特殊的字元,諸如一些標點符號 (如”^*/$#)、特殊符號 (如空白、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': 當然,也可以把上面的程式改成函數的方式重複使用:...
Python / 如何更新pip3
更新pip3: 更新pip: Copyright announcement:the featured image: Photo by Brett Jordan on Unsplash