Я пытаюсь использовать модуль fluent-ffmpeg
NPM в приложении, чтобы уменьшить громкость звука в первой половине видео, а затем увеличить громкость, когда он достигает середины. Я написал этот код, чтобы попытаться сделать это:
const ffmpeg = require("fluent-ffmpeg");
ffmpeg("test.mp4")
.audioFilters("volume=enable='between(t,0,t/2)':volume='0.25'", "volume=enable='between(t,t/2,t)':volume='1'")
.save("output.mp4");
Однако всякий раз, когда я запускаю этот код, уровни громкости output.mp4
точно такие же, как test.mp4
. Что я делаю?
С помощью комментария Гьяна я смог собрать желаемый эффект, используя ffprobe
и литералы шаблонов JS. Вот фиксированный код (с нотацией fluent-ffmpeg):
const ffmpeg = require("fluent-ffmpeg");
ffmpeg.ffprobe("test.mp4", (error, metadata) => {
ffmpeg("test.mp4").audioFilters({
filter: "volume",
options: {
enable: `between(t,0,${metadata.format.duration}/2)`,
volume: "0.25"
}
}, {
filter: "volume",
options: {
enable: `between(t,${metadata.format.duration}/2, ${metadata.format.duration})`,
volume: "1"
}
}).save("output.mp4");
});
t
представляет текущее время, а не общую продолжительность. Вы должны заранее узнать общую продолжительность, а затем использовать это значение. Предположим, что это 48 секунд. Тогда первое выражение включения будетbetween(t,0,24)
илиbetween(t,0,48/2)