Reverse Audio 不會在輸出中保留原始的 MP3 或 M4A 編碼。這個工具永遠只會寫入一個新編碼的 16 位元 PCM WAV 檔案,無論輸入是 MP3、WAV、M4A、AAC、Ogg 還是 WebM。這是工具運作方式刻意設計的一部分:它會使用瀏覽器的 Web Audio API 將來源檔案解碼成原始音訊樣本,翻轉每個聲道的樣本順序,然後將結果重新編碼為帶有帶正負號 16 位元小端序 PCM 樣本的新 WAV。由於資料會經過解碼器與新的 WAV 編碼器,原始的編解碼器、壓縮位元率、容器格式、ID3 或 iTunes 標籤、專輯封面、章節、編碼器設定,以及任何容器特有的欄位,都會在這個過程中被捨棄。輸出 WAV 每秒的大小也會比壓縮後的輸入大好幾倍,因為未壓縮的 PCM 每個聲道每個 frame 會儲存一個 16 位元的樣本。任何需要把翻轉後的音訊存回 MP3 或 M4A 的人,都必須另外使用音訊編輯器或獨立的轉檔工具,把新的 WAV 重新轉檔。

does the result keep the original mp3 or m4a encoding when i use reverse audio
Reverse Audio 是否會在輸出中保留 MP3 或 M4A 編碼?

Reverse Audio 實際上會匯出什麼格式?

Reverse Audio 永遠只會寫入單一輸出類型:16 位元 PCM WAV 檔案。無論來源檔案是 MP3、WAV、M4A、AAC、Ogg 還是 WebM 都適用。下載下來的 WAV 是由同一個編碼器新寫入的檔案(也是該工具的黃金測試所檢查的編碼器),而不是把來源容器複製下來再把位元組鏡像翻轉的產物。

在那個 WAV 內部,每個樣本都是帶正負號的 16 位元整數。瀏覽器會把來源解碼成浮點樣本(通常介於 -1 到 1 之間),Reverse Audio 會把任何超出範圍的值裁剪到 -1 到 1 的範圍,接著把每個值對應到一個帶正負號的 16 位元整數(其中負的滿刻度會變成 -32768,正的滿刻度會變成 32767),然後以小端序寫入位元組。檔頭包含 RIFF 標記、WAVE 識別碼、一個帶有 PCM 格式標籤的 fmt 區塊,以及一個長度反映實際寫入樣本數量的 data 區塊。

WAV 的取樣率與聲道數會在工具限制範圍內,與解碼後的來源對應。以 44.1 kHz 立體聲 MP3 輸入,會產生 44.1 kHz 立體聲 WAV 輸出。以 48 kHz 單聲道 M4A 輸入,則會產生 48 kHz 單聲道 WAV 輸出。如果來源解碼後的取樣率落在 8,000 到 192,000 Hz 之外,或聲道數落在 1 到 8 之外,則會在執行任何翻轉之前先拒絕該檔案,並且不會產生任何 WAV。

為什麼原始編解碼器無法保留在輸出中

Reverse Audio 翻轉的是已解碼的樣本,而不是容器的位元組。要翻轉一段壓縮串流,你必須先把它解碼,而一旦記憶體中有了原始 PCM,原本的壓縮表示法就再也無法重寫。這個工具使用瀏覽器的 Web Audio API(說明文件位於 MDN BaseAudioContext.decodeAudioData 參考資料)來產生一個帶有浮點聲道資料的 AudioBuffer。從那個時間點開始,剩下唯一能做的事就是重新排列樣本,然後寫入新檔。

這個兩段式的處理流程──解碼,再編碼──就是為什麼輸出不可能等於同一個 MP3 或 M4A 檔案倒著播放的結構性原因。倒過來的 MP3 不是一個有意義的檔案格式,因為 MP3 是依賴 frame 排序、Huffman 編碼與編碼器心理聲學模型的感知編解碼器。並沒有一個可以直接寫出的標準「音訊倒過來的 MP3」。M4A 容器內的 AAC 也是一樣的道理。Reverse Audio 原則上可以在伺服器上呼叫 FFmpeg,把翻轉後的 PCM 重新編碼為 MP3 或 M4A,但它並沒有這麼做。它不會安裝 FFmpeg、不會呼叫轉檔伺服器,也不會偷偷換成遠端的工作流程。它會產生 WAV,是因為 WAV 是承載原始翻轉 PCM 最簡單也最忠實的容器。

若想瞭解翻轉本身在樣本層級是如何運作的,這份指南 Reverse Audio 是什麼,以及樣本翻轉是如何運作的? 會逐步說明每個聲道的樣本翻轉過程。

如何在本地翻轉 MP3 或 M4A 檔案

  1. 在瀏覽器中開啟 Reverse Audio,並選擇一個支援的音訊檔案。檔案選擇器接受大小不超過 50 MB 的 MP3、WAV、M4A、AAC、Ogg 與 WebM 檔案。使用檔案選擇器挑選一個支援的音訊檔案,並使用選用的原始預覽控制項,在翻轉之前先確認檔案能正常播放。
  2. 選擇翻轉音訊。瀏覽器會使用 Web Audio 解碼檔案,並在目前的分頁中把每個解碼後的聲道樣本於本地進行翻轉。解碼後的音訊在以下情況會被拒絕(而不是截斷):長度超過五分鐘、聲道超過八個、總聲道樣本數超過 3,000 萬個,或取樣率落在 8,000 到 192,000 Hz 之外。
  3. 等待翻轉完成。較長的檔案需要更多時間,因為瀏覽器必須先把整段串流解碼才能翻轉。在已接受的檔案內,不會略過任何樣本,也不會對樣本數設上限;每個聲道都會從頭到尾完整翻轉。
  4. 在內建播放器中預覽結果。聽一下翻轉後音訊的頭尾。原本的結尾現在應該會出現在開頭,而原本向前推進的攻擊性暫態,現在應該會以淡入的方式出現,而不是突然切入。
  5. 確認預覽旁邊顯示的時長、聲道數、取樣率與檔案大小。這些數值描述的是你即將下載的 WAV。
  6. 按下下載按鈕,把新的 PCM16 WAV 儲存到你的裝置上。下載的會是一個新編碼的檔案,帶有自己的臨時本地 URL,與原本預覽用的臨時 URL 是分開的。

WAV 保留了什麼、捨棄了什麼

以下是哪些屬性能存活到翻轉後的 WAV、哪些會在解碼與重新編碼的循環中被捨棄的對照表。

屬性在來源 MP3 或 M4A 中在翻轉後的 WAV 輸出中
音訊樣本順序時間上向前時間上反向
取樣率原始取樣率(若在 8 kHz–192 kHz 之間)與解碼後來源相同
聲道數1–8 個聲道與解碼後來源相同
時長來源長度(若 ≤5 分鐘)相同長度,以反向順序呈現
位元深度內部為 16 位元或 24 位元浮點強制為帶正負號的 16 位元 PCM
編解碼器(MP3、AAC、Opus、Vorbis 等)壓縮格式無——未壓縮 PCM
容器(MP3、M4A、OGG、WebM)來源容器僅 WAV
位元率來源位元率未壓縮;檔案會變大
ID3 / iTunes / Vorbis 標籤存在不會複製
專輯封面、章節、循環標記存在不會複製
編碼器設定、編碼器延遲存在不會複製

有幾列值得額外說明。位元深度那一列很重要,因為某些來源檔案在其壓縮串流內含有 24 位元的樣本;Reverse Audio 仍然只會寫入 16 位元 PCM,因此四捨五入可能會讓非常小的數值產生位移。位元率那一列也很重要,因為壓縮輸入對每秒音訊有固定的位元數,但 PCM WAV 在同樣意義上並沒有位元率──WAV 只是單純地每個聲道每個 frame 儲存一個 16 位元樣本。因此,同一段素材的 WAV 每秒大小會比壓縮來源大好幾倍,一段較長的翻轉音訊在磁碟上也很可能遠比當初那個 MP3 或 M4A 大得多。

決定翻轉能否完成的限制

有幾項硬性限制決定 Reverse Audio 是會產生 WAV 還是回報錯誤,這些限制會在檔案選擇階段與解碼後兩個地方都進行檢查。壓縮輸入檔案在磁碟上不得大於 50 MB。解碼後的音訊長度必須為五分鐘以內、聲道數介於一到八之間、取樣率介於 8,000 到 192,000 Hz 之間,且總聲道樣本數不得超過 3,000 萬。聲道樣本預算是 frame 數乘以聲道數,這個限制的存在,是為了避免一個小的壓縮來源在你分頁中膨脹成多 GB 等級的解碼陣列。

如果檔案選擇器接受了某個容器,但瀏覽器的 Web Audio 解碼器無法讀取容器內的編解碼器,工具會回報一個明確的解碼錯誤,而不是產生一個空的 WAV。編解碼器的支援程度依瀏覽器與作業系統而異,因此像 .m4a 或 .ogg 這種熟悉的副檔名,並不保證該檔案一定能解碼。輸入接受與成功解碼是工具內部兩個獨立的檢查,而你看到的訊息會對應到具體是哪一項檢查失敗。

當檔案被拒絕時,前一次成功下載的項目會先被清除,這樣舊的 WAV 才不會在新的錯誤發生後被誤認為新結果。工作與掛載狀態的防護機制,也會避免過時的非同步工作把晚到的結果寫到較新的結果之上。這些防護機制也是為什麼同一個編碼器與翻轉函式,可以在正式環境與隔離測試中重複使用,而不會產生不一致的輸出。

在使用 WAV 之前先驗證它

瀏覽器預覽能確認 WAV 能在同一個瀏覽器分頁中解碼並播放,但它並不保證每一個下游裝置都能接受相同的聲道配置或取樣率。請在你預計使用的編輯器或播放器中開啟下載的 WAV。確認時長、聲道數、取樣率與檔案大小與工具上顯示的內容一致。如果目標裝置或軟體需要的是壓縮的 MP3 或 M4A 檔案,你就必須另外把這個新的 WAV 重新轉檔——Reverse Audio 並不會輸出壓縮格式,也沒有承諾會這麼做。

若要建立一個可靠的工作流程,請保留原始的 MP3 或 M4A 來源、聽一下原始預覽、執行翻轉、聽一下新 WAV 的開頭與結尾,然後再把這個 WAV 放進需要反向音訊的專案裡。如果你也想確認檔案從未離開過分頁,這份指南 使用 Reverse Audio 時,音訊檔案會被上傳嗎? 是很好的補充參考。如果你還需要淡入淡出、修剪、編解碼器選擇、元資料或母帶處理控制項,請在翻轉完成後,於音訊編輯器中對該 WAV 進行處理。Reverse Audio 只專注於一件事──把解碼後的樣本翻轉並產生忠實的 WAV──而把這些相鄰的步驟留給專門的工具來處理。