First, let's be lazy: this can be done using the GUI. Which GUI to use however depends on the audio output system you're using. Open VLC, and go to Tools > Preferences > Audio. The Output module setting will tell you what you're using.
If you're using Pulse, then your default volume level is handled by Pulse itself. The easiest way to configure that is to use
pavucontrol. Install it using your package manager, start VLC (with audio), and open
pavucontrol. Get to the Playback tab, and set VLC's new value (in your case, 50%).
If you're using ALSA, you can set your value in VLC directly. Just above the Output module option, check the Always reset audio start level to box, and select 50% in the slider next to it.
If you want to configure the volume level without using VLC/pavucontrol, then again, the method depends on your audio output. Let's have a look at VLC's code:
static int getDefaultAudioVolume(vlc_object_t *obj, const char *aout)
if (!strcmp(aout, "pulse"))
else if (!strcmp(aout, "alsa") && module_exists("alsa"))
return cbrtf(config_GetFloat(obj, "alsa-gain")) * 100.f + .5f;
else if (!strcmp(aout, "sndio"))
I've simplified it a bit, but basically:
If you're using Pulse, VLC's configuration has no impact. You'll need to configure Pulse itself. Have a look at
pactl (or maybe pacmd for an interactive interface). Here's a "little" one-liner to set VLC's default level:
$ pactl set-sink-input-volume $(pactl list short sink-inputs | grep $(pactl list short clients | grep vlc | cut -f1) | cut -f1) 50%
And yes, that's ugly. Basically, I'm getting VLC's index (as a client), and finding the associated sink input's index. Then I inject that index into
set-sink-input-volume, and set the value to 50%. Have a look at
pactl(1) for more information about these
pactl commands. Remember that you can also use
pavucontrol to configure Pulse in a GUI :)
If you're using ALSA, your default volume level is determined using the
alsa-gain setting in
~/.config/vlc/vlcrc. For a default volume of
x, you should set this value to
((x - 0.5) / 100) ^ 3, since
cbrtf is a cube root. In your case, that means
alsa-gain = (49.5 / 100) ^ 3 = 0.121287375. You'll also need to set the
volume-save setting to 0 (false) in order to apply your new default value every time, regardless of the volume level you were at the last time you closed VLC.