Как изменить высоту и темп вместе, надежно с помощью ffmpeg
Я знаю, как изменить темп с помощью atempo, но аудиофайл немного искажается, и я не могу найти надежный способ изменить высоту звука. (скажем, увеличить темп и высоту звука вместе на 140%)
У Sox есть опция скорости, но усечение тома И не так широко доступно, как ffmpeg. У mplayer есть опция скорости, которая работает отлично, но я не могу вывести без дополнительных библиотек.
Кажется, я понимаю, что у ffmpeg нет способа изменить высоту тона (может быть, это было недавно?), Но есть ли способ изменить частоту или другие флаги, чтобы имитировать изменение высоты тона? Посмотрел довольно далеко и не могу найти достойного решения.
Edit: asetrate: 48k * 1.4 (при первоначальном предположении 48k), похоже, не работает, но искажения и высота тона не сильно меняются.
Edit2: /questions/44748001/upravlenie-dokumentami-luchshaya-strategiya-dlya-realizatsii/44748016#44748016 этот ответ вроде работает, но качество намного ниже, чем sox speed 1.4
вариант
2 ответа
ffmpeg -i <input file name> -filter:a "asetrate=<new frequency>" -y <output file name>
кажется, работает на меня. Я проверил свойства как входных, так и выходных файлов с помощью ffprobe, и, похоже, нет никаких различий, которые могли бы повлиять на его качество. Хотя это правда, что я запускал его несколько раз, и в результате на некоторых файлах были некоторые артефакты, даже если строка кода была одинаковой, поэтому это может быть вызвано некоторой ошибкой ffmpeg; попробуйте запустить его снова, если вы не удовлетворены качеством.
По состоянию на 2022 год (хотя внесен в 2015 году) FFmpeg имеетrubberband
фильтр, который работает «из коробки» без каких-либо вышеупомянутых уродливых, якобы медленных и некачественных и неинтуитивных обходных путей. Чтобы изменить оба свойства с одинаковым коэффициентом, укажите
tempo
а также
pitch
как то же самое. Ухудшение качества незаметно, если не измерять статистически.