ChatGPT教我使用互相關(guān)識別指定聲音并替換【學(xué)習(xí)日記】
太長不看
我讓ChatGPT寫了一個音效替換的代碼,它寫的內(nèi)容我很滿意;但是我沒試過。
為啥會有這個需求
我看到了一個有意思的視頻(這個專欄的封面視頻),覺得如果有軟件可以把里邊的青蛙叫換成其他的聲音,這個視頻似乎會有更多的播放量。
這種功能是可以實現(xiàn)的,我甚至想了如果噪音太大的話,可以用機器學(xué)習(xí)的算法來識別和剔除指定的聲音??如果有人給我很多很多的錢,并且?guī)臀艺埣俚脑?,我可能真的會自己去寫。但是這種大概率已經(jīng)被別人實現(xiàn)了的功能,怎么可能會有人給我錢呢(doge);所以我并沒有寫,也不打算寫。
為啥用ChatGPT
之前我只和ChatGPT隨便聊天,扯些有的沒的;自從知道它會把參考文獻作者搞錯、公式變量的含義解釋錯之后,我就基本不怎么用它了。
然后突然有一天,我發(fā)現(xiàn)我的同學(xué)們用它來幫助閱讀別人寫的代碼(我猜是解釋代碼功能),還有同學(xué)讓它幫忙把自己畫統(tǒng)計圖的代碼完善一下、畫出更好看的圖。我意識到我太小看它了,而且有一種被時代拋棄的危機感??。
??然后想起來我曾經(jīng)有那么一個只要自己多學(xué)習(xí)就能解決的需求……就抱著試試看的心態(tài),試了那么一下下。
聊天記錄
我:can you write a matlab script that can replace a specified sound pattern in a video with another given sound pattern? For example, replace beeping with somebody's laughter?
(翻譯:你能幫我寫一段Matlab代碼,把視頻中的指定聲音替換成另一指定聲音嗎?比如把嗶嗶聲換成某個人的笑聲)
ChatGPT:
Yes, here's an example MATLAB script that can replace a specified sound pattern in a video with another given sound pattern:
(大意:給了我一個例子)
(備注:因為嗶哩嗶哩沒有Matlab代碼塊,所以我選擇Javascript上色)
This script assumes that the video file is in the same directory as the script and is named 'video.mp4'. It also assumes that the beep sound file is named 'beep.wav' and the laughter sound file is named 'laughter.wav' and they are in the same directory as the script.
Note that the script replaces the sound pattern in the original audio track of the video and then writes the modified audio track back to the video file. This means that the original video is modified and the sound pattern is replaced in the entire video, not just a specific segment. If you only want to replace the sound pattern in a specific segment of the video, you'll need to modify the start and end times accordingly.
(大意是一些使用說明,文件名和預(yù)期效果啥的)
評論
看到代碼我其實沒吃驚,畢竟ChatGPT是語言學(xué)習(xí)的機器人,生成代碼的能力我也早有耳聞。
我甚至還嘲笑它:怎么還有音頻的時間點啊,是不是沒理解我的意思,以為我給出的要去掉的聲音在視頻中會對應(yīng)一模一樣的數(shù)據(jù)呀?這下翻車了。
然后我在瀏覽代碼的時候看到了一個函數(shù):xcorr2
x在英文中經(jīng)常用來做十字(cross)的縮寫;corr代表correlation(相關(guān)),Matlab中求兩列數(shù)據(jù)有多大程度同升同降(正相關(guān))或者你升我降(負相關(guān))的函數(shù)就叫corr;2是一個數(shù)字,在函數(shù)有多個版本、或者對應(yīng)不同維度數(shù)據(jù)的時候,Matlab會在函數(shù)名結(jié)尾加上數(shù)字表示區(qū)分(個人經(jīng)驗)。
所以看到xcorr我一下子想到了cross-correlation(互相關(guān)):通常看兩列數(shù)據(jù)是否相關(guān),我們會假定它倆是來自同一段時間的數(shù)據(jù),也就是第一列數(shù)據(jù)的第一個點和第二列數(shù)據(jù)的第一個點對應(yīng)同一個時間點;但是有的時候,第二列數(shù)據(jù)比第一列數(shù)據(jù)晚收集一會兒,第二列數(shù)據(jù)的第一個點可能對應(yīng)第一列數(shù)據(jù)的第十個點——這個時候,即使兩列數(shù)據(jù)的來源是同升同降的,如果直接做相關(guān)分析,計算得到的的相關(guān)程度可能也不強;但是如果把第二列數(shù)據(jù)的起點移動到第一列數(shù)據(jù)第十個點的位置之后再做相關(guān),得到的相關(guān)程度可能就很強了。這種錯位后做相關(guān)的操作就屬于cross-correlation。
如果第二列數(shù)據(jù)是一個短短的嗶嗶聲,第一列數(shù)據(jù)是視頻的音軌,那么使用cross-correlation,就可以把視頻音軌中與嗶嗶聲最相似的部分找出來(當嗶嗶聲的起點與這些位置接近的時候,得到的相關(guān)程度會很高,因為相似的聲音是同升同降的)。
ChatGPT沒有用到機器學(xué)習(xí),只是最單純的解法,我覺得它很棒??
我寫專欄的時候又去查了一下維基百科https://en.wikipedia.org/wiki/Cross-correlation,提到了它經(jīng)常被用來做模式識別——這下是真的學(xué)到了。
后記
說實話,我沒想到會有第二個ChatGPT的聊天記錄專欄,因為我覺得玩兒它就圖個新鮮,它不會生成什么打動我的東西。雖然從我已經(jīng)聽說的傳聞和經(jīng)驗來看,ChatGPT寫一個功能簡單的代碼完全是預(yù)料之中的事情;但是自己有了一個可有可無的需求,懶得思考,懶得寫,然后問一個AI,這個AI真的把它寫出來了,而且還讓自己學(xué)到了東西,這真的很讓我激動??。