2017-04-13 63 views
3

我試圖找出是否有方法可以確定AAC編碼的音軌是否使用杜比定向邏輯II數據進行編碼。有沒有辦法檢查文件,以便您可以看到這些信息?我已經例如編碼的媒體文件在手剎與(截斷爲音頻選項)-E av_aac -B 320 --mixdown dpl2,這是音軌輸出mediainfo顯示:如何確定音軌是否是杜比定向邏輯II混音

Audio #1 
ID          : 2 
Format         : AAC 
Format/Info        : Advanced Audio Codec 
Format profile       : LC 
Codec ID         : 40 
Duration         : 2h 5mn 
Bit rate mode       : Variable 
Bit rate         : 321 Kbps 
Channel(s)        : 2 channels 
Channel positions      : Front: L R 
Sampling rate       : 48.0 KHz 
Compression mode       : Lossy 
Stream size        : 288 MiB (3%) 
Title         : Stereo/Stereo 
Language         : English 
Encoded date        : UTC 2017-04-11 22:21:41 
Tagged date        : UTC 2017-04-11 22:21:41 

,但我不能告訴,如果有一個在這個輸出會什麼建議它用DPL2數據編碼。

+0

_「我已經例如編碼手剎的媒體文件」 _得到一個小樣本文件(秒而不是2個小時長)?如果在輸出文件的字節中提到,那麼我們可以嘗試建議如何檢索這樣的信息 –

回答

3

TL:博士;這可能是可能的;如果你是程序員,這可能會更容易。

因爲編碼的信息只是一個立體聲模擬對,所以除非您專門存儲了您自己的元數據說「這是一個DPL2文件」,否則無法保證檢測其中的杜比定向邏輯II(DPL2)信號。但你可以做出一個很好的猜測。

所有的舊的模擬杜比環繞格式,包括DPL2,通過反轉環繞的相位或包圍,然後將它們混合成原來的左和右聲道中的兩個通道存儲環繞聲信息。杜比環繞聲解碼器(包括DPL2)嘗試通過反轉兩個通道中的一個通道的相位,然後在這些信號對中尋找相似性來恢復該信息。這要麼在杜比環繞聲中做得很平凡,要麼就像DPL2那樣,這些相似性被人爲地偏向左側或右側,或者左側或右側環繞。

所以關鍵是要檢測的重要數據是否被存儲在該環繞通道(一個或多個)。我會爲你繪製一種可能有用的方法,並且我會盡量在不編寫代碼的情況下表達它,但是要根據自己的喜好來實現和優化它。

  1. 將節目內容的前N秒左右剪切爲立體聲文件,其中N介於1到30之間。調用這個文件輸入。
  2. 將輸入立體聲聲道混音爲每聲道-3dB的新單聲道文件。調用這個文件中心。
  3. 將輸入的左右聲道拆分爲單獨的文件。將這些左右調用。
  4. 反轉右聲道。調用這個文件RightInvert。
  5. 將每個通道-3dB的左右聲道混音爲一個新的單聲道文件。將此文件稱爲環繞聲。
  6. 確定Surround文件的RMS和峯值dB。
  7. 如果Surround文件的RMS或峯值DB低於「容差」,則停止;原始文件是單聲道或中心聲像,因此不包含環繞聲信息。您必須嘗試使用​​幾個DPL2和非DPL2來源來查看這些容差是多少,但是在十幾個文件後,數字應該變得清晰。我猜測-30分貝左右。
  8. 將中心文件轉換爲新文件。調用這個文件CenterInvert。
  9. 混勻CenterInvert文件到環繞文件在0dB(二者CenterInvert和環繞應該是單聲道)。調用這個新文件SurroundInvert。
  10. 確定SurroundInvert文件的RMS和峯值dB。
  11. 如果任SurroundInvert的RMS和/或峯值分貝低於「的公差,」停止;您的原始來源包含平移的左側或右側前方信息,而非環繞信息。你必須試驗幾個DPL2和非DPL2的信號源來查看這些容差是多少,但是在十幾個文件後,數字應該變得清晰 - 我猜測-35dB左右。
  12. 如果你已經遠遠得到這個,你原來的輸入可能包含環繞聲信息,因此很可能是杜比環繞聲編碼家族中的一員。

我已經編寫了這個算法,以便您可以使用sox中的特定命令執行上述每個步驟。如果您希望更有趣,可以運行一個ebur128程序,而不是使用LUFS中的RMS /峯值步驟,並根據容差檢查LUFS中的級別。如果你想創造更多的環繞聲和中心文件,你可以濾除高於7kHz的所有頻率,並對它們進行去加重,就像真正的DPL2解碼器一樣。

爲了保持這種算法簡單,我在幅度域中完全勾勒出來。如果您知道如何計算FFT頻率的大小和角度,並使用30到100毫秒的窗口,SurroundLevel文件的計算可能會在頻域中更加準確地完成。但這個低價版本應該讓你開始。

最後一個警告。 AAC是一種現代心理聲學編解碼器,這意味着它喜歡用立體聲相位和成像來玩遊戲,以實現其壓縮。所以我認爲僅僅將DPL2封裝到AAC流中的行爲可能會將DPL2中的一些圖像進行壓縮。坦率地說,DPL2和AAC都不屬於這個管道的任何地方。如果您必須存儲最初使用DPL2編碼的模擬流,請使用WAV或FLAC這樣的無損格式,而不是AAC。

在撰寫本文時,後面的Dolby Pro Logic(I)操作概念是here。這些基本概念仍然適用於DPL2; DPL2的操作概念是here

+0

+1,雖然這種方法會產生很多誤報。例如,您可以通過放置不合適的麥克風來錄製倒相。隨時都會發生。 – Dalen

+0

Dalen正確地指出,糟糕的錄音可能存在倒相,但對於糟糕的音樂沒有辦法治癒; 「相位倒置」一直都不會發生。「 – johnwbyrd

+0

不是?當立體聲擴大的回聲效應流失時會發生什麼情況。噢,即使是簡單的回聲,如果它是一個長音符,有時也可能看起來像倒轉信號。什麼是綜合的東西,實際上使用倒相?什麼時候簡單的MS完成?相位聲碼器用於時間拉伸或音高變化,或者實際上,當使用任何使用大重疊的濾波器時。在窗口邊緣總會有一些反轉的可能性。你無法一直避免它,只是爲了讓你能夠說出這不是最初的正面,所以它應該轉向右後揚聲器。 – Dalen

2

如果文件具有多個通道,您可以有一定的把握,假設它們用於環繞目的,儘管它們可能只是多個通道。 在這種情況下,它與播放系統有關,因爲它認爲最好。 (如果文件頭沒有說明要做什麼)

但是你的文件是立體聲。如果您想知道它是否是虛擬環繞聲文件,那麼您可以在標題中查找編碼器字段以查看使用了哪個編碼器。 這可能會有所幫助,雖然不是很多。大部分編碼器字段留空,第二件事是編碼器不必與混合環繞聲數據的編碼器相同。 也就是說編碼器將首先創建原始PCM數據,然後將其饋送給某個編碼器以產生壓縮文件。 (AAC或其他) 此外,還有很多應用程序和版本不盡相同,因此編碼器字段可能會有所不同,因此跟蹤所有這些應用程序將是一件令人討厭的工作。

但是,您可以以超過60%的確定性,通過檢查數據來推斷是否有虛擬環繞聲。這將是先進的DSP,併爲了速度,甚至可能涉及機器學習。 您必須瞭解立體聲信號是否包含HRTF(頭部相關傳輸函數)的某些特徵。 這可以通過檢查頻域中出現在相同聲音和諧波特徵(特徵頻率變化)之間的強度差和延遲特徵來實現。 你必須這樣做,因爲一個沒有另一個可能會告訴你,一些非常好的立體聲錄音,而不是一個虛擬的環繞聲。 我不知道是否已經在某處映射了HRTF特定功能,或者您需要自行完成。

這是一個非常複雜的解決方案,需要花費很多時間才能正確製作。而且它的性能會有問題。

使用此方法,您還可以將立體聲混音分解爲幾乎原始的環繞聲道。 但是,對於立體聲環繞轉換,使用其他方法,它們聽起來很不錯。

如果您決定進行這樣的檢測,如果沒有映射HRTF功能,請花費半年或更長時間的努力工作,如果有幾周, 會給您帶來很大壓力,祝您好運。我做了類似的事情。這是一個殺手。

如果您想要開箱即用的解決方案,那麼您的問題的答案是否定的,除非標頭爲您提供了編碼器字段,並且編碼器是獨特的,並且僅用於執行環繞立體聲轉換。 我不認爲任何人從我描述的實際數據中做出這一點,或者如果他們這樣做是商業產品的一部分。做你想要的東西通常不是必需的,但它可以完成。

Ow,BTW,嘗試使用Google搜索HRTF反演,它可能會提供一些幫助。

+0

一,杜比PL2沒有標題;二,杜比PL2與HRTF無關,除非有最廣泛的意義;三,說解決問題將是「先進的DSP」,「涉及人工智能」既不是答案,也不是正確的。 – johnwbyrd

+0

一:我們正在談論立體聲文件是否曾經是杜比。 AAC容器肯定有一個標題。而且,兩個是的,我會用數據上的DSP從信號中提取希望得到環繞聲的特徵(這與HRTF引起的變化最相似)。我會將這些功能提供給像NN這樣的分類器,以查看信號是否屬於環繞聲。 – Dalen

+0

如果AI對於任何人來說太寬泛,我正在將AI變爲機器學習。在我建議的方法中,我會使用它。而且,我不是一個大的支持者。事實上,我會用我和你的方法來達到90%或更高的確定性。 – Dalen

相關問題