How to Use the FFmpeg asendcmd Filter

The asendcmd (audio send command) filter in FFmpeg allows you to pass commands to other audio filters dynamically at specific time intervals during processing. This article provides a straightforward guide on how to configure and use the asendcmd filter, illustrating how to change audio parameters—such as volume or panning—on the fly using inline commands or external command files.


Understanding asendcmd Syntax

The asendcmd filter works by monitoring the audio stream’s timeline. When a specified timestamp is reached, it dispatches a command to a designated target filter. To make this work, the target filter must be assigned a unique name (or identifier) using the @ syntax.

The basic syntax for a command is:

[time] [target_filter_identifier] [parameter_to_change] [new_value]

Method 1: Using Inline Commands

For simple, one-off changes, you can write the command directly inside the FFmpeg execution string using the c (command) argument.

Example: Dropping Volume at 5 Seconds

In this example, the audio starts at normal volume, but at exactly 5.0 seconds, the volume drops to 20% (0.2).

ffmpeg -i input.wav -af "asendcmd=c='5.0 volume@myvol volume 0.2',volume@myvol=1" output.wav

How it works: 1. volume@myvol=1 initializes a volume filter with the instance name myvol and a default volume of 1 (100%). 2. asendcmd=c='5.0 volume@myvol volume 0.2' instructs FFmpeg to target volume@myvol at the 5.0-second mark and change its volume parameter to 0.2.


Method 2: Using an External Command File

For complex audio manipulations with multiple triggers, managing commands inside a text file is highly recommended. You can load this file using the f (filename) argument.

Step 1: Create the Command File

Create a text file named commands.txt and define your sequence of events. Each command must end with a semicolon (;).

2.0 volume@myvol volume 0.5;
4.0 volume@myvol volume 0.1;
6.0 volume@myvol volume 1.0;

Step 2: Run FFmpeg with the Command File

Reference the commands.txt file in your FFmpeg command:

ffmpeg -i input.wav -af "asendcmd=f=commands.txt,volume@myvol=1" output.wav

How it works: * At 2.0 seconds, the volume scales down to 50%. * At 4.0 seconds, the volume drops to 10%. * At 6.0 seconds, the volume restores to 100%.


Key Considerations