2016-11-12 97 views
0

我知道如何用atempo改變速度,但是音頻文件會變得有點失真,而且我找不到一個可靠的方法來改變音調。 (比如,將節奏和音調加在一起140%)如何用ffmpeg可靠地改變音調和速度

Sox有一個速度選項,但截斷音量並且不像ffmpeg那樣廣泛可用。 mplayer有一個完美的速度選項,但是我不能輸出沒有額外的庫。

我似乎理解ffmpeg沒有辦法改變音調(也許它最近做?),但有沒有辦法改變頻率或其他標誌來模擬改變音調?看起來相當遠,找不到一個體面的解決方案。

編輯:asetrate:48k * 1.4(假設最初爲48k)似乎不起作用,但失真和音調並沒有真正改變太多。

EDIT2:https://superuser.com/a/1076762這個答案排序的作品,但質量是如此之遠低於sox speed 1.4選項

回答

2

ffmpeg -i <input file name> -filter:a "asetrate=<new frequency>" -y <output file name>似乎是爲我工作。我用ffprobe檢查了輸入和輸出文件的屬性,似乎沒有任何可能影響其質量的差異。儘管我已經運行過幾次,並且其中一些文件中的結果文件有一些工件,但即使代碼行相同,也可能是由一些ffmpeg錯誤引起的;如果您對質量不滿意,請嘗試再次運行。

+0

你是對的,似乎工作。也許是因爲在我用'asetrate'觸碰'atempo'之前,似乎只有它工作。質量似乎比sox或mplayer差一點,但我認爲它足夠接近。謝謝您的幫助。 您是否知道是否有方法可以在不首先檢查的情況下設置原始的乘法<新頻率>?就像48k * 1.4而不是1.4k我可以放1.4,它會增加1.4的頻率。 – jake

+1

嗯,我不知道是否有一個直接的方式來做到這一點,我能想到的唯一的事情就是通過ffprobe獲取原始頻率的值 - 只要值,並刪除所有額外的信息,以便通過它作爲原始代碼行的變量。你可以這樣做:'ffmpeg -i -filter:asetsetrate = $(ffprobe -v error -show_entries stream = sample_rate -of default = noprint_wrappers = 1:nokey = 1 <輸入文件名> )* 1.4「-y <輸出文件名>' – Sizigia

相關問題