aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authordec05eba <dec05eba@protonmail.com>2026-07-13 12:39:12 +0200
committerdec05eba <dec05eba@protonmail.com>2026-07-13 12:43:56 +0200
commit174192d5605c51b41f39bb8c5de1abc1edc8a106 (patch)
tree320ecd136fb4b335660565b2804eccecb368e2f4
parentc09fb1b15dff6a06ac5e704022cd8e0193c7ca91 (diff)
Add -exclude-metadata option
-rw-r--r--gpu-screen-recorder.13
-rw-r--r--include/args_parser.h3
-rw-r--r--src/args_parser.c4
-rw-r--r--src/main.cpp4
4 files changed, 10 insertions, 4 deletions
diff --git a/gpu-screen-recorder.1 b/gpu-screen-recorder.1
index 6a573db..38d4df6 100644
--- a/gpu-screen-recorder.1
+++ b/gpu-screen-recorder.1
@@ -382,6 +382,9 @@ when this is set to
.B yes
to only encode frames when the screen content updates to lower GPU and video encoding usage when the system is idle.
.TP
+.BI \-exclude-metadata " yes|no"
+Exclude personal metadata from the video file, such as audio track title that is composed from the name of the audio device by default (default: no).
+.TP
.BI \-write\-first\-frame\-ts " yes|no"
When enabled, writes a timestamp file with extra extension \fI.ts\fR next to the output video containing:
.nf
diff --git a/include/args_parser.h b/include/args_parser.h
index 2208a9a..e8c68d8 100644
--- a/include/args_parser.h
+++ b/include/args_parser.h
@@ -8,7 +8,7 @@
typedef struct gsr_egl gsr_egl;
-#define NUM_ARGS 37
+#define NUM_ARGS 38
typedef enum {
GSR_CAPTURE_SOURCE_TYPE_WINDOW,
@@ -93,6 +93,7 @@ typedef struct {
bool gl_debug;
bool fallback_cpu_encoding;
bool low_power;
+ bool exclude_metadata;
bool record_cursor;
bool date_folders;
bool restore_portal_session;
diff --git a/src/args_parser.c b/src/args_parser.c
index 1957f32..c37712a 100644
--- a/src/args_parser.c
+++ b/src/args_parser.c
@@ -204,7 +204,7 @@ static void usage_header(void) {
"[-cursor yes|no] [-keyint <value>] [-restore-portal-session yes|no] [-portal-session-token-filepath filepath] [-encoder gpu|cpu] "
"[-fallback-cpu-encoding yes|no] [-o <output_file>] [-ro <output_directory>] [-ffmpeg-opts <options>] [--list-capture-options [card_path]] "
"[--list-monitors] [--list-audio-devices] [--list-application-audio] [--list-v4l2-devices] [-write-first-frame-ts yes|no] [-low-power yes|no] "
- "[-v yes|no] [-gl-debug yes|no] [--version] [-h|--help]\n", program_name);
+ "[-v yes|no] [-gl-debug yes|no] [-exclude-metadata yes|no] [--version] [-h|--help]\n", program_name);
fflush(stdout);
}
@@ -272,6 +272,7 @@ static bool args_parser_set_values(args_parser *self) {
self->fallback_cpu_encoding = args_get_boolean_by_key(self->args, NUM_ARGS, "-fallback-cpu-encoding", false);
self->write_first_frame_ts = args_get_boolean_by_key(self->args, NUM_ARGS, "-write-first-frame-ts", false);
self->low_power = args_get_boolean_by_key(self->args, NUM_ARGS, "-low-power", false);
+ self->exclude_metadata = args_get_boolean_by_key(self->args, NUM_ARGS, "-exclude-metadata", false);
self->audio_bitrate = args_get_i64_by_key(self->args, NUM_ARGS, "-ab", 0);
self->audio_bitrate *= 1000LL;
@@ -567,6 +568,7 @@ bool args_parser_parse(args_parser *self, int argc, char **argv, const args_hand
self->args[arg_index++] = (Arg){ .key = "-ffmpeg-audio-opts", .optional = true, .list = false, .type = ARG_TYPE_STRING };
self->args[arg_index++] = (Arg){ .key = "-write-first-frame-ts", .optional = true, .list = false, .type = ARG_TYPE_BOOLEAN };
self->args[arg_index++] = (Arg){ .key = "-low-power", .optional = true, .list = false, .type = ARG_TYPE_BOOLEAN };
+ self->args[arg_index++] = (Arg){ .key = "-exclude-metadata", .optional = true, .list = false, .type = ARG_TYPE_BOOLEAN };
assert(arg_index == NUM_ARGS);
for(int i = 1; i < argc; i += 2) {
diff --git a/src/main.cpp b/src/main.cpp
index 2ece52d..c574141 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -1116,7 +1116,7 @@ static RecordingStartResult start_recording_create_streams(const char *filename,
for(const AudioTrack &audio_track : audio_tracks) {
AVStream *audio_stream = create_stream(av_format_context, audio_track.codec_context);
- if(!audio_track.name.empty())
+ if(!audio_track.name.empty() && !arg_parser.exclude_metadata)
av_dict_set(&audio_stream->metadata, "title", audio_track.name.c_str(), 0);
avcodec_parameters_from_context(audio_stream->codecpar, audio_track.codec_context);
result.audio_inputs.push_back({&audio_track, audio_stream});
@@ -4081,7 +4081,7 @@ int main(int argc, char **argv) {
fprintf(stderr, "gsr error: added too many audio sources\n");
}
- if(audio_stream && !merged_audio_inputs.track_name.empty())
+ if(audio_stream && !merged_audio_inputs.track_name.empty() && !arg_parser.exclude_metadata)
av_dict_set(&audio_stream->metadata, "title", merged_audio_inputs.track_name.c_str(), 0);
open_audio(audio_codec_context, arg_parser.ffmpeg_audio_opts);