Add recording to opus file

Use the FFmpeg opus muxer to record an opus file.

PR #3978 <https://github.com/Genymobile/scrcpy/pull/3978>
This commit is contained in:
Romain Vimont 2023-05-07 12:35:27 +02:00
parent d6bcde565f
commit 7321db6f28
3 changed files with 15 additions and 1 deletions

View file

@ -1493,6 +1493,9 @@ get_record_format(const char *name) {
if (!strcmp(name, "mka")) { if (!strcmp(name, "mka")) {
return SC_RECORD_FORMAT_MKA; return SC_RECORD_FORMAT_MKA;
} }
if (!strcmp(name, "opus")) {
return SC_RECORD_FORMAT_OPUS;
}
return 0; return 0;
} }
@ -1986,6 +1989,13 @@ parse_args_with_getopt(struct scrcpy_cli_args *args, int argc, char *argv[],
LOGE("Audio container does not support video stream"); LOGE("Audio container does not support video stream");
return false; return false;
} }
if (opts->record_format == SC_RECORD_FORMAT_OPUS
&& opts->audio_codec != SC_CODEC_OPUS) {
LOGE("Recording to OPUS file requires an OPUS audio stream "
"(try with --audio-codec=opus)");
return false;
}
} }
if (opts->audio_codec == SC_CODEC_RAW) { if (opts->audio_codec == SC_CODEC_RAW) {

View file

@ -23,12 +23,14 @@ enum sc_record_format {
SC_RECORD_FORMAT_MKV, SC_RECORD_FORMAT_MKV,
SC_RECORD_FORMAT_M4A, SC_RECORD_FORMAT_M4A,
SC_RECORD_FORMAT_MKA, SC_RECORD_FORMAT_MKA,
SC_RECORD_FORMAT_OPUS,
}; };
static inline bool static inline bool
sc_record_format_is_audio_only(enum sc_record_format fmt) { sc_record_format_is_audio_only(enum sc_record_format fmt) {
return fmt == SC_RECORD_FORMAT_M4A return fmt == SC_RECORD_FORMAT_M4A
|| fmt == SC_RECORD_FORMAT_MKA; || fmt == SC_RECORD_FORMAT_MKA
|| fmt == SC_RECORD_FORMAT_OPUS;
} }
enum sc_codec { enum sc_codec {

View file

@ -66,6 +66,8 @@ sc_recorder_get_format_name(enum sc_record_format format) {
case SC_RECORD_FORMAT_MKV: case SC_RECORD_FORMAT_MKV:
case SC_RECORD_FORMAT_MKA: case SC_RECORD_FORMAT_MKA:
return "matroska"; return "matroska";
case SC_RECORD_FORMAT_OPUS:
return "opus";
default: default:
return NULL; return NULL;
} }