簡體   English   中英

如何使用 ffmpeg 可靠地同時改變音高和節奏

[英]How to change pitch and tempo together, reliably with ffmpeg

我知道如何用 atempo 改變速度,但音頻文件有點失真,而且我找不到改變音高的可靠方法。 (比如,將節奏和音高一起提高 140%)

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

我似乎明白 ffmpeg 沒有辦法改變音高(也許最近有?)但是有沒有辦法改變頻率或其他一些標志來模擬改變音高? 看得很遠,找不到合適的解決方案。

編輯:asetrate:48k*1.4(假設最初是 48k)似乎不起作用,失真和音高仍然沒有太大變化。

Edit2: https://superuser.com/a/1076762這個答案有點效果,但質量比sox speed 1.4選項低得多

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

截至 2022 年(盡管在 2015 年做出了貢獻),FFmpeg 有一個開箱即用的rubberband過濾器,沒有任何上述丑陋、據稱速度慢、質量差和不直觀的解決方法。

要使用橡皮筋濾波器更改音高,您必須使用半音的頻率比指定音高。 這是基於使用公式 (2^x/12),其中 x 代表您想要移調的半音數。

例如,要向上移調一個半音,您可以使用以下命令:

ffmpeg -i my.mp3 -filter:a "rubberband=pitch=1.059463094352953" -acodec copy my-up.mp3

要向下轉置,只需對 x 使用負數。

要同時更改這兩個屬性,請指定tempopitch值。 tempo值指定為原始速度的倍數。

以下命令將移調一個半音並將速度提高 4 倍:

ffmpeg -i slow.mp3 -filter:a "rubberband=pitch=0.9438743126816935, rubberband=tempo=4" -acodec copy fast.mp3

除非以統計方式衡量,否則質量下降是難以察覺的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM