![]() |
ffmpeg_image_transport package from ffmpeg_image_transport repoffmpeg_image_transport |
ROS Distro
|
Package Summary
Tags | No category tags. |
Version | 2.0.3 |
License | Apache-2 |
Build type | AMENT_CMAKE |
Use | RECOMMENDED |
Repository Summary
Checkout URI | https://github.com/ros-misc-utilities/ffmpeg_image_transport.git |
VCS Type | git |
VCS Version | release |
Last Updated | 2025-05-26 |
Dev Status | DEVELOPED |
CI status | No Continuous Integration |
Released | RELEASED |
Tags | No category tags. |
Contributing |
Help Wanted (0)
Good First Issues (0) Pull Requests to Review (0) |
Package Description
Additional Links
Maintainers
- Bernd Pfrommer
Authors
- Bernd Pfrommer
ROS2 image transport for ffmpeg/libav
This ROS2 image transport plugin supports encoding/decoding with the FFMpeg library, for example encoding h264 and h265 or HEVC, using Nvidia or other hardware acceleration when available.
The publisher plugin of the transport produces ffmpeg image transport messages. These are raw, encoded packets that are then transmitted and decoded by the subscriber plugin of the transport. The transport library contains both the publisher(encoder) and subscriber(decoder) plugin and therefore must be installed on both sides to be useful.
To extract e.g. frames or an mp4 file from a recorded bag, have a look at the ffmpeg_image_transport_tools repository.
Supported systems
Continuous integration is tested under Ubuntu with the following ROS2 distros:
Installation
From packages
sudo apt-get install ros-${ROS_DISTRO}-ffmpeg-image-transport
From source
Set the following shell variables:
repo=ffmpeg_image_transport
url=https://github.com/ros-misc-utilities/${repo}.git
and follow the instructions here
Make sure to source your workspace’s install/setup.bash
afterwards.
If all goes well you should see the transport show up:
ros2 run image_transport list_transports
should give output (among other transport plugins):
"image_transport/ffmpeg"
- Provided by package: ffmpeg_image_transport
- Publisher:
This plugin encodes frames into ffmpeg compressed packets
- Subscriber:
This plugin decodes frames from ffmpeg compressed packets
Remember to install the plugin on both hosts, the one that is encoding and the one that is decoding (viewing).
Parameters
Publisher (camera driver)
Here is a list of the available encoding parameters:
-
encoding
: the libav (ffmpeg) encoder being used. The default islibx264
, which is on-CPU unaccelerated encoding. Depending on your hardware, your encoding options may include the hardware acceleratedh264_nvenc
orh264_vaapi
. You can list all available encoders withffmpeg --codecs
. In the h264 row, look for(encoders)
. -
preset
: default is empty (“”). Valid values can be for instanceslow
,ll
(low latency) etc. To find out what presets are available, run e.g.ffmpeg -hide_banner -f lavfi -i nullsrc -c:v libx264 -preset help -f mp4 - 2>&1
-
profile
: For instancebaseline
,main
. See the ffmpeg website. -
tune
: See the ffmpeg website. The default is empty(“”). -
gop_size
: The number of frames between keyframes. Default: 10. The larger this number the more latency you will have, but also the more efficient the compression becomes. -
bit_rate
: The max bit rate [in bits/s] that the encoding will target. Default is8242880
. -
crf
: Constant Rate Factor, affects the image quality. Value range is[0, 51]
;0
is lossless,23
is default,51
is worst quality. -
delay
: Not sure what it does, but doesn’t help with delay. Default is empty (“”). -
pixel_format
: Forces a different pixel format for internal conversions. Experimental, don’t use. -
qmax
: Max quantization rate. Defaults to 10. See ffmpeg documentation. The larger this number, the worse the image looks, and the more efficient the encoding. -
measure_performance
: For performance debugging (developers only). Defaults to false. -
performance_interval
: How many frames to wait between logging performance data.
The parameters are under the ffmpeg
variable block. If you launch
your publisher node (camera driver), you can give it a parameter list on the way like so:
parameters=[{'ffmpeg_image_transport.encoding': 'hevc_nvenc',
'ffmpeg_image_transport.profile': 'main',
'ffmpeg_image_transport.preset': 'll',
'ffmpeg_image_transport.gop_size': 15}]
See the example launch file for a V4L USB camera
Subscriber (viewer)
File truncated at 100 lines see the full file
Changelog for package ffmpeg_image_transport
2.0.3 (2025-05-26)
- avoid ament_target_dependencies
- Contributors: Bernd Pfrommer
2.0.2 (2025-03-30)
- fix bug: segfault when publish function pointer changes
- updated broken badge, fixed typo in readme
- Contributors: Bernd Pfrommer
2.0.1 (2025-03-17)
- fix bug that prevents compilation in humble
- Contributors: Bernd Pfrommer
2.0.0 (2025-03-15)
- use ffmpeg_encoder_decoder
- align parameter handling with compressed image transport
- point to new instructions
- Contributors: Bernd Pfrommer
1.0.2 (2025-03-07)
-
updated badges and fixed deprecation warnings (#36)
- updated badges and fixed deprecation warnings
- only use AV_FRAME_FLAG_KEY when available
-
Configurable CRF (#34)
- Added CRF support
* fixed gop parameter in the README examples ---------Co-authored-by: Alexey Shtern <<alexey.shtern@xtend.me>>
-
README: Add usage instructions for Jazzy The syntax mentioned in the README no longer works there.
-
fix typo in link
-
added documentation for enabling NVMPI on the jetson
-
Contributors: Alexey Shtern, Bernd Pfrommer, Danil Tolkachev, Michal Sojka
1.0.1 (2024-04-17)
- use appropriate header for cv_bridge
- added documentation and improved cmake exporting
- move encoder->decoder map to decoder for public use
- added frame delay control
- changed install directory so other pkgs can ament_target_depend on this library
- Contributors: Bernd Pfrommer, Toby Buckley
1.0.0 (2024-01-11)
- initial release of ROS2 package
- Contributors: Akshay Srinivasan, Bernd Pfrommer, Francesco Ferroni, Michal Sojka, akssri
Wiki Tutorials
Package Dependencies
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged ffmpeg_image_transport at Robotics Stack Exchange
![]() |
ffmpeg_image_transport package from ffmpeg_image_transport repoffmpeg_image_transport |
ROS Distro
|
Package Summary
Tags | No category tags. |
Version | 2.0.3 |
License | Apache-2 |
Build type | AMENT_CMAKE |
Use | RECOMMENDED |
Repository Summary
Checkout URI | https://github.com/ros-misc-utilities/ffmpeg_image_transport.git |
VCS Type | git |
VCS Version | release |
Last Updated | 2025-05-26 |
Dev Status | DEVELOPED |
CI status | No Continuous Integration |
Released | RELEASED |
Tags | No category tags. |
Contributing |
Help Wanted (0)
Good First Issues (0) Pull Requests to Review (0) |
Package Description
Additional Links
Maintainers
- Bernd Pfrommer
Authors
- Bernd Pfrommer
ROS2 image transport for ffmpeg/libav
This ROS2 image transport plugin supports encoding/decoding with the FFMpeg library, for example encoding h264 and h265 or HEVC, using Nvidia or other hardware acceleration when available.
The publisher plugin of the transport produces ffmpeg image transport messages. These are raw, encoded packets that are then transmitted and decoded by the subscriber plugin of the transport. The transport library contains both the publisher(encoder) and subscriber(decoder) plugin and therefore must be installed on both sides to be useful.
To extract e.g. frames or an mp4 file from a recorded bag, have a look at the ffmpeg_image_transport_tools repository.
Supported systems
Continuous integration is tested under Ubuntu with the following ROS2 distros:
Installation
From packages
sudo apt-get install ros-${ROS_DISTRO}-ffmpeg-image-transport
From source
Set the following shell variables:
repo=ffmpeg_image_transport
url=https://github.com/ros-misc-utilities/${repo}.git
and follow the instructions here
Make sure to source your workspace’s install/setup.bash
afterwards.
If all goes well you should see the transport show up:
ros2 run image_transport list_transports
should give output (among other transport plugins):
"image_transport/ffmpeg"
- Provided by package: ffmpeg_image_transport
- Publisher:
This plugin encodes frames into ffmpeg compressed packets
- Subscriber:
This plugin decodes frames from ffmpeg compressed packets
Remember to install the plugin on both hosts, the one that is encoding and the one that is decoding (viewing).
Parameters
Publisher (camera driver)
Here is a list of the available encoding parameters:
-
encoding
: the libav (ffmpeg) encoder being used. The default islibx264
, which is on-CPU unaccelerated encoding. Depending on your hardware, your encoding options may include the hardware acceleratedh264_nvenc
orh264_vaapi
. You can list all available encoders withffmpeg --codecs
. In the h264 row, look for(encoders)
. -
preset
: default is empty (“”). Valid values can be for instanceslow
,ll
(low latency) etc. To find out what presets are available, run e.g.ffmpeg -hide_banner -f lavfi -i nullsrc -c:v libx264 -preset help -f mp4 - 2>&1
-
profile
: For instancebaseline
,main
. See the ffmpeg website. -
tune
: See the ffmpeg website. The default is empty(“”). -
gop_size
: The number of frames between keyframes. Default: 10. The larger this number the more latency you will have, but also the more efficient the compression becomes. -
bit_rate
: The max bit rate [in bits/s] that the encoding will target. Default is8242880
. -
crf
: Constant Rate Factor, affects the image quality. Value range is[0, 51]
;0
is lossless,23
is default,51
is worst quality. -
delay
: Not sure what it does, but doesn’t help with delay. Default is empty (“”). -
pixel_format
: Forces a different pixel format for internal conversions. Experimental, don’t use. -
qmax
: Max quantization rate. Defaults to 10. See ffmpeg documentation. The larger this number, the worse the image looks, and the more efficient the encoding. -
measure_performance
: For performance debugging (developers only). Defaults to false. -
performance_interval
: How many frames to wait between logging performance data.
The parameters are under the ffmpeg
variable block. If you launch
your publisher node (camera driver), you can give it a parameter list on the way like so:
parameters=[{'ffmpeg_image_transport.encoding': 'hevc_nvenc',
'ffmpeg_image_transport.profile': 'main',
'ffmpeg_image_transport.preset': 'll',
'ffmpeg_image_transport.gop_size': 15}]
See the example launch file for a V4L USB camera
Subscriber (viewer)
File truncated at 100 lines see the full file
Changelog for package ffmpeg_image_transport
2.0.3 (2025-05-26)
- avoid ament_target_dependencies
- Contributors: Bernd Pfrommer
2.0.2 (2025-03-30)
- fix bug: segfault when publish function pointer changes
- updated broken badge, fixed typo in readme
- Contributors: Bernd Pfrommer
2.0.1 (2025-03-17)
- fix bug that prevents compilation in humble
- Contributors: Bernd Pfrommer
2.0.0 (2025-03-15)
- use ffmpeg_encoder_decoder
- align parameter handling with compressed image transport
- point to new instructions
- Contributors: Bernd Pfrommer
1.0.2 (2025-03-07)
-
updated badges and fixed deprecation warnings (#36)
- updated badges and fixed deprecation warnings
- only use AV_FRAME_FLAG_KEY when available
-
Configurable CRF (#34)
- Added CRF support
* fixed gop parameter in the README examples ---------Co-authored-by: Alexey Shtern <<alexey.shtern@xtend.me>>
-
README: Add usage instructions for Jazzy The syntax mentioned in the README no longer works there.
-
fix typo in link
-
added documentation for enabling NVMPI on the jetson
-
Contributors: Alexey Shtern, Bernd Pfrommer, Danil Tolkachev, Michal Sojka
1.0.1 (2024-04-17)
- use appropriate header for cv_bridge
- added documentation and improved cmake exporting
- move encoder->decoder map to decoder for public use
- added frame delay control
- changed install directory so other pkgs can ament_target_depend on this library
- Contributors: Bernd Pfrommer, Toby Buckley
1.0.0 (2024-01-11)
- initial release of ROS2 package
- Contributors: Akshay Srinivasan, Bernd Pfrommer, Francesco Ferroni, Michal Sojka, akssri
Wiki Tutorials
Package Dependencies
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged ffmpeg_image_transport at Robotics Stack Exchange
![]() |
ffmpeg_image_transport package from ffmpeg_image_transport repoffmpeg_image_transport |
ROS Distro
|
Package Summary
Tags | No category tags. |
Version | 2.0.3 |
License | Apache-2 |
Build type | AMENT_CMAKE |
Use | RECOMMENDED |
Repository Summary
Checkout URI | https://github.com/ros-misc-utilities/ffmpeg_image_transport.git |
VCS Type | git |
VCS Version | release |
Last Updated | 2025-05-26 |
Dev Status | DEVELOPED |
CI status | No Continuous Integration |
Released | RELEASED |
Tags | No category tags. |
Contributing |
Help Wanted (0)
Good First Issues (0) Pull Requests to Review (0) |
Package Description
Additional Links
Maintainers
- Bernd Pfrommer
Authors
- Bernd Pfrommer
ROS2 image transport for ffmpeg/libav
This ROS2 image transport plugin supports encoding/decoding with the FFMpeg library, for example encoding h264 and h265 or HEVC, using Nvidia or other hardware acceleration when available.
The publisher plugin of the transport produces ffmpeg image transport messages. These are raw, encoded packets that are then transmitted and decoded by the subscriber plugin of the transport. The transport library contains both the publisher(encoder) and subscriber(decoder) plugin and therefore must be installed on both sides to be useful.
To extract e.g. frames or an mp4 file from a recorded bag, have a look at the ffmpeg_image_transport_tools repository.
Supported systems
Continuous integration is tested under Ubuntu with the following ROS2 distros:
Installation
From packages
sudo apt-get install ros-${ROS_DISTRO}-ffmpeg-image-transport
From source
Set the following shell variables:
repo=ffmpeg_image_transport
url=https://github.com/ros-misc-utilities/${repo}.git
and follow the instructions here
Make sure to source your workspace’s install/setup.bash
afterwards.
If all goes well you should see the transport show up:
ros2 run image_transport list_transports
should give output (among other transport plugins):
"image_transport/ffmpeg"
- Provided by package: ffmpeg_image_transport
- Publisher:
This plugin encodes frames into ffmpeg compressed packets
- Subscriber:
This plugin decodes frames from ffmpeg compressed packets
Remember to install the plugin on both hosts, the one that is encoding and the one that is decoding (viewing).
Parameters
Publisher (camera driver)
Here is a list of the available encoding parameters:
-
encoding
: the libav (ffmpeg) encoder being used. The default islibx264
, which is on-CPU unaccelerated encoding. Depending on your hardware, your encoding options may include the hardware acceleratedh264_nvenc
orh264_vaapi
. You can list all available encoders withffmpeg --codecs
. In the h264 row, look for(encoders)
. -
preset
: default is empty (“”). Valid values can be for instanceslow
,ll
(low latency) etc. To find out what presets are available, run e.g.ffmpeg -hide_banner -f lavfi -i nullsrc -c:v libx264 -preset help -f mp4 - 2>&1
-
profile
: For instancebaseline
,main
. See the ffmpeg website. -
tune
: See the ffmpeg website. The default is empty(“”). -
gop_size
: The number of frames between keyframes. Default: 10. The larger this number the more latency you will have, but also the more efficient the compression becomes. -
bit_rate
: The max bit rate [in bits/s] that the encoding will target. Default is8242880
. -
crf
: Constant Rate Factor, affects the image quality. Value range is[0, 51]
;0
is lossless,23
is default,51
is worst quality. -
delay
: Not sure what it does, but doesn’t help with delay. Default is empty (“”). -
pixel_format
: Forces a different pixel format for internal conversions. Experimental, don’t use. -
qmax
: Max quantization rate. Defaults to 10. See ffmpeg documentation. The larger this number, the worse the image looks, and the more efficient the encoding. -
measure_performance
: For performance debugging (developers only). Defaults to false. -
performance_interval
: How many frames to wait between logging performance data.
The parameters are under the ffmpeg
variable block. If you launch
your publisher node (camera driver), you can give it a parameter list on the way like so:
parameters=[{'ffmpeg_image_transport.encoding': 'hevc_nvenc',
'ffmpeg_image_transport.profile': 'main',
'ffmpeg_image_transport.preset': 'll',
'ffmpeg_image_transport.gop_size': 15}]
See the example launch file for a V4L USB camera
Subscriber (viewer)
File truncated at 100 lines see the full file
Changelog for package ffmpeg_image_transport
2.0.3 (2025-05-26)
- avoid ament_target_dependencies
- Contributors: Bernd Pfrommer
2.0.2 (2025-03-30)
- fix bug: segfault when publish function pointer changes
- updated broken badge, fixed typo in readme
- Contributors: Bernd Pfrommer
2.0.1 (2025-03-17)
- fix bug that prevents compilation in humble
- Contributors: Bernd Pfrommer
2.0.0 (2025-03-15)
- use ffmpeg_encoder_decoder
- align parameter handling with compressed image transport
- point to new instructions
- Contributors: Bernd Pfrommer
1.0.2 (2025-03-07)
-
updated badges and fixed deprecation warnings (#36)
- updated badges and fixed deprecation warnings
- only use AV_FRAME_FLAG_KEY when available
-
Configurable CRF (#34)
- Added CRF support
* fixed gop parameter in the README examples ---------Co-authored-by: Alexey Shtern <<alexey.shtern@xtend.me>>
-
README: Add usage instructions for Jazzy The syntax mentioned in the README no longer works there.
-
fix typo in link
-
added documentation for enabling NVMPI on the jetson
-
Contributors: Alexey Shtern, Bernd Pfrommer, Danil Tolkachev, Michal Sojka
1.0.1 (2024-04-17)
- use appropriate header for cv_bridge
- added documentation and improved cmake exporting
- move encoder->decoder map to decoder for public use
- added frame delay control
- changed install directory so other pkgs can ament_target_depend on this library
- Contributors: Bernd Pfrommer, Toby Buckley
1.0.0 (2024-01-11)
- initial release of ROS2 package
- Contributors: Akshay Srinivasan, Bernd Pfrommer, Francesco Ferroni, Michal Sojka, akssri
Wiki Tutorials
Package Dependencies
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged ffmpeg_image_transport at Robotics Stack Exchange
![]() |
ffmpeg_image_transport package from ffmpeg_image_transport repoffmpeg_image_transport |
ROS Distro
|
Package Summary
Tags | No category tags. |
Version | 2.0.3 |
License | Apache-2 |
Build type | AMENT_CMAKE |
Use | RECOMMENDED |
Repository Summary
Checkout URI | https://github.com/ros-misc-utilities/ffmpeg_image_transport.git |
VCS Type | git |
VCS Version | release |
Last Updated | 2025-05-26 |
Dev Status | DEVELOPED |
CI status | No Continuous Integration |
Released | RELEASED |
Tags | No category tags. |
Contributing |
Help Wanted (0)
Good First Issues (0) Pull Requests to Review (0) |
Package Description
Additional Links
Maintainers
- Bernd Pfrommer
Authors
- Bernd Pfrommer
ROS2 image transport for ffmpeg/libav
This ROS2 image transport plugin supports encoding/decoding with the FFMpeg library, for example encoding h264 and h265 or HEVC, using Nvidia or other hardware acceleration when available.
The publisher plugin of the transport produces ffmpeg image transport messages. These are raw, encoded packets that are then transmitted and decoded by the subscriber plugin of the transport. The transport library contains both the publisher(encoder) and subscriber(decoder) plugin and therefore must be installed on both sides to be useful.
To extract e.g. frames or an mp4 file from a recorded bag, have a look at the ffmpeg_image_transport_tools repository.
Supported systems
Continuous integration is tested under Ubuntu with the following ROS2 distros:
Installation
From packages
sudo apt-get install ros-${ROS_DISTRO}-ffmpeg-image-transport
From source
Set the following shell variables:
repo=ffmpeg_image_transport
url=https://github.com/ros-misc-utilities/${repo}.git
and follow the instructions here
Make sure to source your workspace’s install/setup.bash
afterwards.
If all goes well you should see the transport show up:
ros2 run image_transport list_transports
should give output (among other transport plugins):
"image_transport/ffmpeg"
- Provided by package: ffmpeg_image_transport
- Publisher:
This plugin encodes frames into ffmpeg compressed packets
- Subscriber:
This plugin decodes frames from ffmpeg compressed packets
Remember to install the plugin on both hosts, the one that is encoding and the one that is decoding (viewing).
Parameters
Publisher (camera driver)
Here is a list of the available encoding parameters:
-
encoding
: the libav (ffmpeg) encoder being used. The default islibx264
, which is on-CPU unaccelerated encoding. Depending on your hardware, your encoding options may include the hardware acceleratedh264_nvenc
orh264_vaapi
. You can list all available encoders withffmpeg --codecs
. In the h264 row, look for(encoders)
. -
preset
: default is empty (“”). Valid values can be for instanceslow
,ll
(low latency) etc. To find out what presets are available, run e.g.ffmpeg -hide_banner -f lavfi -i nullsrc -c:v libx264 -preset help -f mp4 - 2>&1
-
profile
: For instancebaseline
,main
. See the ffmpeg website. -
tune
: See the ffmpeg website. The default is empty(“”). -
gop_size
: The number of frames between keyframes. Default: 10. The larger this number the more latency you will have, but also the more efficient the compression becomes. -
bit_rate
: The max bit rate [in bits/s] that the encoding will target. Default is8242880
. -
crf
: Constant Rate Factor, affects the image quality. Value range is[0, 51]
;0
is lossless,23
is default,51
is worst quality. -
delay
: Not sure what it does, but doesn’t help with delay. Default is empty (“”). -
pixel_format
: Forces a different pixel format for internal conversions. Experimental, don’t use. -
qmax
: Max quantization rate. Defaults to 10. See ffmpeg documentation. The larger this number, the worse the image looks, and the more efficient the encoding. -
measure_performance
: For performance debugging (developers only). Defaults to false. -
performance_interval
: How many frames to wait between logging performance data.
The parameters are under the ffmpeg
variable block. If you launch
your publisher node (camera driver), you can give it a parameter list on the way like so:
parameters=[{'ffmpeg_image_transport.encoding': 'hevc_nvenc',
'ffmpeg_image_transport.profile': 'main',
'ffmpeg_image_transport.preset': 'll',
'ffmpeg_image_transport.gop_size': 15}]
See the example launch file for a V4L USB camera
Subscriber (viewer)
File truncated at 100 lines see the full file
Changelog for package ffmpeg_image_transport
2.0.3 (2025-05-26)
- avoid ament_target_dependencies
- Contributors: Bernd Pfrommer
2.0.2 (2025-03-30)
- fix bug: segfault when publish function pointer changes
- updated broken badge, fixed typo in readme
- Contributors: Bernd Pfrommer
2.0.1 (2025-03-17)
- fix bug that prevents compilation in humble
- Contributors: Bernd Pfrommer
2.0.0 (2025-03-15)
- use ffmpeg_encoder_decoder
- align parameter handling with compressed image transport
- point to new instructions
- Contributors: Bernd Pfrommer
1.0.2 (2025-03-07)
-
updated badges and fixed deprecation warnings (#36)
- updated badges and fixed deprecation warnings
- only use AV_FRAME_FLAG_KEY when available
-
Configurable CRF (#34)
- Added CRF support
* fixed gop parameter in the README examples ---------Co-authored-by: Alexey Shtern <<alexey.shtern@xtend.me>>
-
README: Add usage instructions for Jazzy The syntax mentioned in the README no longer works there.
-
fix typo in link
-
added documentation for enabling NVMPI on the jetson
-
Contributors: Alexey Shtern, Bernd Pfrommer, Danil Tolkachev, Michal Sojka
1.0.1 (2024-04-17)
- use appropriate header for cv_bridge
- added documentation and improved cmake exporting
- move encoder->decoder map to decoder for public use
- added frame delay control
- changed install directory so other pkgs can ament_target_depend on this library
- Contributors: Bernd Pfrommer, Toby Buckley
1.0.0 (2024-01-11)
- initial release of ROS2 package
- Contributors: Akshay Srinivasan, Bernd Pfrommer, Francesco Ferroni, Michal Sojka, akssri
Wiki Tutorials
Package Dependencies
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged ffmpeg_image_transport at Robotics Stack Exchange
![]() |
ffmpeg_image_transport package from ffmpeg_image_transport repoffmpeg_image_transport |
ROS Distro
|
Package Summary
Tags | No category tags. |
Version | 2.0.3 |
License | Apache-2 |
Build type | AMENT_CMAKE |
Use | RECOMMENDED |
Repository Summary
Checkout URI | https://github.com/ros-misc-utilities/ffmpeg_image_transport.git |
VCS Type | git |
VCS Version | release |
Last Updated | 2025-05-26 |
Dev Status | DEVELOPED |
CI status | No Continuous Integration |
Released | RELEASED |
Tags | No category tags. |
Contributing |
Help Wanted (0)
Good First Issues (0) Pull Requests to Review (0) |
Package Description
Additional Links
Maintainers
- Bernd Pfrommer
Authors
- Bernd Pfrommer
ROS2 image transport for ffmpeg/libav
This ROS2 image transport plugin supports encoding/decoding with the FFMpeg library, for example encoding h264 and h265 or HEVC, using Nvidia or other hardware acceleration when available.
The publisher plugin of the transport produces ffmpeg image transport messages. These are raw, encoded packets that are then transmitted and decoded by the subscriber plugin of the transport. The transport library contains both the publisher(encoder) and subscriber(decoder) plugin and therefore must be installed on both sides to be useful.
To extract e.g. frames or an mp4 file from a recorded bag, have a look at the ffmpeg_image_transport_tools repository.
Supported systems
Continuous integration is tested under Ubuntu with the following ROS2 distros:
Installation
From packages
sudo apt-get install ros-${ROS_DISTRO}-ffmpeg-image-transport
From source
Set the following shell variables:
repo=ffmpeg_image_transport
url=https://github.com/ros-misc-utilities/${repo}.git
and follow the instructions here
Make sure to source your workspace’s install/setup.bash
afterwards.
If all goes well you should see the transport show up:
ros2 run image_transport list_transports
should give output (among other transport plugins):
"image_transport/ffmpeg"
- Provided by package: ffmpeg_image_transport
- Publisher:
This plugin encodes frames into ffmpeg compressed packets
- Subscriber:
This plugin decodes frames from ffmpeg compressed packets
Remember to install the plugin on both hosts, the one that is encoding and the one that is decoding (viewing).
Parameters
Publisher (camera driver)
Here is a list of the available encoding parameters:
-
encoding
: the libav (ffmpeg) encoder being used. The default islibx264
, which is on-CPU unaccelerated encoding. Depending on your hardware, your encoding options may include the hardware acceleratedh264_nvenc
orh264_vaapi
. You can list all available encoders withffmpeg --codecs
. In the h264 row, look for(encoders)
. -
preset
: default is empty (“”). Valid values can be for instanceslow
,ll
(low latency) etc. To find out what presets are available, run e.g.ffmpeg -hide_banner -f lavfi -i nullsrc -c:v libx264 -preset help -f mp4 - 2>&1
-
profile
: For instancebaseline
,main
. See the ffmpeg website. -
tune
: See the ffmpeg website. The default is empty(“”). -
gop_size
: The number of frames between keyframes. Default: 10. The larger this number the more latency you will have, but also the more efficient the compression becomes. -
bit_rate
: The max bit rate [in bits/s] that the encoding will target. Default is8242880
. -
crf
: Constant Rate Factor, affects the image quality. Value range is[0, 51]
;0
is lossless,23
is default,51
is worst quality. -
delay
: Not sure what it does, but doesn’t help with delay. Default is empty (“”). -
pixel_format
: Forces a different pixel format for internal conversions. Experimental, don’t use. -
qmax
: Max quantization rate. Defaults to 10. See ffmpeg documentation. The larger this number, the worse the image looks, and the more efficient the encoding. -
measure_performance
: For performance debugging (developers only). Defaults to false. -
performance_interval
: How many frames to wait between logging performance data.
The parameters are under the ffmpeg
variable block. If you launch
your publisher node (camera driver), you can give it a parameter list on the way like so:
parameters=[{'ffmpeg_image_transport.encoding': 'hevc_nvenc',
'ffmpeg_image_transport.profile': 'main',
'ffmpeg_image_transport.preset': 'll',
'ffmpeg_image_transport.gop_size': 15}]
See the example launch file for a V4L USB camera
Subscriber (viewer)
File truncated at 100 lines see the full file
Changelog for package ffmpeg_image_transport
2.0.3 (2025-05-26)
- avoid ament_target_dependencies
- Contributors: Bernd Pfrommer
2.0.2 (2025-03-30)
- fix bug: segfault when publish function pointer changes
- updated broken badge, fixed typo in readme
- Contributors: Bernd Pfrommer
2.0.1 (2025-03-17)
- fix bug that prevents compilation in humble
- Contributors: Bernd Pfrommer
2.0.0 (2025-03-15)
- use ffmpeg_encoder_decoder
- align parameter handling with compressed image transport
- point to new instructions
- Contributors: Bernd Pfrommer
1.0.2 (2025-03-07)
-
updated badges and fixed deprecation warnings (#36)
- updated badges and fixed deprecation warnings
- only use AV_FRAME_FLAG_KEY when available
-
Configurable CRF (#34)
- Added CRF support
* fixed gop parameter in the README examples ---------Co-authored-by: Alexey Shtern <<alexey.shtern@xtend.me>>
-
README: Add usage instructions for Jazzy The syntax mentioned in the README no longer works there.
-
fix typo in link
-
added documentation for enabling NVMPI on the jetson
-
Contributors: Alexey Shtern, Bernd Pfrommer, Danil Tolkachev, Michal Sojka
1.0.1 (2024-04-17)
- use appropriate header for cv_bridge
- added documentation and improved cmake exporting
- move encoder->decoder map to decoder for public use
- added frame delay control
- changed install directory so other pkgs can ament_target_depend on this library
- Contributors: Bernd Pfrommer, Toby Buckley
1.0.0 (2024-01-11)
- initial release of ROS2 package
- Contributors: Akshay Srinivasan, Bernd Pfrommer, Francesco Ferroni, Michal Sojka, akssri
Wiki Tutorials
Package Dependencies
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged ffmpeg_image_transport at Robotics Stack Exchange
![]() |
ffmpeg_image_transport package from ffmpeg_image_transport repoffmpeg_image_transport |
ROS Distro
|
Package Summary
Tags | No category tags. |
Version | 2.0.3 |
License | Apache-2 |
Build type | AMENT_CMAKE |
Use | RECOMMENDED |
Repository Summary
Checkout URI | https://github.com/ros-misc-utilities/ffmpeg_image_transport.git |
VCS Type | git |
VCS Version | release |
Last Updated | 2025-05-26 |
Dev Status | DEVELOPED |
CI status | No Continuous Integration |
Released | RELEASED |
Tags | No category tags. |
Contributing |
Help Wanted (0)
Good First Issues (0) Pull Requests to Review (0) |
Package Description
Additional Links
Maintainers
- Bernd Pfrommer
Authors
- Bernd Pfrommer
ROS2 image transport for ffmpeg/libav
This ROS2 image transport plugin supports encoding/decoding with the FFMpeg library, for example encoding h264 and h265 or HEVC, using Nvidia or other hardware acceleration when available.
The publisher plugin of the transport produces ffmpeg image transport messages. These are raw, encoded packets that are then transmitted and decoded by the subscriber plugin of the transport. The transport library contains both the publisher(encoder) and subscriber(decoder) plugin and therefore must be installed on both sides to be useful.
To extract e.g. frames or an mp4 file from a recorded bag, have a look at the ffmpeg_image_transport_tools repository.
Supported systems
Continuous integration is tested under Ubuntu with the following ROS2 distros:
Installation
From packages
sudo apt-get install ros-${ROS_DISTRO}-ffmpeg-image-transport
From source
Set the following shell variables:
repo=ffmpeg_image_transport
url=https://github.com/ros-misc-utilities/${repo}.git
and follow the instructions here
Make sure to source your workspace’s install/setup.bash
afterwards.
If all goes well you should see the transport show up:
ros2 run image_transport list_transports
should give output (among other transport plugins):
"image_transport/ffmpeg"
- Provided by package: ffmpeg_image_transport
- Publisher:
This plugin encodes frames into ffmpeg compressed packets
- Subscriber:
This plugin decodes frames from ffmpeg compressed packets
Remember to install the plugin on both hosts, the one that is encoding and the one that is decoding (viewing).
Parameters
Publisher (camera driver)
Here is a list of the available encoding parameters:
-
encoding
: the libav (ffmpeg) encoder being used. The default islibx264
, which is on-CPU unaccelerated encoding. Depending on your hardware, your encoding options may include the hardware acceleratedh264_nvenc
orh264_vaapi
. You can list all available encoders withffmpeg --codecs
. In the h264 row, look for(encoders)
. -
preset
: default is empty (“”). Valid values can be for instanceslow
,ll
(low latency) etc. To find out what presets are available, run e.g.ffmpeg -hide_banner -f lavfi -i nullsrc -c:v libx264 -preset help -f mp4 - 2>&1
-
profile
: For instancebaseline
,main
. See the ffmpeg website. -
tune
: See the ffmpeg website. The default is empty(“”). -
gop_size
: The number of frames between keyframes. Default: 10. The larger this number the more latency you will have, but also the more efficient the compression becomes. -
bit_rate
: The max bit rate [in bits/s] that the encoding will target. Default is8242880
. -
crf
: Constant Rate Factor, affects the image quality. Value range is[0, 51]
;0
is lossless,23
is default,51
is worst quality. -
delay
: Not sure what it does, but doesn’t help with delay. Default is empty (“”). -
pixel_format
: Forces a different pixel format for internal conversions. Experimental, don’t use. -
qmax
: Max quantization rate. Defaults to 10. See ffmpeg documentation. The larger this number, the worse the image looks, and the more efficient the encoding. -
measure_performance
: For performance debugging (developers only). Defaults to false. -
performance_interval
: How many frames to wait between logging performance data.
The parameters are under the ffmpeg
variable block. If you launch
your publisher node (camera driver), you can give it a parameter list on the way like so:
parameters=[{'ffmpeg_image_transport.encoding': 'hevc_nvenc',
'ffmpeg_image_transport.profile': 'main',
'ffmpeg_image_transport.preset': 'll',
'ffmpeg_image_transport.gop_size': 15}]
See the example launch file for a V4L USB camera
Subscriber (viewer)
File truncated at 100 lines see the full file
Changelog for package ffmpeg_image_transport
2.0.3 (2025-05-26)
- avoid ament_target_dependencies
- Contributors: Bernd Pfrommer
2.0.2 (2025-03-30)
- fix bug: segfault when publish function pointer changes
- updated broken badge, fixed typo in readme
- Contributors: Bernd Pfrommer
2.0.1 (2025-03-17)
- fix bug that prevents compilation in humble
- Contributors: Bernd Pfrommer
2.0.0 (2025-03-15)
- use ffmpeg_encoder_decoder
- align parameter handling with compressed image transport
- point to new instructions
- Contributors: Bernd Pfrommer
1.0.2 (2025-03-07)
-
updated badges and fixed deprecation warnings (#36)
- updated badges and fixed deprecation warnings
- only use AV_FRAME_FLAG_KEY when available
-
Configurable CRF (#34)
- Added CRF support
* fixed gop parameter in the README examples ---------Co-authored-by: Alexey Shtern <<alexey.shtern@xtend.me>>
-
README: Add usage instructions for Jazzy The syntax mentioned in the README no longer works there.
-
fix typo in link
-
added documentation for enabling NVMPI on the jetson
-
Contributors: Alexey Shtern, Bernd Pfrommer, Danil Tolkachev, Michal Sojka
1.0.1 (2024-04-17)
- use appropriate header for cv_bridge
- added documentation and improved cmake exporting
- move encoder->decoder map to decoder for public use
- added frame delay control
- changed install directory so other pkgs can ament_target_depend on this library
- Contributors: Bernd Pfrommer, Toby Buckley
1.0.0 (2024-01-11)
- initial release of ROS2 package
- Contributors: Akshay Srinivasan, Bernd Pfrommer, Francesco Ferroni, Michal Sojka, akssri
Wiki Tutorials
Package Dependencies
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged ffmpeg_image_transport at Robotics Stack Exchange
![]() |
ffmpeg_image_transport package from ffmpeg_image_transport repoffmpeg_image_transport |
ROS Distro
|
Package Summary
Tags | No category tags. |
Version | 2.0.3 |
License | Apache-2 |
Build type | AMENT_CMAKE |
Use | RECOMMENDED |
Repository Summary
Checkout URI | https://github.com/ros-misc-utilities/ffmpeg_image_transport.git |
VCS Type | git |
VCS Version | release |
Last Updated | 2025-05-26 |
Dev Status | DEVELOPED |
CI status | No Continuous Integration |
Released | RELEASED |
Tags | No category tags. |
Contributing |
Help Wanted (0)
Good First Issues (0) Pull Requests to Review (0) |
Package Description
Additional Links
Maintainers
- Bernd Pfrommer
Authors
- Bernd Pfrommer
ROS2 image transport for ffmpeg/libav
This ROS2 image transport plugin supports encoding/decoding with the FFMpeg library, for example encoding h264 and h265 or HEVC, using Nvidia or other hardware acceleration when available.
The publisher plugin of the transport produces ffmpeg image transport messages. These are raw, encoded packets that are then transmitted and decoded by the subscriber plugin of the transport. The transport library contains both the publisher(encoder) and subscriber(decoder) plugin and therefore must be installed on both sides to be useful.
To extract e.g. frames or an mp4 file from a recorded bag, have a look at the ffmpeg_image_transport_tools repository.
Supported systems
Continuous integration is tested under Ubuntu with the following ROS2 distros:
Installation
From packages
sudo apt-get install ros-${ROS_DISTRO}-ffmpeg-image-transport
From source
Set the following shell variables:
repo=ffmpeg_image_transport
url=https://github.com/ros-misc-utilities/${repo}.git
and follow the instructions here
Make sure to source your workspace’s install/setup.bash
afterwards.
If all goes well you should see the transport show up:
ros2 run image_transport list_transports
should give output (among other transport plugins):
"image_transport/ffmpeg"
- Provided by package: ffmpeg_image_transport
- Publisher:
This plugin encodes frames into ffmpeg compressed packets
- Subscriber:
This plugin decodes frames from ffmpeg compressed packets
Remember to install the plugin on both hosts, the one that is encoding and the one that is decoding (viewing).
Parameters
Publisher (camera driver)
Here is a list of the available encoding parameters:
-
encoding
: the libav (ffmpeg) encoder being used. The default islibx264
, which is on-CPU unaccelerated encoding. Depending on your hardware, your encoding options may include the hardware acceleratedh264_nvenc
orh264_vaapi
. You can list all available encoders withffmpeg --codecs
. In the h264 row, look for(encoders)
. -
preset
: default is empty (“”). Valid values can be for instanceslow
,ll
(low latency) etc. To find out what presets are available, run e.g.ffmpeg -hide_banner -f lavfi -i nullsrc -c:v libx264 -preset help -f mp4 - 2>&1
-
profile
: For instancebaseline
,main
. See the ffmpeg website. -
tune
: See the ffmpeg website. The default is empty(“”). -
gop_size
: The number of frames between keyframes. Default: 10. The larger this number the more latency you will have, but also the more efficient the compression becomes. -
bit_rate
: The max bit rate [in bits/s] that the encoding will target. Default is8242880
. -
crf
: Constant Rate Factor, affects the image quality. Value range is[0, 51]
;0
is lossless,23
is default,51
is worst quality. -
delay
: Not sure what it does, but doesn’t help with delay. Default is empty (“”). -
pixel_format
: Forces a different pixel format for internal conversions. Experimental, don’t use. -
qmax
: Max quantization rate. Defaults to 10. See ffmpeg documentation. The larger this number, the worse the image looks, and the more efficient the encoding. -
measure_performance
: For performance debugging (developers only). Defaults to false. -
performance_interval
: How many frames to wait between logging performance data.
The parameters are under the ffmpeg
variable block. If you launch
your publisher node (camera driver), you can give it a parameter list on the way like so:
parameters=[{'ffmpeg_image_transport.encoding': 'hevc_nvenc',
'ffmpeg_image_transport.profile': 'main',
'ffmpeg_image_transport.preset': 'll',
'ffmpeg_image_transport.gop_size': 15}]
See the example launch file for a V4L USB camera
Subscriber (viewer)
File truncated at 100 lines see the full file
Changelog for package ffmpeg_image_transport
2.0.3 (2025-05-26)
- avoid ament_target_dependencies
- Contributors: Bernd Pfrommer
2.0.2 (2025-03-30)
- fix bug: segfault when publish function pointer changes
- updated broken badge, fixed typo in readme
- Contributors: Bernd Pfrommer
2.0.1 (2025-03-17)
- fix bug that prevents compilation in humble
- Contributors: Bernd Pfrommer
2.0.0 (2025-03-15)
- use ffmpeg_encoder_decoder
- align parameter handling with compressed image transport
- point to new instructions
- Contributors: Bernd Pfrommer
1.0.2 (2025-03-07)
-
updated badges and fixed deprecation warnings (#36)
- updated badges and fixed deprecation warnings
- only use AV_FRAME_FLAG_KEY when available
-
Configurable CRF (#34)
- Added CRF support
* fixed gop parameter in the README examples ---------Co-authored-by: Alexey Shtern <<alexey.shtern@xtend.me>>
-
README: Add usage instructions for Jazzy The syntax mentioned in the README no longer works there.
-
fix typo in link
-
added documentation for enabling NVMPI on the jetson
-
Contributors: Alexey Shtern, Bernd Pfrommer, Danil Tolkachev, Michal Sojka
1.0.1 (2024-04-17)
- use appropriate header for cv_bridge
- added documentation and improved cmake exporting
- move encoder->decoder map to decoder for public use
- added frame delay control
- changed install directory so other pkgs can ament_target_depend on this library
- Contributors: Bernd Pfrommer, Toby Buckley
1.0.0 (2024-01-11)
- initial release of ROS2 package
- Contributors: Akshay Srinivasan, Bernd Pfrommer, Francesco Ferroni, Michal Sojka, akssri
Wiki Tutorials
Package Dependencies
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged ffmpeg_image_transport at Robotics Stack Exchange
![]() |
ffmpeg_image_transport package from ffmpeg_image_transport repoffmpeg_image_transport |
ROS Distro
|
Package Summary
Tags | No category tags. |
Version | 2.0.3 |
License | Apache-2 |
Build type | AMENT_CMAKE |
Use | RECOMMENDED |
Repository Summary
Checkout URI | https://github.com/ros-misc-utilities/ffmpeg_image_transport.git |
VCS Type | git |
VCS Version | release |
Last Updated | 2025-05-26 |
Dev Status | DEVELOPED |
CI status | No Continuous Integration |
Released | RELEASED |
Tags | No category tags. |
Contributing |
Help Wanted (0)
Good First Issues (0) Pull Requests to Review (0) |
Package Description
Additional Links
Maintainers
- Bernd Pfrommer
Authors
- Bernd Pfrommer
ROS2 image transport for ffmpeg/libav
This ROS2 image transport plugin supports encoding/decoding with the FFMpeg library, for example encoding h264 and h265 or HEVC, using Nvidia or other hardware acceleration when available.
The publisher plugin of the transport produces ffmpeg image transport messages. These are raw, encoded packets that are then transmitted and decoded by the subscriber plugin of the transport. The transport library contains both the publisher(encoder) and subscriber(decoder) plugin and therefore must be installed on both sides to be useful.
To extract e.g. frames or an mp4 file from a recorded bag, have a look at the ffmpeg_image_transport_tools repository.
Supported systems
Continuous integration is tested under Ubuntu with the following ROS2 distros:
Installation
From packages
sudo apt-get install ros-${ROS_DISTRO}-ffmpeg-image-transport
From source
Set the following shell variables:
repo=ffmpeg_image_transport
url=https://github.com/ros-misc-utilities/${repo}.git
and follow the instructions here
Make sure to source your workspace’s install/setup.bash
afterwards.
If all goes well you should see the transport show up:
ros2 run image_transport list_transports
should give output (among other transport plugins):
"image_transport/ffmpeg"
- Provided by package: ffmpeg_image_transport
- Publisher:
This plugin encodes frames into ffmpeg compressed packets
- Subscriber:
This plugin decodes frames from ffmpeg compressed packets
Remember to install the plugin on both hosts, the one that is encoding and the one that is decoding (viewing).
Parameters
Publisher (camera driver)
Here is a list of the available encoding parameters:
-
encoding
: the libav (ffmpeg) encoder being used. The default islibx264
, which is on-CPU unaccelerated encoding. Depending on your hardware, your encoding options may include the hardware acceleratedh264_nvenc
orh264_vaapi
. You can list all available encoders withffmpeg --codecs
. In the h264 row, look for(encoders)
. -
preset
: default is empty (“”). Valid values can be for instanceslow
,ll
(low latency) etc. To find out what presets are available, run e.g.ffmpeg -hide_banner -f lavfi -i nullsrc -c:v libx264 -preset help -f mp4 - 2>&1
-
profile
: For instancebaseline
,main
. See the ffmpeg website. -
tune
: See the ffmpeg website. The default is empty(“”). -
gop_size
: The number of frames between keyframes. Default: 10. The larger this number the more latency you will have, but also the more efficient the compression becomes. -
bit_rate
: The max bit rate [in bits/s] that the encoding will target. Default is8242880
. -
crf
: Constant Rate Factor, affects the image quality. Value range is[0, 51]
;0
is lossless,23
is default,51
is worst quality. -
delay
: Not sure what it does, but doesn’t help with delay. Default is empty (“”). -
pixel_format
: Forces a different pixel format for internal conversions. Experimental, don’t use. -
qmax
: Max quantization rate. Defaults to 10. See ffmpeg documentation. The larger this number, the worse the image looks, and the more efficient the encoding. -
measure_performance
: For performance debugging (developers only). Defaults to false. -
performance_interval
: How many frames to wait between logging performance data.
The parameters are under the ffmpeg
variable block. If you launch
your publisher node (camera driver), you can give it a parameter list on the way like so:
parameters=[{'ffmpeg_image_transport.encoding': 'hevc_nvenc',
'ffmpeg_image_transport.profile': 'main',
'ffmpeg_image_transport.preset': 'll',
'ffmpeg_image_transport.gop_size': 15}]
See the example launch file for a V4L USB camera
Subscriber (viewer)
File truncated at 100 lines see the full file
Changelog for package ffmpeg_image_transport
2.0.3 (2025-05-26)
- avoid ament_target_dependencies
- Contributors: Bernd Pfrommer
2.0.2 (2025-03-30)
- fix bug: segfault when publish function pointer changes
- updated broken badge, fixed typo in readme
- Contributors: Bernd Pfrommer
2.0.1 (2025-03-17)
- fix bug that prevents compilation in humble
- Contributors: Bernd Pfrommer
2.0.0 (2025-03-15)
- use ffmpeg_encoder_decoder
- align parameter handling with compressed image transport
- point to new instructions
- Contributors: Bernd Pfrommer
1.0.2 (2025-03-07)
-
updated badges and fixed deprecation warnings (#36)
- updated badges and fixed deprecation warnings
- only use AV_FRAME_FLAG_KEY when available
-
Configurable CRF (#34)
- Added CRF support
* fixed gop parameter in the README examples ---------Co-authored-by: Alexey Shtern <<alexey.shtern@xtend.me>>
-
README: Add usage instructions for Jazzy The syntax mentioned in the README no longer works there.
-
fix typo in link
-
added documentation for enabling NVMPI on the jetson
-
Contributors: Alexey Shtern, Bernd Pfrommer, Danil Tolkachev, Michal Sojka
1.0.1 (2024-04-17)
- use appropriate header for cv_bridge
- added documentation and improved cmake exporting
- move encoder->decoder map to decoder for public use
- added frame delay control
- changed install directory so other pkgs can ament_target_depend on this library
- Contributors: Bernd Pfrommer, Toby Buckley
1.0.0 (2024-01-11)
- initial release of ROS2 package
- Contributors: Akshay Srinivasan, Bernd Pfrommer, Francesco Ferroni, Michal Sojka, akssri
Wiki Tutorials
Package Dependencies
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged ffmpeg_image_transport at Robotics Stack Exchange
![]() |
ffmpeg_image_transport package from ffmpeg_image_transport repoffmpeg_image_transport |
ROS Distro
|
Package Summary
Tags | No category tags. |
Version | 2.0.3 |
License | Apache-2 |
Build type | AMENT_CMAKE |
Use | RECOMMENDED |
Repository Summary
Checkout URI | https://github.com/ros-misc-utilities/ffmpeg_image_transport.git |
VCS Type | git |
VCS Version | release |
Last Updated | 2025-05-26 |
Dev Status | DEVELOPED |
CI status | No Continuous Integration |
Released | RELEASED |
Tags | No category tags. |
Contributing |
Help Wanted (0)
Good First Issues (0) Pull Requests to Review (0) |
Package Description
Additional Links
Maintainers
- Bernd Pfrommer
Authors
- Bernd Pfrommer
ROS2 image transport for ffmpeg/libav
This ROS2 image transport plugin supports encoding/decoding with the FFMpeg library, for example encoding h264 and h265 or HEVC, using Nvidia or other hardware acceleration when available.
The publisher plugin of the transport produces ffmpeg image transport messages. These are raw, encoded packets that are then transmitted and decoded by the subscriber plugin of the transport. The transport library contains both the publisher(encoder) and subscriber(decoder) plugin and therefore must be installed on both sides to be useful.
To extract e.g. frames or an mp4 file from a recorded bag, have a look at the ffmpeg_image_transport_tools repository.
Supported systems
Continuous integration is tested under Ubuntu with the following ROS2 distros:
Installation
From packages
sudo apt-get install ros-${ROS_DISTRO}-ffmpeg-image-transport
From source
Set the following shell variables:
repo=ffmpeg_image_transport
url=https://github.com/ros-misc-utilities/${repo}.git
and follow the instructions here
Make sure to source your workspace’s install/setup.bash
afterwards.
If all goes well you should see the transport show up:
ros2 run image_transport list_transports
should give output (among other transport plugins):
"image_transport/ffmpeg"
- Provided by package: ffmpeg_image_transport
- Publisher:
This plugin encodes frames into ffmpeg compressed packets
- Subscriber:
This plugin decodes frames from ffmpeg compressed packets
Remember to install the plugin on both hosts, the one that is encoding and the one that is decoding (viewing).
Parameters
Publisher (camera driver)
Here is a list of the available encoding parameters:
-
encoding
: the libav (ffmpeg) encoder being used. The default islibx264
, which is on-CPU unaccelerated encoding. Depending on your hardware, your encoding options may include the hardware acceleratedh264_nvenc
orh264_vaapi
. You can list all available encoders withffmpeg --codecs
. In the h264 row, look for(encoders)
. -
preset
: default is empty (“”). Valid values can be for instanceslow
,ll
(low latency) etc. To find out what presets are available, run e.g.ffmpeg -hide_banner -f lavfi -i nullsrc -c:v libx264 -preset help -f mp4 - 2>&1
-
profile
: For instancebaseline
,main
. See the ffmpeg website. -
tune
: See the ffmpeg website. The default is empty(“”). -
gop_size
: The number of frames between keyframes. Default: 10. The larger this number the more latency you will have, but also the more efficient the compression becomes. -
bit_rate
: The max bit rate [in bits/s] that the encoding will target. Default is8242880
. -
crf
: Constant Rate Factor, affects the image quality. Value range is[0, 51]
;0
is lossless,23
is default,51
is worst quality. -
delay
: Not sure what it does, but doesn’t help with delay. Default is empty (“”). -
pixel_format
: Forces a different pixel format for internal conversions. Experimental, don’t use. -
qmax
: Max quantization rate. Defaults to 10. See ffmpeg documentation. The larger this number, the worse the image looks, and the more efficient the encoding. -
measure_performance
: For performance debugging (developers only). Defaults to false. -
performance_interval
: How many frames to wait between logging performance data.
The parameters are under the ffmpeg
variable block. If you launch
your publisher node (camera driver), you can give it a parameter list on the way like so:
parameters=[{'ffmpeg_image_transport.encoding': 'hevc_nvenc',
'ffmpeg_image_transport.profile': 'main',
'ffmpeg_image_transport.preset': 'll',
'ffmpeg_image_transport.gop_size': 15}]
See the example launch file for a V4L USB camera
Subscriber (viewer)
File truncated at 100 lines see the full file
Changelog for package ffmpeg_image_transport
2.0.3 (2025-05-26)
- avoid ament_target_dependencies
- Contributors: Bernd Pfrommer
2.0.2 (2025-03-30)
- fix bug: segfault when publish function pointer changes
- updated broken badge, fixed typo in readme
- Contributors: Bernd Pfrommer
2.0.1 (2025-03-17)
- fix bug that prevents compilation in humble
- Contributors: Bernd Pfrommer
2.0.0 (2025-03-15)
- use ffmpeg_encoder_decoder
- align parameter handling with compressed image transport
- point to new instructions
- Contributors: Bernd Pfrommer
1.0.2 (2025-03-07)
-
updated badges and fixed deprecation warnings (#36)
- updated badges and fixed deprecation warnings
- only use AV_FRAME_FLAG_KEY when available
-
Configurable CRF (#34)
- Added CRF support
* fixed gop parameter in the README examples ---------Co-authored-by: Alexey Shtern <<alexey.shtern@xtend.me>>
-
README: Add usage instructions for Jazzy The syntax mentioned in the README no longer works there.
-
fix typo in link
-
added documentation for enabling NVMPI on the jetson
-
Contributors: Alexey Shtern, Bernd Pfrommer, Danil Tolkachev, Michal Sojka
1.0.1 (2024-04-17)
- use appropriate header for cv_bridge
- added documentation and improved cmake exporting
- move encoder->decoder map to decoder for public use
- added frame delay control
- changed install directory so other pkgs can ament_target_depend on this library
- Contributors: Bernd Pfrommer, Toby Buckley
1.0.0 (2024-01-11)
- initial release of ROS2 package
- Contributors: Akshay Srinivasan, Bernd Pfrommer, Francesco Ferroni, Michal Sojka, akssri
Wiki Tutorials
Package Dependencies
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged ffmpeg_image_transport at Robotics Stack Exchange
![]() |
ffmpeg_image_transport package from ffmpeg_image_transport repoffmpeg_image_transport |
ROS Distro
|
Package Summary
Tags | No category tags. |
Version | 2.0.3 |
License | Apache-2 |
Build type | AMENT_CMAKE |
Use | RECOMMENDED |
Repository Summary
Checkout URI | https://github.com/ros-misc-utilities/ffmpeg_image_transport.git |
VCS Type | git |
VCS Version | release |
Last Updated | 2025-05-26 |
Dev Status | DEVELOPED |
CI status | No Continuous Integration |
Released | RELEASED |
Tags | No category tags. |
Contributing |
Help Wanted (0)
Good First Issues (0) Pull Requests to Review (0) |
Package Description
Additional Links
Maintainers
- Bernd Pfrommer
Authors
- Bernd Pfrommer
ROS2 image transport for ffmpeg/libav
This ROS2 image transport plugin supports encoding/decoding with the FFMpeg library, for example encoding h264 and h265 or HEVC, using Nvidia or other hardware acceleration when available.
The publisher plugin of the transport produces ffmpeg image transport messages. These are raw, encoded packets that are then transmitted and decoded by the subscriber plugin of the transport. The transport library contains both the publisher(encoder) and subscriber(decoder) plugin and therefore must be installed on both sides to be useful.
To extract e.g. frames or an mp4 file from a recorded bag, have a look at the ffmpeg_image_transport_tools repository.
Supported systems
Continuous integration is tested under Ubuntu with the following ROS2 distros:
Installation
From packages
sudo apt-get install ros-${ROS_DISTRO}-ffmpeg-image-transport
From source
Set the following shell variables:
repo=ffmpeg_image_transport
url=https://github.com/ros-misc-utilities/${repo}.git
and follow the instructions here
Make sure to source your workspace’s install/setup.bash
afterwards.
If all goes well you should see the transport show up:
ros2 run image_transport list_transports
should give output (among other transport plugins):
"image_transport/ffmpeg"
- Provided by package: ffmpeg_image_transport
- Publisher:
This plugin encodes frames into ffmpeg compressed packets
- Subscriber:
This plugin decodes frames from ffmpeg compressed packets
Remember to install the plugin on both hosts, the one that is encoding and the one that is decoding (viewing).
Parameters
Publisher (camera driver)
Here is a list of the available encoding parameters:
-
encoding
: the libav (ffmpeg) encoder being used. The default islibx264
, which is on-CPU unaccelerated encoding. Depending on your hardware, your encoding options may include the hardware acceleratedh264_nvenc
orh264_vaapi
. You can list all available encoders withffmpeg --codecs
. In the h264 row, look for(encoders)
. -
preset
: default is empty (“”). Valid values can be for instanceslow
,ll
(low latency) etc. To find out what presets are available, run e.g.ffmpeg -hide_banner -f lavfi -i nullsrc -c:v libx264 -preset help -f mp4 - 2>&1
-
profile
: For instancebaseline
,main
. See the ffmpeg website. -
tune
: See the ffmpeg website. The default is empty(“”). -
gop_size
: The number of frames between keyframes. Default: 10. The larger this number the more latency you will have, but also the more efficient the compression becomes. -
bit_rate
: The max bit rate [in bits/s] that the encoding will target. Default is8242880
. -
crf
: Constant Rate Factor, affects the image quality. Value range is[0, 51]
;0
is lossless,23
is default,51
is worst quality. -
delay
: Not sure what it does, but doesn’t help with delay. Default is empty (“”). -
pixel_format
: Forces a different pixel format for internal conversions. Experimental, don’t use. -
qmax
: Max quantization rate. Defaults to 10. See ffmpeg documentation. The larger this number, the worse the image looks, and the more efficient the encoding. -
measure_performance
: For performance debugging (developers only). Defaults to false. -
performance_interval
: How many frames to wait between logging performance data.
The parameters are under the ffmpeg
variable block. If you launch
your publisher node (camera driver), you can give it a parameter list on the way like so:
parameters=[{'ffmpeg_image_transport.encoding': 'hevc_nvenc',
'ffmpeg_image_transport.profile': 'main',
'ffmpeg_image_transport.preset': 'll',
'ffmpeg_image_transport.gop_size': 15}]
See the example launch file for a V4L USB camera
Subscriber (viewer)
File truncated at 100 lines see the full file
Changelog for package ffmpeg_image_transport
2.0.3 (2025-05-26)
- avoid ament_target_dependencies
- Contributors: Bernd Pfrommer
2.0.2 (2025-03-30)
- fix bug: segfault when publish function pointer changes
- updated broken badge, fixed typo in readme
- Contributors: Bernd Pfrommer
2.0.1 (2025-03-17)
- fix bug that prevents compilation in humble
- Contributors: Bernd Pfrommer
2.0.0 (2025-03-15)
- use ffmpeg_encoder_decoder
- align parameter handling with compressed image transport
- point to new instructions
- Contributors: Bernd Pfrommer
1.0.2 (2025-03-07)
-
updated badges and fixed deprecation warnings (#36)
- updated badges and fixed deprecation warnings
- only use AV_FRAME_FLAG_KEY when available
-
Configurable CRF (#34)
- Added CRF support
* fixed gop parameter in the README examples ---------Co-authored-by: Alexey Shtern <<alexey.shtern@xtend.me>>
-
README: Add usage instructions for Jazzy The syntax mentioned in the README no longer works there.
-
fix typo in link
-
added documentation for enabling NVMPI on the jetson
-
Contributors: Alexey Shtern, Bernd Pfrommer, Danil Tolkachev, Michal Sojka
1.0.1 (2024-04-17)
- use appropriate header for cv_bridge
- added documentation and improved cmake exporting
- move encoder->decoder map to decoder for public use
- added frame delay control
- changed install directory so other pkgs can ament_target_depend on this library
- Contributors: Bernd Pfrommer, Toby Buckley
1.0.0 (2024-01-11)
- initial release of ROS2 package
- Contributors: Akshay Srinivasan, Bernd Pfrommer, Francesco Ferroni, Michal Sojka, akssri
Wiki Tutorials
Package Dependencies
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged ffmpeg_image_transport at Robotics Stack Exchange
![]() |
ffmpeg_image_transport package from ffmpeg_image_transport repoffmpeg_image_transport |
ROS Distro
|
Package Summary
Tags | No category tags. |
Version | 2.0.3 |
License | Apache-2 |
Build type | AMENT_CMAKE |
Use | RECOMMENDED |
Repository Summary
Checkout URI | https://github.com/ros-misc-utilities/ffmpeg_image_transport.git |
VCS Type | git |
VCS Version | release |
Last Updated | 2025-05-26 |
Dev Status | DEVELOPED |
CI status | No Continuous Integration |
Released | RELEASED |
Tags | No category tags. |
Contributing |
Help Wanted (0)
Good First Issues (0) Pull Requests to Review (0) |
Package Description
Additional Links
Maintainers
- Bernd Pfrommer
Authors
- Bernd Pfrommer
ROS2 image transport for ffmpeg/libav
This ROS2 image transport plugin supports encoding/decoding with the FFMpeg library, for example encoding h264 and h265 or HEVC, using Nvidia or other hardware acceleration when available.
The publisher plugin of the transport produces ffmpeg image transport messages. These are raw, encoded packets that are then transmitted and decoded by the subscriber plugin of the transport. The transport library contains both the publisher(encoder) and subscriber(decoder) plugin and therefore must be installed on both sides to be useful.
To extract e.g. frames or an mp4 file from a recorded bag, have a look at the ffmpeg_image_transport_tools repository.
Supported systems
Continuous integration is tested under Ubuntu with the following ROS2 distros:
Installation
From packages
sudo apt-get install ros-${ROS_DISTRO}-ffmpeg-image-transport
From source
Set the following shell variables:
repo=ffmpeg_image_transport
url=https://github.com/ros-misc-utilities/${repo}.git
and follow the instructions here
Make sure to source your workspace’s install/setup.bash
afterwards.
If all goes well you should see the transport show up:
ros2 run image_transport list_transports
should give output (among other transport plugins):
"image_transport/ffmpeg"
- Provided by package: ffmpeg_image_transport
- Publisher:
This plugin encodes frames into ffmpeg compressed packets
- Subscriber:
This plugin decodes frames from ffmpeg compressed packets
Remember to install the plugin on both hosts, the one that is encoding and the one that is decoding (viewing).
Parameters
Publisher (camera driver)
Here is a list of the available encoding parameters:
-
encoding
: the libav (ffmpeg) encoder being used. The default islibx264
, which is on-CPU unaccelerated encoding. Depending on your hardware, your encoding options may include the hardware acceleratedh264_nvenc
orh264_vaapi
. You can list all available encoders withffmpeg --codecs
. In the h264 row, look for(encoders)
. -
preset
: default is empty (“”). Valid values can be for instanceslow
,ll
(low latency) etc. To find out what presets are available, run e.g.ffmpeg -hide_banner -f lavfi -i nullsrc -c:v libx264 -preset help -f mp4 - 2>&1
-
profile
: For instancebaseline
,main
. See the ffmpeg website. -
tune
: See the ffmpeg website. The default is empty(“”). -
gop_size
: The number of frames between keyframes. Default: 10. The larger this number the more latency you will have, but also the more efficient the compression becomes. -
bit_rate
: The max bit rate [in bits/s] that the encoding will target. Default is8242880
. -
crf
: Constant Rate Factor, affects the image quality. Value range is[0, 51]
;0
is lossless,23
is default,51
is worst quality. -
delay
: Not sure what it does, but doesn’t help with delay. Default is empty (“”). -
pixel_format
: Forces a different pixel format for internal conversions. Experimental, don’t use. -
qmax
: Max quantization rate. Defaults to 10. See ffmpeg documentation. The larger this number, the worse the image looks, and the more efficient the encoding. -
measure_performance
: For performance debugging (developers only). Defaults to false. -
performance_interval
: How many frames to wait between logging performance data.
The parameters are under the ffmpeg
variable block. If you launch
your publisher node (camera driver), you can give it a parameter list on the way like so:
parameters=[{'ffmpeg_image_transport.encoding': 'hevc_nvenc',
'ffmpeg_image_transport.profile': 'main',
'ffmpeg_image_transport.preset': 'll',
'ffmpeg_image_transport.gop_size': 15}]
See the example launch file for a V4L USB camera
Subscriber (viewer)
File truncated at 100 lines see the full file
Changelog for package ffmpeg_image_transport
2.0.3 (2025-05-26)
- avoid ament_target_dependencies
- Contributors: Bernd Pfrommer
2.0.2 (2025-03-30)
- fix bug: segfault when publish function pointer changes
- updated broken badge, fixed typo in readme
- Contributors: Bernd Pfrommer
2.0.1 (2025-03-17)
- fix bug that prevents compilation in humble
- Contributors: Bernd Pfrommer
2.0.0 (2025-03-15)
- use ffmpeg_encoder_decoder
- align parameter handling with compressed image transport
- point to new instructions
- Contributors: Bernd Pfrommer
1.0.2 (2025-03-07)
-
updated badges and fixed deprecation warnings (#36)
- updated badges and fixed deprecation warnings
- only use AV_FRAME_FLAG_KEY when available
-
Configurable CRF (#34)
- Added CRF support
* fixed gop parameter in the README examples ---------Co-authored-by: Alexey Shtern <<alexey.shtern@xtend.me>>
-
README: Add usage instructions for Jazzy The syntax mentioned in the README no longer works there.
-
fix typo in link
-
added documentation for enabling NVMPI on the jetson
-
Contributors: Alexey Shtern, Bernd Pfrommer, Danil Tolkachev, Michal Sojka
1.0.1 (2024-04-17)
- use appropriate header for cv_bridge
- added documentation and improved cmake exporting
- move encoder->decoder map to decoder for public use
- added frame delay control
- changed install directory so other pkgs can ament_target_depend on this library
- Contributors: Bernd Pfrommer, Toby Buckley
1.0.0 (2024-01-11)
- initial release of ROS2 package
- Contributors: Akshay Srinivasan, Bernd Pfrommer, Francesco Ferroni, Michal Sojka, akssri
Wiki Tutorials
Package Dependencies
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged ffmpeg_image_transport at Robotics Stack Exchange
![]() |
ffmpeg_image_transport package from ffmpeg_image_transport repoffmpeg_image_transport |
ROS Distro
|
Package Summary
Tags | No category tags. |
Version | 2.0.3 |
License | Apache-2 |
Build type | AMENT_CMAKE |
Use | RECOMMENDED |
Repository Summary
Checkout URI | https://github.com/ros-misc-utilities/ffmpeg_image_transport.git |
VCS Type | git |
VCS Version | release |
Last Updated | 2025-05-26 |
Dev Status | DEVELOPED |
CI status | No Continuous Integration |
Released | RELEASED |
Tags | No category tags. |
Contributing |
Help Wanted (0)
Good First Issues (0) Pull Requests to Review (0) |
Package Description
Additional Links
Maintainers
- Bernd Pfrommer
Authors
- Bernd Pfrommer
ROS2 image transport for ffmpeg/libav
This ROS2 image transport plugin supports encoding/decoding with the FFMpeg library, for example encoding h264 and h265 or HEVC, using Nvidia or other hardware acceleration when available.
The publisher plugin of the transport produces ffmpeg image transport messages. These are raw, encoded packets that are then transmitted and decoded by the subscriber plugin of the transport. The transport library contains both the publisher(encoder) and subscriber(decoder) plugin and therefore must be installed on both sides to be useful.
To extract e.g. frames or an mp4 file from a recorded bag, have a look at the ffmpeg_image_transport_tools repository.
Supported systems
Continuous integration is tested under Ubuntu with the following ROS2 distros:
Installation
From packages
sudo apt-get install ros-${ROS_DISTRO}-ffmpeg-image-transport
From source
Set the following shell variables:
repo=ffmpeg_image_transport
url=https://github.com/ros-misc-utilities/${repo}.git
and follow the instructions here
Make sure to source your workspace’s install/setup.bash
afterwards.
If all goes well you should see the transport show up:
ros2 run image_transport list_transports
should give output (among other transport plugins):
"image_transport/ffmpeg"
- Provided by package: ffmpeg_image_transport
- Publisher:
This plugin encodes frames into ffmpeg compressed packets
- Subscriber:
This plugin decodes frames from ffmpeg compressed packets
Remember to install the plugin on both hosts, the one that is encoding and the one that is decoding (viewing).
Parameters
Publisher (camera driver)
Here is a list of the available encoding parameters:
-
encoding
: the libav (ffmpeg) encoder being used. The default islibx264
, which is on-CPU unaccelerated encoding. Depending on your hardware, your encoding options may include the hardware acceleratedh264_nvenc
orh264_vaapi
. You can list all available encoders withffmpeg --codecs
. In the h264 row, look for(encoders)
. -
preset
: default is empty (“”). Valid values can be for instanceslow
,ll
(low latency) etc. To find out what presets are available, run e.g.ffmpeg -hide_banner -f lavfi -i nullsrc -c:v libx264 -preset help -f mp4 - 2>&1
-
profile
: For instancebaseline
,main
. See the ffmpeg website. -
tune
: See the ffmpeg website. The default is empty(“”). -
gop_size
: The number of frames between keyframes. Default: 10. The larger this number the more latency you will have, but also the more efficient the compression becomes. -
bit_rate
: The max bit rate [in bits/s] that the encoding will target. Default is8242880
. -
crf
: Constant Rate Factor, affects the image quality. Value range is[0, 51]
;0
is lossless,23
is default,51
is worst quality. -
delay
: Not sure what it does, but doesn’t help with delay. Default is empty (“”). -
pixel_format
: Forces a different pixel format for internal conversions. Experimental, don’t use. -
qmax
: Max quantization rate. Defaults to 10. See ffmpeg documentation. The larger this number, the worse the image looks, and the more efficient the encoding. -
measure_performance
: For performance debugging (developers only). Defaults to false. -
performance_interval
: How many frames to wait between logging performance data.
The parameters are under the ffmpeg
variable block. If you launch
your publisher node (camera driver), you can give it a parameter list on the way like so:
parameters=[{'ffmpeg_image_transport.encoding': 'hevc_nvenc',
'ffmpeg_image_transport.profile': 'main',
'ffmpeg_image_transport.preset': 'll',
'ffmpeg_image_transport.gop_size': 15}]
See the example launch file for a V4L USB camera
Subscriber (viewer)
File truncated at 100 lines see the full file
Changelog for package ffmpeg_image_transport
2.0.3 (2025-05-26)
- avoid ament_target_dependencies
- Contributors: Bernd Pfrommer
2.0.2 (2025-03-30)
- fix bug: segfault when publish function pointer changes
- updated broken badge, fixed typo in readme
- Contributors: Bernd Pfrommer
2.0.1 (2025-03-17)
- fix bug that prevents compilation in humble
- Contributors: Bernd Pfrommer
2.0.0 (2025-03-15)
- use ffmpeg_encoder_decoder
- align parameter handling with compressed image transport
- point to new instructions
- Contributors: Bernd Pfrommer
1.0.2 (2025-03-07)
-
updated badges and fixed deprecation warnings (#36)
- updated badges and fixed deprecation warnings
- only use AV_FRAME_FLAG_KEY when available
-
Configurable CRF (#34)
- Added CRF support
* fixed gop parameter in the README examples ---------Co-authored-by: Alexey Shtern <<alexey.shtern@xtend.me>>
-
README: Add usage instructions for Jazzy The syntax mentioned in the README no longer works there.
-
fix typo in link
-
added documentation for enabling NVMPI on the jetson
-
Contributors: Alexey Shtern, Bernd Pfrommer, Danil Tolkachev, Michal Sojka
1.0.1 (2024-04-17)
- use appropriate header for cv_bridge
- added documentation and improved cmake exporting
- move encoder->decoder map to decoder for public use
- added frame delay control
- changed install directory so other pkgs can ament_target_depend on this library
- Contributors: Bernd Pfrommer, Toby Buckley
1.0.0 (2024-01-11)
- initial release of ROS2 package
- Contributors: Akshay Srinivasan, Bernd Pfrommer, Francesco Ferroni, Michal Sojka, akssri
Wiki Tutorials
Package Dependencies
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged ffmpeg_image_transport at Robotics Stack Exchange
![]() |
ffmpeg_image_transport package from ffmpeg_image_transport repoffmpeg_image_transport |
ROS Distro
|
Package Summary
Tags | No category tags. |
Version | 2.0.3 |
License | Apache-2 |
Build type | AMENT_CMAKE |
Use | RECOMMENDED |
Repository Summary
Checkout URI | https://github.com/ros-misc-utilities/ffmpeg_image_transport.git |
VCS Type | git |
VCS Version | release |
Last Updated | 2025-05-26 |
Dev Status | DEVELOPED |
CI status | No Continuous Integration |
Released | RELEASED |
Tags | No category tags. |
Contributing |
Help Wanted (0)
Good First Issues (0) Pull Requests to Review (0) |
Package Description
Additional Links
Maintainers
- Bernd Pfrommer
Authors
- Bernd Pfrommer
ROS2 image transport for ffmpeg/libav
This ROS2 image transport plugin supports encoding/decoding with the FFMpeg library, for example encoding h264 and h265 or HEVC, using Nvidia or other hardware acceleration when available.
The publisher plugin of the transport produces ffmpeg image transport messages. These are raw, encoded packets that are then transmitted and decoded by the subscriber plugin of the transport. The transport library contains both the publisher(encoder) and subscriber(decoder) plugin and therefore must be installed on both sides to be useful.
To extract e.g. frames or an mp4 file from a recorded bag, have a look at the ffmpeg_image_transport_tools repository.
Supported systems
Continuous integration is tested under Ubuntu with the following ROS2 distros:
Installation
From packages
sudo apt-get install ros-${ROS_DISTRO}-ffmpeg-image-transport
From source
Set the following shell variables:
repo=ffmpeg_image_transport
url=https://github.com/ros-misc-utilities/${repo}.git
and follow the instructions here
Make sure to source your workspace’s install/setup.bash
afterwards.
If all goes well you should see the transport show up:
ros2 run image_transport list_transports
should give output (among other transport plugins):
"image_transport/ffmpeg"
- Provided by package: ffmpeg_image_transport
- Publisher:
This plugin encodes frames into ffmpeg compressed packets
- Subscriber:
This plugin decodes frames from ffmpeg compressed packets
Remember to install the plugin on both hosts, the one that is encoding and the one that is decoding (viewing).
Parameters
Publisher (camera driver)
Here is a list of the available encoding parameters:
-
encoding
: the libav (ffmpeg) encoder being used. The default islibx264
, which is on-CPU unaccelerated encoding. Depending on your hardware, your encoding options may include the hardware acceleratedh264_nvenc
orh264_vaapi
. You can list all available encoders withffmpeg --codecs
. In the h264 row, look for(encoders)
. -
preset
: default is empty (“”). Valid values can be for instanceslow
,ll
(low latency) etc. To find out what presets are available, run e.g.ffmpeg -hide_banner -f lavfi -i nullsrc -c:v libx264 -preset help -f mp4 - 2>&1
-
profile
: For instancebaseline
,main
. See the ffmpeg website. -
tune
: See the ffmpeg website. The default is empty(“”). -
gop_size
: The number of frames between keyframes. Default: 10. The larger this number the more latency you will have, but also the more efficient the compression becomes. -
bit_rate
: The max bit rate [in bits/s] that the encoding will target. Default is8242880
. -
crf
: Constant Rate Factor, affects the image quality. Value range is[0, 51]
;0
is lossless,23
is default,51
is worst quality. -
delay
: Not sure what it does, but doesn’t help with delay. Default is empty (“”). -
pixel_format
: Forces a different pixel format for internal conversions. Experimental, don’t use. -
qmax
: Max quantization rate. Defaults to 10. See ffmpeg documentation. The larger this number, the worse the image looks, and the more efficient the encoding. -
measure_performance
: For performance debugging (developers only). Defaults to false. -
performance_interval
: How many frames to wait between logging performance data.
The parameters are under the ffmpeg
variable block. If you launch
your publisher node (camera driver), you can give it a parameter list on the way like so:
parameters=[{'ffmpeg_image_transport.encoding': 'hevc_nvenc',
'ffmpeg_image_transport.profile': 'main',
'ffmpeg_image_transport.preset': 'll',
'ffmpeg_image_transport.gop_size': 15}]
See the example launch file for a V4L USB camera
Subscriber (viewer)
File truncated at 100 lines see the full file
Changelog for package ffmpeg_image_transport
2.0.3 (2025-05-26)
- avoid ament_target_dependencies
- Contributors: Bernd Pfrommer
2.0.2 (2025-03-30)
- fix bug: segfault when publish function pointer changes
- updated broken badge, fixed typo in readme
- Contributors: Bernd Pfrommer
2.0.1 (2025-03-17)
- fix bug that prevents compilation in humble
- Contributors: Bernd Pfrommer
2.0.0 (2025-03-15)
- use ffmpeg_encoder_decoder
- align parameter handling with compressed image transport
- point to new instructions
- Contributors: Bernd Pfrommer
1.0.2 (2025-03-07)
-
updated badges and fixed deprecation warnings (#36)
- updated badges and fixed deprecation warnings
- only use AV_FRAME_FLAG_KEY when available
-
Configurable CRF (#34)
- Added CRF support
* fixed gop parameter in the README examples ---------Co-authored-by: Alexey Shtern <<alexey.shtern@xtend.me>>
-
README: Add usage instructions for Jazzy The syntax mentioned in the README no longer works there.
-
fix typo in link
-
added documentation for enabling NVMPI on the jetson
-
Contributors: Alexey Shtern, Bernd Pfrommer, Danil Tolkachev, Michal Sojka
1.0.1 (2024-04-17)
- use appropriate header for cv_bridge
- added documentation and improved cmake exporting
- move encoder->decoder map to decoder for public use
- added frame delay control
- changed install directory so other pkgs can ament_target_depend on this library
- Contributors: Bernd Pfrommer, Toby Buckley
1.0.0 (2024-01-11)
- initial release of ROS2 package
- Contributors: Akshay Srinivasan, Bernd Pfrommer, Francesco Ferroni, Michal Sojka, akssri
Wiki Tutorials
Package Dependencies
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged ffmpeg_image_transport at Robotics Stack Exchange
![]() |
ffmpeg_image_transport package from ffmpeg_image_transport repoffmpeg_image_transport |
ROS Distro
|
Package Summary
Tags | No category tags. |
Version | 2.0.3 |
License | Apache-2 |
Build type | AMENT_CMAKE |
Use | RECOMMENDED |
Repository Summary
Checkout URI | https://github.com/ros-misc-utilities/ffmpeg_image_transport.git |
VCS Type | git |
VCS Version | release |
Last Updated | 2025-05-26 |
Dev Status | DEVELOPED |
CI status | No Continuous Integration |
Released | RELEASED |
Tags | No category tags. |
Contributing |
Help Wanted (0)
Good First Issues (0) Pull Requests to Review (0) |
Package Description
Additional Links
Maintainers
- Bernd Pfrommer
Authors
- Bernd Pfrommer
ROS2 image transport for ffmpeg/libav
This ROS2 image transport plugin supports encoding/decoding with the FFMpeg library, for example encoding h264 and h265 or HEVC, using Nvidia or other hardware acceleration when available.
The publisher plugin of the transport produces ffmpeg image transport messages. These are raw, encoded packets that are then transmitted and decoded by the subscriber plugin of the transport. The transport library contains both the publisher(encoder) and subscriber(decoder) plugin and therefore must be installed on both sides to be useful.
To extract e.g. frames or an mp4 file from a recorded bag, have a look at the ffmpeg_image_transport_tools repository.
Supported systems
Continuous integration is tested under Ubuntu with the following ROS2 distros:
Installation
From packages
sudo apt-get install ros-${ROS_DISTRO}-ffmpeg-image-transport
From source
Set the following shell variables:
repo=ffmpeg_image_transport
url=https://github.com/ros-misc-utilities/${repo}.git
and follow the instructions here
Make sure to source your workspace’s install/setup.bash
afterwards.
If all goes well you should see the transport show up:
ros2 run image_transport list_transports
should give output (among other transport plugins):
"image_transport/ffmpeg"
- Provided by package: ffmpeg_image_transport
- Publisher:
This plugin encodes frames into ffmpeg compressed packets
- Subscriber:
This plugin decodes frames from ffmpeg compressed packets
Remember to install the plugin on both hosts, the one that is encoding and the one that is decoding (viewing).
Parameters
Publisher (camera driver)
Here is a list of the available encoding parameters:
-
encoding
: the libav (ffmpeg) encoder being used. The default islibx264
, which is on-CPU unaccelerated encoding. Depending on your hardware, your encoding options may include the hardware acceleratedh264_nvenc
orh264_vaapi
. You can list all available encoders withffmpeg --codecs
. In the h264 row, look for(encoders)
. -
preset
: default is empty (“”). Valid values can be for instanceslow
,ll
(low latency) etc. To find out what presets are available, run e.g.ffmpeg -hide_banner -f lavfi -i nullsrc -c:v libx264 -preset help -f mp4 - 2>&1
-
profile
: For instancebaseline
,main
. See the ffmpeg website. -
tune
: See the ffmpeg website. The default is empty(“”). -
gop_size
: The number of frames between keyframes. Default: 10. The larger this number the more latency you will have, but also the more efficient the compression becomes. -
bit_rate
: The max bit rate [in bits/s] that the encoding will target. Default is8242880
. -
crf
: Constant Rate Factor, affects the image quality. Value range is[0, 51]
;0
is lossless,23
is default,51
is worst quality. -
delay
: Not sure what it does, but doesn’t help with delay. Default is empty (“”). -
pixel_format
: Forces a different pixel format for internal conversions. Experimental, don’t use. -
qmax
: Max quantization rate. Defaults to 10. See ffmpeg documentation. The larger this number, the worse the image looks, and the more efficient the encoding. -
measure_performance
: For performance debugging (developers only). Defaults to false. -
performance_interval
: How many frames to wait between logging performance data.
The parameters are under the ffmpeg
variable block. If you launch
your publisher node (camera driver), you can give it a parameter list on the way like so:
parameters=[{'ffmpeg_image_transport.encoding': 'hevc_nvenc',
'ffmpeg_image_transport.profile': 'main',
'ffmpeg_image_transport.preset': 'll',
'ffmpeg_image_transport.gop_size': 15}]
See the example launch file for a V4L USB camera
Subscriber (viewer)
File truncated at 100 lines see the full file
Changelog for package ffmpeg_image_transport
2.0.3 (2025-05-26)
- avoid ament_target_dependencies
- Contributors: Bernd Pfrommer
2.0.2 (2025-03-30)
- fix bug: segfault when publish function pointer changes
- updated broken badge, fixed typo in readme
- Contributors: Bernd Pfrommer
2.0.1 (2025-03-17)
- fix bug that prevents compilation in humble
- Contributors: Bernd Pfrommer
2.0.0 (2025-03-15)
- use ffmpeg_encoder_decoder
- align parameter handling with compressed image transport
- point to new instructions
- Contributors: Bernd Pfrommer
1.0.2 (2025-03-07)
-
updated badges and fixed deprecation warnings (#36)
- updated badges and fixed deprecation warnings
- only use AV_FRAME_FLAG_KEY when available
-
Configurable CRF (#34)
- Added CRF support
* fixed gop parameter in the README examples ---------Co-authored-by: Alexey Shtern <<alexey.shtern@xtend.me>>
-
README: Add usage instructions for Jazzy The syntax mentioned in the README no longer works there.
-
fix typo in link
-
added documentation for enabling NVMPI on the jetson
-
Contributors: Alexey Shtern, Bernd Pfrommer, Danil Tolkachev, Michal Sojka
1.0.1 (2024-04-17)
- use appropriate header for cv_bridge
- added documentation and improved cmake exporting
- move encoder->decoder map to decoder for public use
- added frame delay control
- changed install directory so other pkgs can ament_target_depend on this library
- Contributors: Bernd Pfrommer, Toby Buckley
1.0.0 (2024-01-11)
- initial release of ROS2 package
- Contributors: Akshay Srinivasan, Bernd Pfrommer, Francesco Ferroni, Michal Sojka, akssri
Wiki Tutorials
Package Dependencies
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged ffmpeg_image_transport at Robotics Stack Exchange
![]() |
ffmpeg_image_transport package from ffmpeg_image_transport repoffmpeg_image_transport |
ROS Distro
|
Package Summary
Tags | No category tags. |
Version | 2.0.3 |
License | Apache-2 |
Build type | AMENT_CMAKE |
Use | RECOMMENDED |
Repository Summary
Checkout URI | https://github.com/ros-misc-utilities/ffmpeg_image_transport.git |
VCS Type | git |
VCS Version | release |
Last Updated | 2025-05-26 |
Dev Status | DEVELOPED |
CI status | No Continuous Integration |
Released | RELEASED |
Tags | No category tags. |
Contributing |
Help Wanted (0)
Good First Issues (0) Pull Requests to Review (0) |
Package Description
Additional Links
Maintainers
- Bernd Pfrommer
Authors
- Bernd Pfrommer
ROS2 image transport for ffmpeg/libav
This ROS2 image transport plugin supports encoding/decoding with the FFMpeg library, for example encoding h264 and h265 or HEVC, using Nvidia or other hardware acceleration when available.
The publisher plugin of the transport produces ffmpeg image transport messages. These are raw, encoded packets that are then transmitted and decoded by the subscriber plugin of the transport. The transport library contains both the publisher(encoder) and subscriber(decoder) plugin and therefore must be installed on both sides to be useful.
To extract e.g. frames or an mp4 file from a recorded bag, have a look at the ffmpeg_image_transport_tools repository.
Supported systems
Continuous integration is tested under Ubuntu with the following ROS2 distros:
Installation
From packages
sudo apt-get install ros-${ROS_DISTRO}-ffmpeg-image-transport
From source
Set the following shell variables:
repo=ffmpeg_image_transport
url=https://github.com/ros-misc-utilities/${repo}.git
and follow the instructions here
Make sure to source your workspace’s install/setup.bash
afterwards.
If all goes well you should see the transport show up:
ros2 run image_transport list_transports
should give output (among other transport plugins):
"image_transport/ffmpeg"
- Provided by package: ffmpeg_image_transport
- Publisher:
This plugin encodes frames into ffmpeg compressed packets
- Subscriber:
This plugin decodes frames from ffmpeg compressed packets
Remember to install the plugin on both hosts, the one that is encoding and the one that is decoding (viewing).
Parameters
Publisher (camera driver)
Here is a list of the available encoding parameters:
-
encoding
: the libav (ffmpeg) encoder being used. The default islibx264
, which is on-CPU unaccelerated encoding. Depending on your hardware, your encoding options may include the hardware acceleratedh264_nvenc
orh264_vaapi
. You can list all available encoders withffmpeg --codecs
. In the h264 row, look for(encoders)
. -
preset
: default is empty (“”). Valid values can be for instanceslow
,ll
(low latency) etc. To find out what presets are available, run e.g.ffmpeg -hide_banner -f lavfi -i nullsrc -c:v libx264 -preset help -f mp4 - 2>&1
-
profile
: For instancebaseline
,main
. See the ffmpeg website. -
tune
: See the ffmpeg website. The default is empty(“”). -
gop_size
: The number of frames between keyframes. Default: 10. The larger this number the more latency you will have, but also the more efficient the compression becomes. -
bit_rate
: The max bit rate [in bits/s] that the encoding will target. Default is8242880
. -
crf
: Constant Rate Factor, affects the image quality. Value range is[0, 51]
;0
is lossless,23
is default,51
is worst quality. -
delay
: Not sure what it does, but doesn’t help with delay. Default is empty (“”). -
pixel_format
: Forces a different pixel format for internal conversions. Experimental, don’t use. -
qmax
: Max quantization rate. Defaults to 10. See ffmpeg documentation. The larger this number, the worse the image looks, and the more efficient the encoding. -
measure_performance
: For performance debugging (developers only). Defaults to false. -
performance_interval
: How many frames to wait between logging performance data.
The parameters are under the ffmpeg
variable block. If you launch
your publisher node (camera driver), you can give it a parameter list on the way like so:
parameters=[{'ffmpeg_image_transport.encoding': 'hevc_nvenc',
'ffmpeg_image_transport.profile': 'main',
'ffmpeg_image_transport.preset': 'll',
'ffmpeg_image_transport.gop_size': 15}]
See the example launch file for a V4L USB camera
Subscriber (viewer)
File truncated at 100 lines see the full file
Changelog for package ffmpeg_image_transport
2.0.3 (2025-05-26)
- avoid ament_target_dependencies
- Contributors: Bernd Pfrommer
2.0.2 (2025-03-30)
- fix bug: segfault when publish function pointer changes
- updated broken badge, fixed typo in readme
- Contributors: Bernd Pfrommer
2.0.1 (2025-03-17)
- fix bug that prevents compilation in humble
- Contributors: Bernd Pfrommer
2.0.0 (2025-03-15)
- use ffmpeg_encoder_decoder
- align parameter handling with compressed image transport
- point to new instructions
- Contributors: Bernd Pfrommer
1.0.2 (2025-03-07)
-
updated badges and fixed deprecation warnings (#36)
- updated badges and fixed deprecation warnings
- only use AV_FRAME_FLAG_KEY when available
-
Configurable CRF (#34)
- Added CRF support
* fixed gop parameter in the README examples ---------Co-authored-by: Alexey Shtern <<alexey.shtern@xtend.me>>
-
README: Add usage instructions for Jazzy The syntax mentioned in the README no longer works there.
-
fix typo in link
-
added documentation for enabling NVMPI on the jetson
-
Contributors: Alexey Shtern, Bernd Pfrommer, Danil Tolkachev, Michal Sojka
1.0.1 (2024-04-17)
- use appropriate header for cv_bridge
- added documentation and improved cmake exporting
- move encoder->decoder map to decoder for public use
- added frame delay control
- changed install directory so other pkgs can ament_target_depend on this library
- Contributors: Bernd Pfrommer, Toby Buckley
1.0.0 (2024-01-11)
- initial release of ROS2 package
- Contributors: Akshay Srinivasan, Bernd Pfrommer, Francesco Ferroni, Michal Sojka, akssri
Wiki Tutorials
Package Dependencies
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged ffmpeg_image_transport at Robotics Stack Exchange
![]() |
ffmpeg_image_transport package from ffmpeg_image_transport repoffmpeg_image_transport |
ROS Distro
|
Package Summary
Tags | No category tags. |
Version | 2.0.3 |
License | Apache-2 |
Build type | AMENT_CMAKE |
Use | RECOMMENDED |
Repository Summary
Checkout URI | https://github.com/ros-misc-utilities/ffmpeg_image_transport.git |
VCS Type | git |
VCS Version | release |
Last Updated | 2025-05-26 |
Dev Status | DEVELOPED |
CI status | No Continuous Integration |
Released | RELEASED |
Tags | No category tags. |
Contributing |
Help Wanted (0)
Good First Issues (0) Pull Requests to Review (0) |
Package Description
Additional Links
Maintainers
- Bernd Pfrommer
Authors
- Bernd Pfrommer
ROS2 image transport for ffmpeg/libav
This ROS2 image transport plugin supports encoding/decoding with the FFMpeg library, for example encoding h264 and h265 or HEVC, using Nvidia or other hardware acceleration when available.
The publisher plugin of the transport produces ffmpeg image transport messages. These are raw, encoded packets that are then transmitted and decoded by the subscriber plugin of the transport. The transport library contains both the publisher(encoder) and subscriber(decoder) plugin and therefore must be installed on both sides to be useful.
To extract e.g. frames or an mp4 file from a recorded bag, have a look at the ffmpeg_image_transport_tools repository.
Supported systems
Continuous integration is tested under Ubuntu with the following ROS2 distros:
Installation
From packages
sudo apt-get install ros-${ROS_DISTRO}-ffmpeg-image-transport
From source
Set the following shell variables:
repo=ffmpeg_image_transport
url=https://github.com/ros-misc-utilities/${repo}.git
and follow the instructions here
Make sure to source your workspace’s install/setup.bash
afterwards.
If all goes well you should see the transport show up:
ros2 run image_transport list_transports
should give output (among other transport plugins):
"image_transport/ffmpeg"
- Provided by package: ffmpeg_image_transport
- Publisher:
This plugin encodes frames into ffmpeg compressed packets
- Subscriber:
This plugin decodes frames from ffmpeg compressed packets
Remember to install the plugin on both hosts, the one that is encoding and the one that is decoding (viewing).
Parameters
Publisher (camera driver)
Here is a list of the available encoding parameters:
-
encoding
: the libav (ffmpeg) encoder being used. The default islibx264
, which is on-CPU unaccelerated encoding. Depending on your hardware, your encoding options may include the hardware acceleratedh264_nvenc
orh264_vaapi
. You can list all available encoders withffmpeg --codecs
. In the h264 row, look for(encoders)
. -
preset
: default is empty (“”). Valid values can be for instanceslow
,ll
(low latency) etc. To find out what presets are available, run e.g.ffmpeg -hide_banner -f lavfi -i nullsrc -c:v libx264 -preset help -f mp4 - 2>&1
-
profile
: For instancebaseline
,main
. See the ffmpeg website. -
tune
: See the ffmpeg website. The default is empty(“”). -
gop_size
: The number of frames between keyframes. Default: 10. The larger this number the more latency you will have, but also the more efficient the compression becomes. -
bit_rate
: The max bit rate [in bits/s] that the encoding will target. Default is8242880
. -
crf
: Constant Rate Factor, affects the image quality. Value range is[0, 51]
;0
is lossless,23
is default,51
is worst quality. -
delay
: Not sure what it does, but doesn’t help with delay. Default is empty (“”). -
pixel_format
: Forces a different pixel format for internal conversions. Experimental, don’t use. -
qmax
: Max quantization rate. Defaults to 10. See ffmpeg documentation. The larger this number, the worse the image looks, and the more efficient the encoding. -
measure_performance
: For performance debugging (developers only). Defaults to false. -
performance_interval
: How many frames to wait between logging performance data.
The parameters are under the ffmpeg
variable block. If you launch
your publisher node (camera driver), you can give it a parameter list on the way like so:
parameters=[{'ffmpeg_image_transport.encoding': 'hevc_nvenc',
'ffmpeg_image_transport.profile': 'main',
'ffmpeg_image_transport.preset': 'll',
'ffmpeg_image_transport.gop_size': 15}]
See the example launch file for a V4L USB camera
Subscriber (viewer)
File truncated at 100 lines see the full file
Changelog for package ffmpeg_image_transport
2.0.3 (2025-05-26)
- avoid ament_target_dependencies
- Contributors: Bernd Pfrommer
2.0.2 (2025-03-30)
- fix bug: segfault when publish function pointer changes
- updated broken badge, fixed typo in readme
- Contributors: Bernd Pfrommer
2.0.1 (2025-03-17)
- fix bug that prevents compilation in humble
- Contributors: Bernd Pfrommer
2.0.0 (2025-03-15)
- use ffmpeg_encoder_decoder
- align parameter handling with compressed image transport
- point to new instructions
- Contributors: Bernd Pfrommer
1.0.2 (2025-03-07)
-
updated badges and fixed deprecation warnings (#36)
- updated badges and fixed deprecation warnings
- only use AV_FRAME_FLAG_KEY when available
-
Configurable CRF (#34)
- Added CRF support
* fixed gop parameter in the README examples ---------Co-authored-by: Alexey Shtern <<alexey.shtern@xtend.me>>
-
README: Add usage instructions for Jazzy The syntax mentioned in the README no longer works there.
-
fix typo in link
-
added documentation for enabling NVMPI on the jetson
-
Contributors: Alexey Shtern, Bernd Pfrommer, Danil Tolkachev, Michal Sojka
1.0.1 (2024-04-17)
- use appropriate header for cv_bridge
- added documentation and improved cmake exporting
- move encoder->decoder map to decoder for public use
- added frame delay control
- changed install directory so other pkgs can ament_target_depend on this library
- Contributors: Bernd Pfrommer, Toby Buckley
1.0.0 (2024-01-11)
- initial release of ROS2 package
- Contributors: Akshay Srinivasan, Bernd Pfrommer, Francesco Ferroni, Michal Sojka, akssri
Wiki Tutorials
Package Dependencies
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged ffmpeg_image_transport at Robotics Stack Exchange
![]() |
ffmpeg_image_transport package from ffmpeg_image_transport repoffmpeg_image_transport |
ROS Distro
|
Package Summary
Tags | No category tags. |
Version | 2.0.3 |
License | Apache-2 |
Build type | AMENT_CMAKE |
Use | RECOMMENDED |
Repository Summary
Checkout URI | https://github.com/ros-misc-utilities/ffmpeg_image_transport.git |
VCS Type | git |
VCS Version | release |
Last Updated | 2025-05-26 |
Dev Status | DEVELOPED |
CI status | No Continuous Integration |
Released | RELEASED |
Tags | No category tags. |
Contributing |
Help Wanted (0)
Good First Issues (0) Pull Requests to Review (0) |
Package Description
Additional Links
Maintainers
- Bernd Pfrommer
Authors
- Bernd Pfrommer
ROS2 image transport for ffmpeg/libav
This ROS2 image transport plugin supports encoding/decoding with the FFMpeg library, for example encoding h264 and h265 or HEVC, using Nvidia or other hardware acceleration when available.
The publisher plugin of the transport produces ffmpeg image transport messages. These are raw, encoded packets that are then transmitted and decoded by the subscriber plugin of the transport. The transport library contains both the publisher(encoder) and subscriber(decoder) plugin and therefore must be installed on both sides to be useful.
To extract e.g. frames or an mp4 file from a recorded bag, have a look at the ffmpeg_image_transport_tools repository.
Supported systems
Continuous integration is tested under Ubuntu with the following ROS2 distros:
Installation
From packages
sudo apt-get install ros-${ROS_DISTRO}-ffmpeg-image-transport
From source
Set the following shell variables:
repo=ffmpeg_image_transport
url=https://github.com/ros-misc-utilities/${repo}.git
and follow the instructions here
Make sure to source your workspace’s install/setup.bash
afterwards.
If all goes well you should see the transport show up:
ros2 run image_transport list_transports
should give output (among other transport plugins):
"image_transport/ffmpeg"
- Provided by package: ffmpeg_image_transport
- Publisher:
This plugin encodes frames into ffmpeg compressed packets
- Subscriber:
This plugin decodes frames from ffmpeg compressed packets
Remember to install the plugin on both hosts, the one that is encoding and the one that is decoding (viewing).
Parameters
Publisher (camera driver)
Here is a list of the available encoding parameters:
-
encoding
: the libav (ffmpeg) encoder being used. The default islibx264
, which is on-CPU unaccelerated encoding. Depending on your hardware, your encoding options may include the hardware acceleratedh264_nvenc
orh264_vaapi
. You can list all available encoders withffmpeg --codecs
. In the h264 row, look for(encoders)
. -
preset
: default is empty (“”). Valid values can be for instanceslow
,ll
(low latency) etc. To find out what presets are available, run e.g.ffmpeg -hide_banner -f lavfi -i nullsrc -c:v libx264 -preset help -f mp4 - 2>&1
-
profile
: For instancebaseline
,main
. See the ffmpeg website. -
tune
: See the ffmpeg website. The default is empty(“”). -
gop_size
: The number of frames between keyframes. Default: 10. The larger this number the more latency you will have, but also the more efficient the compression becomes. -
bit_rate
: The max bit rate [in bits/s] that the encoding will target. Default is8242880
. -
crf
: Constant Rate Factor, affects the image quality. Value range is[0, 51]
;0
is lossless,23
is default,51
is worst quality. -
delay
: Not sure what it does, but doesn’t help with delay. Default is empty (“”). -
pixel_format
: Forces a different pixel format for internal conversions. Experimental, don’t use. -
qmax
: Max quantization rate. Defaults to 10. See ffmpeg documentation. The larger this number, the worse the image looks, and the more efficient the encoding. -
measure_performance
: For performance debugging (developers only). Defaults to false. -
performance_interval
: How many frames to wait between logging performance data.
The parameters are under the ffmpeg
variable block. If you launch
your publisher node (camera driver), you can give it a parameter list on the way like so:
parameters=[{'ffmpeg_image_transport.encoding': 'hevc_nvenc',
'ffmpeg_image_transport.profile': 'main',
'ffmpeg_image_transport.preset': 'll',
'ffmpeg_image_transport.gop_size': 15}]
See the example launch file for a V4L USB camera
Subscriber (viewer)
File truncated at 100 lines see the full file
Changelog for package ffmpeg_image_transport
2.0.3 (2025-05-26)
- avoid ament_target_dependencies
- Contributors: Bernd Pfrommer
2.0.2 (2025-03-30)
- fix bug: segfault when publish function pointer changes
- updated broken badge, fixed typo in readme
- Contributors: Bernd Pfrommer
2.0.1 (2025-03-17)
- fix bug that prevents compilation in humble
- Contributors: Bernd Pfrommer
2.0.0 (2025-03-15)
- use ffmpeg_encoder_decoder
- align parameter handling with compressed image transport
- point to new instructions
- Contributors: Bernd Pfrommer
1.0.2 (2025-03-07)
-
updated badges and fixed deprecation warnings (#36)
- updated badges and fixed deprecation warnings
- only use AV_FRAME_FLAG_KEY when available
-
Configurable CRF (#34)
- Added CRF support
* fixed gop parameter in the README examples ---------Co-authored-by: Alexey Shtern <<alexey.shtern@xtend.me>>
-
README: Add usage instructions for Jazzy The syntax mentioned in the README no longer works there.
-
fix typo in link
-
added documentation for enabling NVMPI on the jetson
-
Contributors: Alexey Shtern, Bernd Pfrommer, Danil Tolkachev, Michal Sojka
1.0.1 (2024-04-17)
- use appropriate header for cv_bridge
- added documentation and improved cmake exporting
- move encoder->decoder map to decoder for public use
- added frame delay control
- changed install directory so other pkgs can ament_target_depend on this library
- Contributors: Bernd Pfrommer, Toby Buckley
1.0.0 (2024-01-11)
- initial release of ROS2 package
- Contributors: Akshay Srinivasan, Bernd Pfrommer, Francesco Ferroni, Michal Sojka, akssri
Wiki Tutorials
Package Dependencies
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged ffmpeg_image_transport at Robotics Stack Exchange
![]() |
ffmpeg_image_transport package from ffmpeg_image_transport repoffmpeg_image_transport |
ROS Distro
|
Package Summary
Tags | No category tags. |
Version | 2.0.3 |
License | Apache-2 |
Build type | AMENT_CMAKE |
Use | RECOMMENDED |
Repository Summary
Checkout URI | https://github.com/ros-misc-utilities/ffmpeg_image_transport.git |
VCS Type | git |
VCS Version | release |
Last Updated | 2025-05-26 |
Dev Status | DEVELOPED |
CI status | No Continuous Integration |
Released | RELEASED |
Tags | No category tags. |
Contributing |
Help Wanted (0)
Good First Issues (0) Pull Requests to Review (0) |
Package Description
Additional Links
Maintainers
- Bernd Pfrommer
Authors
- Bernd Pfrommer
ROS2 image transport for ffmpeg/libav
This ROS2 image transport plugin supports encoding/decoding with the FFMpeg library, for example encoding h264 and h265 or HEVC, using Nvidia or other hardware acceleration when available.
The publisher plugin of the transport produces ffmpeg image transport messages. These are raw, encoded packets that are then transmitted and decoded by the subscriber plugin of the transport. The transport library contains both the publisher(encoder) and subscriber(decoder) plugin and therefore must be installed on both sides to be useful.
To extract e.g. frames or an mp4 file from a recorded bag, have a look at the ffmpeg_image_transport_tools repository.
Supported systems
Continuous integration is tested under Ubuntu with the following ROS2 distros:
Installation
From packages
sudo apt-get install ros-${ROS_DISTRO}-ffmpeg-image-transport
From source
Set the following shell variables:
repo=ffmpeg_image_transport
url=https://github.com/ros-misc-utilities/${repo}.git
and follow the instructions here
Make sure to source your workspace’s install/setup.bash
afterwards.
If all goes well you should see the transport show up:
ros2 run image_transport list_transports
should give output (among other transport plugins):
"image_transport/ffmpeg"
- Provided by package: ffmpeg_image_transport
- Publisher:
This plugin encodes frames into ffmpeg compressed packets
- Subscriber:
This plugin decodes frames from ffmpeg compressed packets
Remember to install the plugin on both hosts, the one that is encoding and the one that is decoding (viewing).
Parameters
Publisher (camera driver)
Here is a list of the available encoding parameters:
-
encoding
: the libav (ffmpeg) encoder being used. The default islibx264
, which is on-CPU unaccelerated encoding. Depending on your hardware, your encoding options may include the hardware acceleratedh264_nvenc
orh264_vaapi
. You can list all available encoders withffmpeg --codecs
. In the h264 row, look for(encoders)
. -
preset
: default is empty (“”). Valid values can be for instanceslow
,ll
(low latency) etc. To find out what presets are available, run e.g.ffmpeg -hide_banner -f lavfi -i nullsrc -c:v libx264 -preset help -f mp4 - 2>&1
-
profile
: For instancebaseline
,main
. See the ffmpeg website. -
tune
: See the ffmpeg website. The default is empty(“”). -
gop_size
: The number of frames between keyframes. Default: 10. The larger this number the more latency you will have, but also the more efficient the compression becomes. -
bit_rate
: The max bit rate [in bits/s] that the encoding will target. Default is8242880
. -
crf
: Constant Rate Factor, affects the image quality. Value range is[0, 51]
;0
is lossless,23
is default,51
is worst quality. -
delay
: Not sure what it does, but doesn’t help with delay. Default is empty (“”). -
pixel_format
: Forces a different pixel format for internal conversions. Experimental, don’t use. -
qmax
: Max quantization rate. Defaults to 10. See ffmpeg documentation. The larger this number, the worse the image looks, and the more efficient the encoding. -
measure_performance
: For performance debugging (developers only). Defaults to false. -
performance_interval
: How many frames to wait between logging performance data.
The parameters are under the ffmpeg
variable block. If you launch
your publisher node (camera driver), you can give it a parameter list on the way like so:
parameters=[{'ffmpeg_image_transport.encoding': 'hevc_nvenc',
'ffmpeg_image_transport.profile': 'main',
'ffmpeg_image_transport.preset': 'll',
'ffmpeg_image_transport.gop_size': 15}]
See the example launch file for a V4L USB camera
Subscriber (viewer)
File truncated at 100 lines see the full file
Changelog for package ffmpeg_image_transport
2.0.3 (2025-05-26)
- avoid ament_target_dependencies
- Contributors: Bernd Pfrommer
2.0.2 (2025-03-30)
- fix bug: segfault when publish function pointer changes
- updated broken badge, fixed typo in readme
- Contributors: Bernd Pfrommer
2.0.1 (2025-03-17)
- fix bug that prevents compilation in humble
- Contributors: Bernd Pfrommer
2.0.0 (2025-03-15)
- use ffmpeg_encoder_decoder
- align parameter handling with compressed image transport
- point to new instructions
- Contributors: Bernd Pfrommer
1.0.2 (2025-03-07)
-
updated badges and fixed deprecation warnings (#36)
- updated badges and fixed deprecation warnings
- only use AV_FRAME_FLAG_KEY when available
-
Configurable CRF (#34)
- Added CRF support
* fixed gop parameter in the README examples ---------Co-authored-by: Alexey Shtern <<alexey.shtern@xtend.me>>
-
README: Add usage instructions for Jazzy The syntax mentioned in the README no longer works there.
-
fix typo in link
-
added documentation for enabling NVMPI on the jetson
-
Contributors: Alexey Shtern, Bernd Pfrommer, Danil Tolkachev, Michal Sojka
1.0.1 (2024-04-17)
- use appropriate header for cv_bridge
- added documentation and improved cmake exporting
- move encoder->decoder map to decoder for public use
- added frame delay control
- changed install directory so other pkgs can ament_target_depend on this library
- Contributors: Bernd Pfrommer, Toby Buckley
1.0.0 (2024-01-11)
- initial release of ROS2 package
- Contributors: Akshay Srinivasan, Bernd Pfrommer, Francesco Ferroni, Michal Sojka, akssri
Wiki Tutorials
Package Dependencies
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged ffmpeg_image_transport at Robotics Stack Exchange
![]() |
ffmpeg_image_transport package from ffmpeg_image_transport repoffmpeg_image_transport |
ROS Distro
|
Package Summary
Tags | No category tags. |
Version | 2.0.3 |
License | Apache-2 |
Build type | AMENT_CMAKE |
Use | RECOMMENDED |
Repository Summary
Checkout URI | https://github.com/ros-misc-utilities/ffmpeg_image_transport.git |
VCS Type | git |
VCS Version | release |
Last Updated | 2025-05-26 |
Dev Status | DEVELOPED |
CI status | No Continuous Integration |
Released | RELEASED |
Tags | No category tags. |
Contributing |
Help Wanted (0)
Good First Issues (0) Pull Requests to Review (0) |
Package Description
Additional Links
Maintainers
- Bernd Pfrommer
Authors
- Bernd Pfrommer
ROS2 image transport for ffmpeg/libav
This ROS2 image transport plugin supports encoding/decoding with the FFMpeg library, for example encoding h264 and h265 or HEVC, using Nvidia or other hardware acceleration when available.
The publisher plugin of the transport produces ffmpeg image transport messages. These are raw, encoded packets that are then transmitted and decoded by the subscriber plugin of the transport. The transport library contains both the publisher(encoder) and subscriber(decoder) plugin and therefore must be installed on both sides to be useful.
To extract e.g. frames or an mp4 file from a recorded bag, have a look at the ffmpeg_image_transport_tools repository.
Supported systems
Continuous integration is tested under Ubuntu with the following ROS2 distros:
Installation
From packages
sudo apt-get install ros-${ROS_DISTRO}-ffmpeg-image-transport
From source
Set the following shell variables:
repo=ffmpeg_image_transport
url=https://github.com/ros-misc-utilities/${repo}.git
and follow the instructions here
Make sure to source your workspace’s install/setup.bash
afterwards.
If all goes well you should see the transport show up:
ros2 run image_transport list_transports
should give output (among other transport plugins):
"image_transport/ffmpeg"
- Provided by package: ffmpeg_image_transport
- Publisher:
This plugin encodes frames into ffmpeg compressed packets
- Subscriber:
This plugin decodes frames from ffmpeg compressed packets
Remember to install the plugin on both hosts, the one that is encoding and the one that is decoding (viewing).
Parameters
Publisher (camera driver)
Here is a list of the available encoding parameters:
-
encoding
: the libav (ffmpeg) encoder being used. The default islibx264
, which is on-CPU unaccelerated encoding. Depending on your hardware, your encoding options may include the hardware acceleratedh264_nvenc
orh264_vaapi
. You can list all available encoders withffmpeg --codecs
. In the h264 row, look for(encoders)
. -
preset
: default is empty (“”). Valid values can be for instanceslow
,ll
(low latency) etc. To find out what presets are available, run e.g.ffmpeg -hide_banner -f lavfi -i nullsrc -c:v libx264 -preset help -f mp4 - 2>&1
-
profile
: For instancebaseline
,main
. See the ffmpeg website. -
tune
: See the ffmpeg website. The default is empty(“”). -
gop_size
: The number of frames between keyframes. Default: 10. The larger this number the more latency you will have, but also the more efficient the compression becomes. -
bit_rate
: The max bit rate [in bits/s] that the encoding will target. Default is8242880
. -
crf
: Constant Rate Factor, affects the image quality. Value range is[0, 51]
;0
is lossless,23
is default,51
is worst quality. -
delay
: Not sure what it does, but doesn’t help with delay. Default is empty (“”). -
pixel_format
: Forces a different pixel format for internal conversions. Experimental, don’t use. -
qmax
: Max quantization rate. Defaults to 10. See ffmpeg documentation. The larger this number, the worse the image looks, and the more efficient the encoding. -
measure_performance
: For performance debugging (developers only). Defaults to false. -
performance_interval
: How many frames to wait between logging performance data.
The parameters are under the ffmpeg
variable block. If you launch
your publisher node (camera driver), you can give it a parameter list on the way like so:
parameters=[{'ffmpeg_image_transport.encoding': 'hevc_nvenc',
'ffmpeg_image_transport.profile': 'main',
'ffmpeg_image_transport.preset': 'll',
'ffmpeg_image_transport.gop_size': 15}]
See the example launch file for a V4L USB camera
Subscriber (viewer)
File truncated at 100 lines see the full file
Changelog for package ffmpeg_image_transport
2.0.3 (2025-05-26)
- avoid ament_target_dependencies
- Contributors: Bernd Pfrommer
2.0.2 (2025-03-30)
- fix bug: segfault when publish function pointer changes
- updated broken badge, fixed typo in readme
- Contributors: Bernd Pfrommer
2.0.1 (2025-03-17)
- fix bug that prevents compilation in humble
- Contributors: Bernd Pfrommer
2.0.0 (2025-03-15)
- use ffmpeg_encoder_decoder
- align parameter handling with compressed image transport
- point to new instructions
- Contributors: Bernd Pfrommer
1.0.2 (2025-03-07)
-
updated badges and fixed deprecation warnings (#36)
- updated badges and fixed deprecation warnings
- only use AV_FRAME_FLAG_KEY when available
-
Configurable CRF (#34)
- Added CRF support
* fixed gop parameter in the README examples ---------Co-authored-by: Alexey Shtern <<alexey.shtern@xtend.me>>
-
README: Add usage instructions for Jazzy The syntax mentioned in the README no longer works there.
-
fix typo in link
-
added documentation for enabling NVMPI on the jetson
-
Contributors: Alexey Shtern, Bernd Pfrommer, Danil Tolkachev, Michal Sojka
1.0.1 (2024-04-17)
- use appropriate header for cv_bridge
- added documentation and improved cmake exporting
- move encoder->decoder map to decoder for public use
- added frame delay control
- changed install directory so other pkgs can ament_target_depend on this library
- Contributors: Bernd Pfrommer, Toby Buckley
1.0.0 (2024-01-11)
- initial release of ROS2 package
- Contributors: Akshay Srinivasan, Bernd Pfrommer, Francesco Ferroni, Michal Sojka, akssri