從影片檔分離出音訊的 FFmpeg 腳本
由 darkranger 在 週五, 05/03/2024 - 22:41 發表,更新日期:週五, 11/15/2024 - 20:20
赫然發覺 FFmpeg 好像已經默默地成為本站文章的常客……回歸正題,倘若使用者的需求,是希望將影片檔中的音訊軌,單純地按照其原始編碼另存成獨立的音訊檔,而不做任何編碼格式的轉換,那麼透過 FFmpeg 所需要使用的操作指令並不複雜。然而如果是想要以更加自動化的方式,比方說形成一支腳本程式。那麼腳本設計中就必須要能夠偵測原始音訊的編碼格式,以便儲存成對應的音訊檔。
以 Python 語言編寫的腳本在此:audio_extractor.py,下載後給予可執行權限,然後在執行時以影片檔作為輸入參數:
- chmod +x audio_extractor.py
- ./audio_extractor.py <影片檔名>
倘若執行無誤,此腳本程式將會從輸入的影片檔分離出音訊軌,保留原編碼格式輸出為同名、不同副檔名的音訊檔。比方說輸入 *.webm,再輸出為 *.opus。至於音訊編碼格式的偵測,則是從 ffprobe 指令的輸出結果去做判斷。然而若要將 ffprobe 這支工具納入到腳本流程中,則需要留意其預設產出的訊息是輸出至 stderr。必須在例如使用了「-show_streams」參數的情況下,才會有訊息是輸出至 stdout。這在文件說明中似乎沒有表述清楚,網路上也有一些反饋跟討論(例如 #5880),但卻是刻意的設計。
由於這支腳本程式在設計上相當簡略,無法保證能夠妥善應對各種各式各樣的媒體格式。不過至少若是以透過 yt-dlp 工具所下載的 YouTube 影片作為樣本,則是可以運作的(雖然 yt-dlp 本身就有參數能夠選擇儲存成音訊檔)。