> For the complete documentation index, see [llms.txt](https://docs.helmut.de/helmut4-releases/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.helmut.de/helmut4-releases/v4.13.0/helmut4-components/streamdesigner/nodes/actions/job-action/job-render-with-ffmpeg-action.md).

# Job Render with FFmpeg Action

This node renders a file by executing an **FFmpeg** command.

It is intended for workflows that require custom transcoding, rewrapping, resizing, codec conversion, metadata handling, or other media-processing tasks that are supported by FFmpeg. The FFmpeg command is configured directly in the node, while the destination file is defined separately.

When executed successfully, the node result contains the path of the rendered destination file.

<figure><img src="/files/aUydxaO7Uzh697P29WXd" alt="" width="354"><figcaption><p>Job Render with FFmpeg Action</p></figcaption></figure>

<details>

<summary>Job Render with FFmpeg Action V1 node</summary>

Version 2 replaces the separate **Input Parameters**, **Input File**, and **Output Parameters** fields with a single **FFmpeg Command** field. This provides greater flexibility when configuring FFmpeg and supports more complex command structures, including advanced input options, multiple mappings, filters, and codec-specific parameters.

The output file path continues to be configured separately through the **Destination File** field and must not be included in the **FFmpeg Command** field.

In addition, V2 introduces the **If New Destination Path Exists** setting. This allows the workflow to either fail when a destination file already exists or create the rendered file using an incremented file name.

</details>

***

## Configurable Settings

### **Async**

Enables or disables asynchronous execution.

### **FFmpeg Path**

The full path to the FFmpeg executable on the system that executes the stream.

Example:

```
/usr/local/bin/ffmpeg
```

### **FFmpeg Command**

The FFmpeg command arguments to execute.

Do not include the `ffmpeg` executable itself in this field. The executable is defined separately in **FFmpeg Path**.

The command should contain all required input options, input paths, codec settings, filters, stream mappings, and other FFmpeg arguments. The destination file should be configured in the dedicated **Destination File** field rather than appended to the command.

Example:

```
-probesize 50M -analyzeduration 100M -i "/Volumes/Helmut/source.mxf" -map 0:0 -map 0:1 -c:v libx265 -s 960x540 -aspect 16:9 -pix_fmt yuv420p -preset ultrafast -b:v 5M -x265-params "crf=25:me=hex:qcomp=0.5:scenecut=40:keyint=5" -color_primaries bt709 -color_trc bt709 -colorspace bt709 -color_range mpeg -tag:v hvc1 -metadata creation_time=now -sn -y
```

#### Creating FFmpeg Commands

Several tools and websites can help create FFmpeg commands, for example [FFmpeg Commander](https://ffmpeg-commander.com).

When using generated commands, ensure that all parameters are assigned correctly. Input-related parameters must be placed before the corresponding `-i` input argument, while output-related parameters must be placed after the input definition and before the output file.

The output file itself must not be included in the **FFmpeg Command** field. Configure it separately using the node’s **Destination File** parameter.

### **Destination File**

The complete destination file path, including the file name and extension.

Example:

```
/Volumes/Helmut4/asset01.mp4
```

**Timeout**

The maximum time, in seconds, that the node waits for FFmpeg to complete before the node fails.

Example:

```
3600
```

### **Render Message**

The message displayed in the Helmut dashboard while the FFmpeg process is running.

Example:

```
Rendering with FFmpeg as user '{user.name}'
```

### **Render Done Message**

The message displayed in the Helmut dashboard after the FFmpeg process finishes successfully.

Example:

```
Rendering with FFmpeg as user '{user.name}' has been successful
```

### **If New Destination Path Exists**

Defines how the node handles an existing file at the configured destination path.

Available options:

```
FAIL
INCREMENT_NAME
```

* **FAIL**\
  The node fails if a file already exists at the destination path.
* **INCREMENT\_NAME**\
  The node creates the output with an incremented file name instead of overwriting the existing file.

***

### Render asset path

The path of the newly created asset is returned after a successful render. It can be accessed using either of the following wildcards:

* [{stream.last\_result}](/helmut4-releases/v4.13.0/helmut4-components/streamdesigner/wildcards/result-or-return-wildcards-2/stream-last_result.md)
* [{node.result.?}](/helmut4-releases/v4.13.0/helmut4-components/streamdesigner/wildcards/result-or-return-wildcards-2/node-result.md).

***

#### Typical Usage

```
FFmpeg Path:
/usr/local/bin/ffmpeg

FFmpeg Command:
-i "{job.source}" -c:v libx264 -crf 23 -c:a aac -b:a 192k

Destination File:
{job.destination}

Timeout:
3600

If New Destination Path Exists:
INCREMENT_NAME
```

#### Important Notes

* FFmpeg must be installed and executable on the client that runs the stream.
* The executing user must have read access to the input file and write access to the destination directory.
* Quote paths containing spaces.
* Use the dedicated **Destination File** setting for the output path; do not append the output file to the **FFmpeg Command** field.
* FFmpeg exit errors and invalid codec, format, mapping, or filter settings cause the node to fail.
