OBS Studio: Difference between revisions
imported>Wackbyte m "open source" -> "open-source" |
added disclaimer for missing hardware acceleration options |
||
(9 intermediate revisions by 8 users not shown) | |||
Line 5: | Line 5: | ||
Plugins are available from the <code>obs-studio-plugins</code> package set. | Plugins are available from the <code>obs-studio-plugins</code> package set. | ||
They can be installed by either | They can be installed by using either the [[NixOS]] or [[Home Manager]] module: | ||
or | |||
<syntaxhighlight lang="nix"> | <syntaxhighlight lang="nix"> | ||
Line 22: | Line 12: | ||
programs.obs-studio = { | programs.obs-studio = { | ||
enable = true; | enable = true; | ||
# optional Nvidia hardware acceleration | |||
package = ( | |||
pkgs.obs-studio.override { | |||
cudaSupport = true; | |||
} | |||
); | |||
plugins = with pkgs.obs-studio-plugins; [ | plugins = with pkgs.obs-studio-plugins; [ | ||
wlrobs | wlrobs | ||
obs-backgroundremoval | |||
obs-pipewire-audio-capture | |||
obs-vaapi #optional AMD hardware acceleration | |||
obs-gstreamer | |||
obs-vkcapture | |||
]; | ]; | ||
}; | }; | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
or by wrapping the package with <code>wrapOBS</code>: | |||
<syntaxhighlight lang="nix">environment.systemPackages = [ | |||
(pkgs.wrapOBS { | |||
plugins = with pkgs.obs-studio-plugins; [ | |||
wlrobs | |||
obs-backgroundremoval | |||
obs-pipewire-audio-capture | |||
obs-vaapi #optional AMD hardware acceleration | |||
obs-gstreamer | |||
obs-vkcapture | |||
]; | |||
}) | |||
];</syntaxhighlight>'''Package collision''': Including both <code>obs-studio</code> and <code>(pkgs.wrapOBS {...</code> in <code>environment.systemPackages</code> will result in a package collision; if plugins are needed, only include the "wrapped" version, which sets the plugins directory to include Nix-managed plugins (see [https://github.com/NixOS/nixpkgs/blob/master/pkgs/applications/video/obs-studio/wrapper.nix pkgs/applications/video/obs-studio/wrapper.nix]. | |||
'''Missing hardware acceleration''': Sometimes you need to set "Output Mode" to Advanced in settings Output tab to see the hardware accelerated Video Encoders options. | |||
=== Using the Virtual Camera === | === Using the Virtual Camera === | ||
The virtual camera requires the <code>v4l2loopback</code> [[Linux kernel#Custom kernel modules|kernel module]] to be installed, | The virtual camera requires the <code>v4l2loopback</code> [[Linux kernel#Custom kernel modules|kernel module]] to be installed, a loopback device configured, and polkit enabled so OBS can access the virtual device. | ||
<syntaxhighlight lang="nix"> | This can be done in NixOS with:<syntaxhighlight lang="nixos"> | ||
programs.obs-studio.enableVirtualCamera = true; | |||
</syntaxhighlight>Or by setting the kernel options manually, this is useful if you need to add an additional loopback device as shown below:<syntaxhighlight lang="nix"> | |||
{ config, ... }: | { config, ... }: | ||
{ | { | ||
Line 39: | Line 61: | ||
v4l2loopback | v4l2loopback | ||
]; | ]; | ||
boot.kernelModules = [ "v4l2loopback" ]; | |||
boot.extraModprobeConfig = '' | |||
options v4l2loopback devices=1 video_nr=1 card_label="OBS Cam" exclusive_caps=1 | |||
''; | |||
security.polkit.enable = true; | |||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
It is possible to use [[Droidcam]] as virtual camera. | |||
If you use a digital camera as a webcam via [http://gphoto.org/ gphoto2] you will need an additional loopback device to use this camera as a virtual camera. For a setup like this you may wish to change the above v4l2loopback module config to something like this:<syntaxhighlight lang="nix"> | |||
boot.extraModprobeConfig = '' | |||
options v4l2loopback devices=2 video_nr=1,2 card_label="OBS Cam, Virt Cam" exclusive_caps=1 | |||
''; | |||
</syntaxhighlight>For more the [https://wiki.archlinux.org/title/V4l2loopback#Loading_the_kernel_module arch wiki entry on v4l2loopback] is a good reference. | |||
In addition to <code>gphoto2</code> you will need the <code>v4l-utils</code> and <code>ffmpeg</code> packages so that you can use gphoto2 to send the raw feed from your camera to the virtual camera via ffmpeg for example using a command like this<ref>https://austingil.com/dslr-webcam-linux/</ref>:<syntaxhighlight lang="bash"> | |||
gphoto2 --stdout autofocusdrive=1 --capture-movie | ffmpeg -i - -vcodec rawvideo -pix_fmt yuv420p -threads 0 -f v4l2 /dev/video2 | |||
</syntaxhighlight> | |||
[[Category:Applications]] | [[Category:Applications]] |
Latest revision as of 07:04, 14 June 2025
OBS Studio is free and open-source software for video recording and live streaming, licensed under the GNU GPLv2 license.
Installing Plugins
Plugins are available from the obs-studio-plugins
package set.
They can be installed by using either the NixOS or Home Manager module:
{ config, pkgs, ... }:
{
programs.obs-studio = {
enable = true;
# optional Nvidia hardware acceleration
package = (
pkgs.obs-studio.override {
cudaSupport = true;
}
);
plugins = with pkgs.obs-studio-plugins; [
wlrobs
obs-backgroundremoval
obs-pipewire-audio-capture
obs-vaapi #optional AMD hardware acceleration
obs-gstreamer
obs-vkcapture
];
};
}
or by wrapping the package with wrapOBS
:
environment.systemPackages = [
(pkgs.wrapOBS {
plugins = with pkgs.obs-studio-plugins; [
wlrobs
obs-backgroundremoval
obs-pipewire-audio-capture
obs-vaapi #optional AMD hardware acceleration
obs-gstreamer
obs-vkcapture
];
})
];
Package collision: Including both obs-studio
and (pkgs.wrapOBS {...
in environment.systemPackages
will result in a package collision; if plugins are needed, only include the "wrapped" version, which sets the plugins directory to include Nix-managed plugins (see pkgs/applications/video/obs-studio/wrapper.nix.
Missing hardware acceleration: Sometimes you need to set "Output Mode" to Advanced in settings Output tab to see the hardware accelerated Video Encoders options.
Using the Virtual Camera
The virtual camera requires the v4l2loopback
kernel module to be installed, a loopback device configured, and polkit enabled so OBS can access the virtual device.
This can be done in NixOS with:
programs.obs-studio.enableVirtualCamera = true;
Or by setting the kernel options manually, this is useful if you need to add an additional loopback device as shown below:
{ config, ... }:
{
boot.extraModulePackages = with config.boot.kernelPackages; [
v4l2loopback
];
boot.kernelModules = [ "v4l2loopback" ];
boot.extraModprobeConfig = ''
options v4l2loopback devices=1 video_nr=1 card_label="OBS Cam" exclusive_caps=1
'';
security.polkit.enable = true;
}
It is possible to use Droidcam as virtual camera.
If you use a digital camera as a webcam via gphoto2 you will need an additional loopback device to use this camera as a virtual camera. For a setup like this you may wish to change the above v4l2loopback module config to something like this:
boot.extraModprobeConfig = ''
options v4l2loopback devices=2 video_nr=1,2 card_label="OBS Cam, Virt Cam" exclusive_caps=1
'';
For more the arch wiki entry on v4l2loopback is a good reference.
In addition to gphoto2
you will need the v4l-utils
and ffmpeg
packages so that you can use gphoto2 to send the raw feed from your camera to the virtual camera via ffmpeg for example using a command like this[1]:
gphoto2 --stdout autofocusdrive=1 --capture-movie | ffmpeg -i - -vcodec rawvideo -pix_fmt yuv420p -threads 0 -f v4l2 /dev/video2