移至主內容
DarkRanger's Secret Area

主導覽

  • 首頁
  • 關於本站
  • Linux
  • 程式開發
  • N900
  • 譯文
  • 資訊技術辭典

文章分類

  • 影劇
  • 遊戲
  • 筆記
  • 雜文
  • 資訊技術
  • 站務訊息

最新內容

  • How-To:Linux 安裝 DevilutionX
  • 於 2012 年建立的一份音樂播放清單
  • How-To:Linux 安裝 Medal of Honor: Allied Assault
  • Fallout 4 (2015)
  • How-To:Linux 安裝 Blood
  • 《終極動員令》系列早期作品原始碼釋出
  • How-To:Linux 安裝 Doom 3
  • Nausicaä of the Valley of the Wind (1984)
  • Intel 內顯與 Linux 桌面死當問題排解
  • 《哥吉拉 -1.0》心得補遺

從影片檔分離出音訊的 FFmpeg 腳本

發表日期:星期五, 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 本身就有參數能夠選擇儲存成音訊檔)。

 

筆記