使用 FFMPeg 进行动态体积混合
Dynamic volume mixing with FFMPeg
我正在使用 FFMPeg 流式传输音频,需要使用 FFMpeg 混合两个音频源并动态设置音量级别。 IE。流开始后,我需要能够更新两个卷的比率。
目前,我使用 FFMPeg 的 CLI 版本进行音量混合和流式传输,但音量混合比是静态的。
有没有办法使用CLI工具动态设置音量比?也许是带有 FFMpeg 表达式的东西?
或者使用 API 是唯一的选择吗?如果是这样,谁能给我指出一个动态混合音频的例子?我还没找到。
编辑:这是我目前传递给混合音频的参数。同样,这工作正常,所以不包括日志,因为没有要修复的错误。问题是如何在进程启动后调整 amix
混合的比例。如果需要,愿意使用API。
"-f rawvideo" + // container
" -vcodec rawvideo" + // codec
" -s " + width + "x" + height + // input video size, must be correct
" -pix_fmt rgba" + // pixel format
" -framerate " + frameRate +
" -i pipe:0" + // from stdin in via pipe
" -f dshow" +
" -i audio=\"Stereo Mix (Realtek(R) Audio)\"" + //
" -f dshow" +
" -i audio=\"Microphone Array (Xbox NUI Sensor)\"" + //
" -filter_complex \"amix\"" + // mix the two inputs, can added ratio if needed
" -c:v libx264" + // x264 software encoder
" -g " + frameRate *2 +
" -keyint_min " + frameRate +
" -c:a aac" + // audio format
" -b:v 6M -maxrate 2M -bufsize 1M" + // constrain bitrate per twitch
" -f flv" +
" " + address
);
命令
- 一些过滤器支持命令,允许对一些过滤器选项进行临时控制。并非所有过滤器都有命令。有时会添加命令,因此请始终使用最近的
ffmpeg
来利用新功能。
- 参考
ffmpeg -filters
并在过滤器名称旁边查找 C
,或查看 man ffmpeg-filters
或 FFmpeg Filters documentation 并搜索 commands 在每个过滤器下。
- 并非所有选项都有等效的命令。
(a)sendcmd 和 (a)zmq
- asendcmd / sendcmd - 通过交互模式执行计划命令或交互命令。
- azmq / zmq - 执行交互式、按需、实时命令。要启用 (a)zmq,您需要安装 libzmq 库和 headers 并使用
--enable-libzmq
. 配置 ffmpeg
asendcmd 示例
在时间戳 10 处将音量减半:
ffmpeg -i input -filter_complex "asendcmd=c='10.0 volume volume 0.5',volume" output
如果您想进行很多调整,那么在单独的文本文件中进行管理并使用 f
选项会更容易。参见 (a)sendcmd documentation. See more examples。
交互模式
你可以使用c(发送命令到第一个支持它的匹配过滤器)或C(Send/Queue命令到所有匹配过滤器)在编码期间发送命令。在编码时使用 ? 了解更多信息,请参阅 example, and refer to (a)sendcmd documentation 了解语法。
azmq 示例
运行ffmpeg
,然后在你想调节音量的时候执行zmqsend
。
ffmpeg -i input -filter_complex "volume@foo,azmq" output
echo "volume@foo volume 0.5" | tools/zmqsend
zmqsend
在 FFmpeg 源的 tools
目录中可用(安装 zmq,./configure --enable-libzmq && make -j && make tools/zmqsend
)。如果您在 Windows 上,只需下载 Gyan's FFmpeg builds 之一并获取工具包。
我正在使用 FFMPeg 流式传输音频,需要使用 FFMpeg 混合两个音频源并动态设置音量级别。 IE。流开始后,我需要能够更新两个卷的比率。
目前,我使用 FFMPeg 的 CLI 版本进行音量混合和流式传输,但音量混合比是静态的。
有没有办法使用CLI工具动态设置音量比?也许是带有 FFMpeg 表达式的东西?
或者使用 API 是唯一的选择吗?如果是这样,谁能给我指出一个动态混合音频的例子?我还没找到。
编辑:这是我目前传递给混合音频的参数。同样,这工作正常,所以不包括日志,因为没有要修复的错误。问题是如何在进程启动后调整 amix
混合的比例。如果需要,愿意使用API。
"-f rawvideo" + // container
" -vcodec rawvideo" + // codec
" -s " + width + "x" + height + // input video size, must be correct
" -pix_fmt rgba" + // pixel format
" -framerate " + frameRate +
" -i pipe:0" + // from stdin in via pipe
" -f dshow" +
" -i audio=\"Stereo Mix (Realtek(R) Audio)\"" + //
" -f dshow" +
" -i audio=\"Microphone Array (Xbox NUI Sensor)\"" + //
" -filter_complex \"amix\"" + // mix the two inputs, can added ratio if needed
" -c:v libx264" + // x264 software encoder
" -g " + frameRate *2 +
" -keyint_min " + frameRate +
" -c:a aac" + // audio format
" -b:v 6M -maxrate 2M -bufsize 1M" + // constrain bitrate per twitch
" -f flv" +
" " + address
);
命令
- 一些过滤器支持命令,允许对一些过滤器选项进行临时控制。并非所有过滤器都有命令。有时会添加命令,因此请始终使用最近的
ffmpeg
来利用新功能。 - 参考
ffmpeg -filters
并在过滤器名称旁边查找C
,或查看man ffmpeg-filters
或 FFmpeg Filters documentation 并搜索 commands 在每个过滤器下。 - 并非所有选项都有等效的命令。
(a)sendcmd 和 (a)zmq
- asendcmd / sendcmd - 通过交互模式执行计划命令或交互命令。
- azmq / zmq - 执行交互式、按需、实时命令。要启用 (a)zmq,您需要安装 libzmq 库和 headers 并使用
--enable-libzmq
. 配置 ffmpeg
asendcmd 示例
在时间戳 10 处将音量减半:
ffmpeg -i input -filter_complex "asendcmd=c='10.0 volume volume 0.5',volume" output
如果您想进行很多调整,那么在单独的文本文件中进行管理并使用 f
选项会更容易。参见 (a)sendcmd documentation. See more examples。
交互模式
你可以使用c(发送命令到第一个支持它的匹配过滤器)或C(Send/Queue命令到所有匹配过滤器)在编码期间发送命令。在编码时使用 ? 了解更多信息,请参阅 example, and refer to (a)sendcmd documentation 了解语法。
azmq 示例
运行ffmpeg
,然后在你想调节音量的时候执行zmqsend
。
ffmpeg -i input -filter_complex "volume@foo,azmq" output
echo "volume@foo volume 0.5" | tools/zmqsend
zmqsend
在 FFmpeg 源的 tools
目录中可用(安装 zmq,./configure --enable-libzmq && make -j && make tools/zmqsend
)。如果您在 Windows 上,只需下载 Gyan's FFmpeg builds 之一并获取工具包。