This is an automated email from the git hooks/post-receive script.

Git pushed a commit to branch master
in repository ffmpeg.

commit 4641be96e5c97c3a91bba0980cb7377586156195
Author:     Romain Beauxis <[email protected]>
AuthorDate: Wed May 13 20:57:03 2026 -0700
Commit:     Romain Beauxis <[email protected]>
CommitDate: Sat Jul 11 17:14:43 2026 +0000

    fftools/ffmpeg_mux_init.c: delete encoder-specific metadata when 
re-encoding.
---
 doc/ffmpeg.texi                                    |  40 +++++
 fftools/ffmpeg.h                                   |   1 +
 fftools/ffmpeg_mux_init.c                          | 190 +++++++++++++++++++++
 fftools/ffmpeg_opt.c                               |   3 +
 tests/fate/id3v2.mak                               |  21 +++
 tests/fate/matroska.mak                            |  23 +++
 tests/fate/mov.mak                                 |   5 +
 tests/ref/fate/caf-alac-remux                      |  12 +-
 tests/ref/fate/cover-art-flac-remux                |  17 +-
 tests/ref/fate/cover-art-mp3-id3v2-remux           |   4 +-
 tests/ref/fate/enhanced-flv-hevc                   |   4 +-
 tests/ref/fate/enhanced-flv-multitrack             |   4 +-
 tests/ref/fate/generic-tags-remux-asf              |   7 +-
 tests/ref/fate/generic-tags-remux-riff             |   5 +-
 tests/ref/fate/generic-tags-remux-vorbiscomment    |   7 +-
 tests/ref/fate/h264-bsf-redundant-pps-side-data    |   4 +-
 tests/ref/fate/h264-bsf-redundant-pps-side-data2   |   4 +-
 tests/ref/fate/id3v2-reenc-delete-metadata         |   8 +-
 tests/ref/fate/id3v2-reenc-delete-metadata-keep    |   6 +
 .../fate/id3v2-reenc-delete-metadata-keep-format   |   6 +
 .../fate/id3v2-reenc-delete-metadata-keep-stream   |   5 +
 .../fate/id3v2-reenc-delete-metadata-map-metadata  |   8 +-
 tests/ref/fate/matroska-alac-remux                 |  13 +-
 tests/ref/fate/matroska-crop                       |   4 +-
 tests/ref/fate/matroska-dovi-hvce-mp4-to-mkv       |   4 +-
 tests/ref/fate/matroska-dovi-write-config7         |   4 +-
 tests/ref/fate/matroska-dovi-write-config8         |   4 +-
 tests/ref/fate/matroska-non-rotation-displaymatrix |   4 +-
 tests/ref/fate/matroska-reenc-chapter-nofilter     |   4 +-
 .../ref/fate/matroska-reenc-delete-audio-metadata  |  12 ++
 tests/ref/fate/matroska-reenc-delete-metadata      |  11 +-
 .../matroska-reenc-delete-metadata-filter-output   |  11 +-
 tests/ref/fate/matroska-reenc-delete-metadata-keep |  13 ++
 ...roska-reenc-delete-metadata-keep-prefix-nomatch |  12 ++
 ...atroska-reenc-delete-metadata-keep-stream-video |  13 ++
 ...-reenc-delete-metadata-keep-stream-video-suffix |  13 ++
 ...troska-reenc-delete-metadata-keep-stream-video1 |  12 ++
 .../fate/matroska-reenc-delete-metadata-spec-scope |  11 +-
 ...ata => mov-cover-reenc-keeps-audio-format-tags} |  15 +-
 tests/ref/fate/mov-reenc-delete-format-metadata    |  20 +--
 tests/ref/fate/mov-reenc-delete-stream-metadata    |   5 +-
 .../mov-reenc-delete-stream-metadata-global-tag    |   5 +-
 tests/ref/fate/rgb24-mkv                           |   4 +-
 43 files changed, 450 insertions(+), 128 deletions(-)

diff --git a/doc/ffmpeg.texi b/doc/ffmpeg.texi
index 882503142e..ad235b78c4 100644
--- a/doc/ffmpeg.texi
+++ b/doc/ffmpeg.texi
@@ -920,6 +920,46 @@ To set the language of the first audio stream:
 ffmpeg -i INPUT -metadata:s:a:0 language=eng OUTPUT
 @end example
 
+@item -keep_metadata[:@var{metadata_specifier}] @var{key} 
(@emph{output,per-metadata})
+When re-encoding a stream, certain metadata keys that are likely to become 
stale
+(such as @code{iTunSMPB} or @code{encoded_by}) are automatically discarded.
+This option prevents a specific key from being discarded, preserving its 
original
+value from the input.
+
+Without a specifier, the key is preserved in all metadata contexts (format and
+streams). Use @code{g} to restrict to format (global) metadata, or @code{s} 
with
+an optional stream specifier to restrict to matching streams only.
+
+For example, to keep @code{iTunSMPB} in format metadata only when re-encoding:
+@example
+ffmpeg -i in.mp3 -keep_metadata:g iTunSMPB out.mp3
+@end example
+
+To keep @code{NUMBER_OF_BYTES} only for the video stream:
+@example
+ffmpeg -i in.mkv -keep_metadata:s:v NUMBER_OF_BYTES out.mkv
+@end example
+
+Some keys are stored in the metadata with a suffix (e.g.
+@code{NUMBER_OF_BYTES-eng}). Specifying the unsuffixed family name (e.g.
+@code{NUMBER_OF_BYTES}) keeps all variants. To keep only a specific one,
+specify the full key explicitly:
+@example
+ffmpeg -i in.mkv -keep_metadata:s:v NUMBER_OF_BYTES-eng out.mkv
+@end example
+
+Some (such as @code{major_brand}, @code{minor_version}, and
+@code{compatible_brands}) are always removed regardless of re-encoding, because
+they describe the source container and are meaningless in the output.
+@code{-keep_metadata} applies to those keys even when stream-copying.
+
+Re-encoding-only keys (such as encoder tags and Matroska stream statistics) are
+removed from a stream's metadata only when that stream is being re-encoded, and
+from format metadata only when at least one audio or video stream is 
re-encoded.
+
+Only format and stream metadata are filtered. Chapter and program metadata
+are never modified by this mechanism.
+
 @item -disposition[:stream_specifier] @var{value} (@emph{output,per-stream})
 Sets the disposition flags for a stream.
 
diff --git a/fftools/ffmpeg.h b/fftools/ffmpeg.h
index c44aaf6032..a45d004fdf 100644
--- a/fftools/ffmpeg.h
+++ b/fftools/ffmpeg.h
@@ -193,6 +193,7 @@ typedef struct OptionsContext {
     AVDictionary *streamid;
 
     SpecifierOptList metadata;
+    SpecifierOptList keep_metadata;
     SpecifierOptList max_frames;
     SpecifierOptList bitstream_filters;
     SpecifierOptList codec_tags;
diff --git a/fftools/ffmpeg_mux_init.c b/fftools/ffmpeg_mux_init.c
index 79082f3018..7a238b10ff 100644
--- a/fftools/ffmpeg_mux_init.c
+++ b/fftools/ffmpeg_mux_init.c
@@ -2962,6 +2962,150 @@ static int copy_metadata(Muxer *mux, AVFormatContext 
*ic,
     return 0;
 }
 
+#define REENC_MASK(type)  (1u << (type))
+#define REENC_AUDIO_ONLY  REENC_MASK(AVMEDIA_TYPE_AUDIO)
+#define REENC_VIDEO_ONLY  REENC_MASK(AVMEDIA_TYPE_VIDEO)
+#define REENC_ANY         (REENC_AUDIO_ONLY | REENC_VIDEO_ONLY)
+
+static const struct {
+    const char *key;
+    int         flags;
+    unsigned    reenc_mask; /* 0 = always delete; non-zero = bit-mask of
+                             * REENC_* values whose re-encoding triggers
+                             * deletion of this key */
+} reenc_delete_keys[] = {
+    // Note: "encoder" is intentionally absent — set_encoder_id() stamps it
+    // after copy_meta() runs, so it always reflects the current encoder.
+
+    // iTunes gapless playback: encoder-specific sample counts and padding;
+    // gapless_playback is the M4A/MOV equivalent of iTunPGAP
+    { "iTunPGAP",                     0,                     REENC_AUDIO_ONLY 
},
+    { "iTunSMPB",                     0,                     REENC_AUDIO_ONLY 
},
+    { "gapless_playback",             0,                     REENC_AUDIO_ONLY 
},
+    // iTunes Sound Check: peak amplitude computed from the original waveform
+    { "iTunNORM",                     0,                     REENC_AUDIO_ONLY 
},
+    // encoding provenance: describe the original encoder, not the new one
+    { "encoded_by",                   0,                     REENC_ANY },
+    { "encoding_tool",                0,                     REENC_ANY },
+    // MOV/MP4 stream: vendor 4CC identifies the original encoder
+    { "vendor_id",                    0,                     REENC_ANY },
+    // Matroska stream stats written by mkvmerge; all are invalidated by 
re-encoding
+    { "BPS",                          AV_DICT_IGNORE_SUFFIX, REENC_ANY },
+    { "DURATION",                     AV_DICT_IGNORE_SUFFIX, REENC_ANY },
+    { "NUMBER_OF_BYTES",              AV_DICT_IGNORE_SUFFIX, REENC_ANY },
+    { "NUMBER_OF_FRAMES",             AV_DICT_IGNORE_SUFFIX, REENC_ANY },
+    { "_STATISTICS_TAGS",             AV_DICT_IGNORE_SUFFIX, REENC_ANY },
+    { "_STATISTICS_WRITING_APP",      AV_DICT_IGNORE_SUFFIX, REENC_ANY },
+    { "_STATISTICS_WRITING_DATE_UTC", AV_DICT_IGNORE_SUFFIX, REENC_ANY },
+
+    // MOV/MP4: source container brand written by the demuxer; muxer ignores
+    // these keys and writes its own ftyp, so they always describe the source 
file
+    { "major_brand",                  0,                     0 },
+    { "minor_version",                0,                     0 },
+    { "compatible_brands",            0,                     0 },
+    { NULL }
+};
+
+static int meta_spec_matches(void *log_ctx, AVFormatContext *oc, AVStream *st,
+                             const char *spec)
+{
+    char type;
+    int index = 0;
+    const char *stream_spec = NULL;
+
+    if (parse_meta_type(log_ctx, spec, &type, &index, &stream_spec) < 0)
+        return 0;
+
+    if (*spec) {
+        if (type == 'g' && st)
+            return 0;
+        if (type == 's') {
+            int ret;
+            if (!st)
+                return 0;
+            ret = check_stream_specifier(oc, st, stream_spec);
+            return ret < 0 ? ret : ret > 0;
+        }
+        if (type == 'c' || type == 'p')
+            return 0;
+    }
+    return 1;
+}
+
+static int reenc_delete_metadata_key(const OptionsContext *o, void *log_ctx,
+                                     AVFormatContext *oc, AVStream *st,
+                                     const char *family, const char *key, int 
flags)
+{
+    for (int i = 0; i < o->keep_metadata.nb_opt; i++) {
+        int ret = meta_spec_matches(log_ctx, oc, st, 
o->keep_metadata.opt[i].specifier);
+        if (ret < 0)
+            return ret;
+        if (!ret)
+            continue;
+        const char *keep = o->keep_metadata.opt[i].u.str;
+        if (flags & AV_DICT_IGNORE_SUFFIX) {
+            /* accept the unsuffixed family name (e.g. NUMBER_OF_BYTES keeps
+             * NUMBER_OF_BYTES-eng) or the exact matched key; an arbitrary
+             * prefix like NUMBER does not match NUMBER_OF_BYTES-eng */
+            if (!strcmp(keep, family) || !strcmp(keep, key))
+                return 0;
+        } else {
+            if (!strcmp(key, keep))
+                return 0;
+        }
+    }
+    for (int i = 0; i < o->metadata.nb_opt; i++) {
+        int ret;
+        /* plain -metadata (empty specifier) applies to global metadata only,
+         * matching of_add_metadata(); don't let it suppress stream-level 
pruning */
+        if (!*o->metadata.opt[i].specifier && st)
+            continue;
+        ret = meta_spec_matches(log_ctx, oc, st, o->metadata.opt[i].specifier);
+        if (ret < 0)
+            return ret;
+        if (!ret)
+            continue;
+        size_t klen = strcspn(o->metadata.opt[i].u.str, "=");
+        if (!strncmp(key, o->metadata.opt[i].u.str, klen) && key[klen] == '\0')
+            return 0;
+    }
+    return 1;
+}
+
+static int reenc_delete_stale_metadata(const OptionsContext *o, void *log_ctx,
+                                       AVFormatContext *oc, AVStream *st,
+                                       AVDictionary **dict, const char *kind,
+                                       unsigned reenc_mask)
+{
+    for (int i = 0; reenc_delete_keys[i].key; i++) {
+        const char *key   = reenc_delete_keys[i].key;
+        int         flags = reenc_delete_keys[i].flags;
+        const AVDictionaryEntry *e;
+        int ret;
+
+        if (reenc_delete_keys[i].reenc_mask && 
!(reenc_delete_keys[i].reenc_mask & reenc_mask))
+            continue;
+
+        e = NULL;
+        while ((e = av_dict_get(*dict, key, e, flags | AV_DICT_MATCH_CASE))) {
+            ret = reenc_delete_metadata_key(o, log_ctx, oc, st, key, e->key, 
flags);
+            if (ret < 0)
+                return ret;
+            if (!ret)
+                continue;
+            if (reenc_mask & reenc_delete_keys[i].reenc_mask)
+                av_log(log_ctx, AV_LOG_WARNING,
+                       "Discarding %s metadata '%s' because %s stream is being 
"
+                       "re-encoded. Use '-keep_metadata %s' to keep it.\n",
+                       kind, e->key,
+                       !strcmp(kind, "stream") ? "the" : "a", e->key);
+            av_dict_set(dict, e->key, NULL, 0);
+            e = NULL;
+        }
+    }
+    return 0;
+}
+
 static int copy_meta(Muxer *mux, const OptionsContext *o)
 {
     OutputFile      *of = &mux->of;
@@ -3021,6 +3165,42 @@ static int copy_meta(Muxer *mux, const OptionsContext *o)
         av_dict_set(&oc->metadata, "company_name", NULL, 0);
         av_dict_set(&oc->metadata, "product_name", NULL, 0);
         av_dict_set(&oc->metadata, "product_version", NULL, 0);
+
+    }
+    for (int i = 0; i < o->keep_metadata.nb_opt; i++) {
+        char type;
+        int index = 0;
+        const char *stream_spec = NULL;
+        const char *spec = o->keep_metadata.opt[i].specifier;
+        ret = parse_meta_type(mux, spec, &type, &index, &stream_spec);
+        if (ret < 0)
+            return ret;
+        if (type == 'c' || type == 'p') {
+            av_log(mux, AV_LOG_WARNING,
+                   "-keep_metadata:%s: chapter and program metadata filtering "
+                   "is not supported and will be ignored.\n", spec);
+        } else if (type == 's') {
+            for (int j = 0; j < oc->nb_streams; j++) {
+                ret = check_stream_specifier(oc, oc->streams[j], stream_spec);
+                if (ret < 0)
+                    return ret;
+            }
+        }
+    }
+
+    /* reenc_mask keys only apply when an audio/video stream is re-encoded;
+     * subtitle/attachment re-encodes do not affect format-level tags.
+     * Runs unconditionally so -map_metadata does not bypass the pruning. */
+    {
+        unsigned reenc_mask = 0;
+        for (int i = 0; i < of->nb_streams; i++) {
+            OutputStream *ost = of->streams[i];
+            if (ost->enc)
+                reenc_mask |= REENC_MASK(ost->st->codecpar->codec_type);
+        }
+        ret = reenc_delete_stale_metadata(o, mux, oc, NULL, &oc->metadata, 
"format", reenc_mask);
+        if (ret < 0)
+            return ret;
     }
     if (!metadata_streams_manual)
         for (int i = 0; i < of->nb_streams; i++) {
@@ -3030,6 +3210,16 @@ static int copy_meta(Muxer *mux, const OptionsContext *o)
                 continue;
             av_dict_copy(&ost->st->metadata, ost->ist->st->metadata, 
AV_DICT_DONT_OVERWRITE);
         }
+    /* runs unconditionally so -map_metadata does not bypass the pruning;
+     * applies to all output streams, including filter outputs without 
ost->ist */
+    for (int i = 0; i < of->nb_streams; i++) {
+        OutputStream *ost = of->streams[i];
+
+        ret = reenc_delete_stale_metadata(o, ost, oc, ost->st, 
&ost->st->metadata, "stream",
+                                          ost->enc ? 
REENC_MASK(ost->st->codecpar->codec_type) : 0);
+        if (ret < 0)
+            return ret;
+    }
 
     return 0;
 }
diff --git a/fftools/ffmpeg_opt.c b/fftools/ffmpeg_opt.c
index 2c362c64af..4e05e2c56b 100644
--- a/fftools/ffmpeg_opt.c
+++ b/fftools/ffmpeg_opt.c
@@ -1631,6 +1631,9 @@ const OptionDef options[] = {
     { "metadata",               OPT_TYPE_STRING, OPT_SPEC | OPT_OUTPUT,
         { .off = OFFSET(metadata) },
         "add metadata", "key=value" },
+    { "keep_metadata",          OPT_TYPE_STRING, OPT_SPEC | OPT_OUTPUT,
+        { .off = OFFSET(keep_metadata) },
+        "keep metadata key from input when re-encoding", "key" },
     { "program",                OPT_TYPE_STRING, OPT_SPEC | OPT_EXPERT | 
OPT_OUTPUT,
         { .off = OFFSET(program) },
         "add program with specified streams", "title=string:st=number..." },
diff --git a/tests/fate/id3v2.mak b/tests/fate/id3v2.mak
index 7cf38b1eb2..8835211f01 100644
--- a/tests/fate/id3v2.mak
+++ b/tests/fate/id3v2.mak
@@ -5,6 +5,16 @@ FATE_ID3V2_FFMPEG-$(CONFIG_MP3_DEMUXER) += 
fate-id3v2-invalid-tags
 fate-id3v2-invalid-tags: CMD = run $(FFMPEG) -nostdin -hide_banner -i 
$(TARGET_SAMPLES)/id3v2/invalid-tags.mp3 -f null - || true
 fate-id3v2-invalid-tags: CMP = null
 
+FATE_ID3V2_FFMPEG-$(CONFIG_MP3_DEMUXER) += 
fate-id3v2-keep-metadata-invalid-type
+fate-id3v2-keep-metadata-invalid-type: CMD = run $(FFMPEG) -nostdin 
-hide_banner -i $(TARGET_SAMPLES)/gapless/gapless-itunes.mp3 -c copy 
-keep_metadata:x vendor_id -f null - ; true
+fate-id3v2-keep-metadata-invalid-type: CMP = grep
+fate-id3v2-keep-metadata-invalid-type: REF = Invalid metadata type x
+
+FATE_ID3V2_FFMPEG-$(CONFIG_MP3_DEMUXER) += 
fate-id3v2-keep-metadata-invalid-stream-spec
+fate-id3v2-keep-metadata-invalid-stream-spec: CMD = run $(FFMPEG) -nostdin 
-hide_banner -i $(TARGET_SAMPLES)/gapless/gapless-itunes.mp3 -c copy 
-keep_metadata:s:bogus vendor_id -f null - ; true
+fate-id3v2-keep-metadata-invalid-stream-spec: CMP = grep
+fate-id3v2-keep-metadata-invalid-stream-spec: REF = Trailing garbage at the 
end of a stream specifier: bogus
+
 FATE_ID3V2_FFMPEG_FFPROBE-$(call REMUX, MP3) += fate-id3v2-priv-remux
 fate-id3v2-priv-remux: CMD = transcode mp3 
$(TARGET_SAMPLES)/id3v2/id3v2_priv.mp3 mp3 "-c copy" "-c copy -t 0.1" 
"-show_entries format_tags"
 
@@ -25,10 +35,21 @@ fate-id3v2-txxx: CMD = run_with_temp "$(FFMPEG) -nostdin 
-hide_banner -loglevel
 FATE_ID3V2_FFMPEG_FFPROBE-$(call ENCDEC, AAC MP3, NUT) += 
fate-id3v2-reenc-delete-metadata
 fate-id3v2-reenc-delete-metadata: CMD = transcode mp3 
$(TARGET_SAMPLES)/gapless/gapless-itunes.mp3 nut "-c:a aac -bitexact -t 0.1" 
"-c copy -t 0.1" "-show_entries format_tags" "" "" "" null
 
+FATE_ID3V2_FFMPEG_FFPROBE-$(call ENCDEC, AAC MP3, NUT) += 
fate-id3v2-reenc-delete-metadata-keep
+fate-id3v2-reenc-delete-metadata-keep: CMD = transcode mp3 
$(TARGET_SAMPLES)/gapless/gapless-itunes.mp3 nut "-c:a aac -bitexact 
-keep_metadata iTunSMPB -t 0.1" "-c copy -t 0.1" "-show_entries format_tags" "" 
"" "" null
+
 # -map_metadata must not bypass stale metadata pruning
 FATE_ID3V2_FFMPEG_FFPROBE-$(call ENCDEC, AAC MP3, NUT) += 
fate-id3v2-reenc-delete-metadata-map-metadata
 fate-id3v2-reenc-delete-metadata-map-metadata: CMD = transcode mp3 
$(TARGET_SAMPLES)/gapless/gapless-itunes.mp3 nut "-c:a aac -bitexact 
-map_metadata 0 -t 0.1" "-c copy -t 0.1" "-show_entries format_tags" "" "" "" 
null
 
+# :g specifier targets format metadata — iTunSMPB lives there, so it should be 
kept
+FATE_ID3V2_FFMPEG_FFPROBE-$(call ENCDEC, AAC MP3, NUT) += 
fate-id3v2-reenc-delete-metadata-keep-format
+fate-id3v2-reenc-delete-metadata-keep-format: CMD = transcode mp3 
$(TARGET_SAMPLES)/gapless/gapless-itunes.mp3 nut "-c:a aac -bitexact 
-keep_metadata:g iTunSMPB -t 0.1" "-c copy -t 0.1" "-show_entries format_tags" 
"" "" "" null
+
+# :s:a specifier targets stream metadata — iTunSMPB is format-level, so it 
should still be deleted
+FATE_ID3V2_FFMPEG_FFPROBE-$(call ENCDEC, AAC MP3, NUT) += 
fate-id3v2-reenc-delete-metadata-keep-stream
+fate-id3v2-reenc-delete-metadata-keep-stream: CMD = transcode mp3 
$(TARGET_SAMPLES)/gapless/gapless-itunes.mp3 nut "-c:a aac -bitexact 
-keep_metadata:s:a iTunSMPB -t 0.1" "-c copy -t 0.1" "-show_entries 
format_tags" "" "" "" null
+
 FATE_ID3V2_FFMPEG_FFPROBE-$(call REMUX, MP3) += fate-id3v2-reenc-remux-keep
 fate-id3v2-reenc-remux-keep: CMD = transcode mp3 
$(TARGET_SAMPLES)/gapless/gapless-itunes.mp3 mp3 "-c copy" "-c copy -t 0.1" 
"-show_entries format_tags" "" "" "" null
 
diff --git a/tests/fate/matroska.mak b/tests/fate/matroska.mak
index b68f791c5e..d350b13d8b 100644
--- a/tests/fate/matroska.mak
+++ b/tests/fate/matroska.mak
@@ -300,6 +300,29 @@ FATE_MATROSKA_FFPROBE-$(call ALLYES, MATROSKA_DEMUXER 
HEVC_DECODER) += fate-matr
 FATE_MATROSKA_FFMPEG_FFPROBE-$(call TRANSCODE, MPEG2VIDEO HEVC, NUT MATROSKA, 
SCALE_FILTER) += fate-matroska-reenc-delete-metadata
 fate-matroska-reenc-delete-metadata: CMD = transcode matroska 
$(TARGET_SAMPLES)/mkv/hdr10tags-both.mkv nut "-map 0:v:0 -vf scale=iw:ih -c:v 
mpeg2video -bitexact" "-c copy -t 0.1" "-show_entries format_tags:stream_tags" 
"" "" "" null
 
+FATE_MATROSKA_FFMPEG_FFPROBE-$(call TRANSCODE, MPEG2VIDEO HEVC, NUT MATROSKA, 
SCALE_FILTER) += fate-matroska-reenc-delete-metadata-keep
+fate-matroska-reenc-delete-metadata-keep: CMD = transcode matroska 
$(TARGET_SAMPLES)/mkv/hdr10tags-both.mkv nut "-map 0:v:0 -vf scale=iw:ih -c:v 
mpeg2video -bitexact -keep_metadata NUMBER_OF_BYTES" "-c copy -t 0.1" 
"-show_entries format_tags:stream_tags" "" "" "" null
+
+# :s:a:0 specifier — no audio stream in output, so NUMBER_OF_BYTES should 
still be deleted
+FATE_MATROSKA_FFMPEG_FFPROBE-$(call TRANSCODE, MPEG2VIDEO HEVC, NUT MATROSKA, 
SCALE_FILTER) += fate-matroska-reenc-delete-audio-metadata
+fate-matroska-reenc-delete-audio-metadata: CMD = transcode matroska 
$(TARGET_SAMPLES)/mkv/hdr10tags-both.mkv nut "-map 0:v:0 -vf scale=iw:ih -c:v 
mpeg2video -bitexact -keep_metadata:s:a:0 NUMBER_OF_BYTES" "-c copy -t 0.1" 
"-show_entries format_tags:stream_tags" "" "" "" null
+
+# :s:v specifier matches the re-encoded video stream — NUMBER_OF_BYTES should 
be kept
+FATE_MATROSKA_FFMPEG_FFPROBE-$(call TRANSCODE, MPEG2VIDEO HEVC, NUT MATROSKA, 
SCALE_FILTER) += fate-matroska-reenc-delete-metadata-keep-stream-video
+fate-matroska-reenc-delete-metadata-keep-stream-video: CMD = transcode 
matroska $(TARGET_SAMPLES)/mkv/hdr10tags-both.mkv nut "-map 0:v:0 -vf 
scale=iw:ih -c:v mpeg2video -bitexact -keep_metadata:s:v NUMBER_OF_BYTES" "-c 
copy -t 0.1" "-show_entries format_tags:stream_tags" "" "" "" null
+
+# suffixed key (NUMBER_OF_BYTES-eng) as seen in metadata output must also work 
as a keep arg
+FATE_MATROSKA_FFMPEG_FFPROBE-$(call TRANSCODE, MPEG2VIDEO HEVC, NUT MATROSKA, 
SCALE_FILTER) += fate-matroska-reenc-delete-metadata-keep-stream-video-suffix
+fate-matroska-reenc-delete-metadata-keep-stream-video-suffix: CMD = transcode 
matroska $(TARGET_SAMPLES)/mkv/hdr10tags-both.mkv nut "-map 0:v:0 -vf 
scale=iw:ih -c:v mpeg2video -bitexact -keep_metadata:s:v NUMBER_OF_BYTES-eng" 
"-c copy -t 0.1" "-show_entries format_tags:stream_tags" "" "" "" null
+
+# an arbitrary prefix of a family name (NUMBER) must not match NUMBER_OF_BYTES 
or NUMBER_OF_BYTES-eng
+FATE_MATROSKA_FFMPEG_FFPROBE-$(call TRANSCODE, MPEG2VIDEO HEVC, NUT MATROSKA, 
SCALE_FILTER) += fate-matroska-reenc-delete-metadata-keep-prefix-nomatch
+fate-matroska-reenc-delete-metadata-keep-prefix-nomatch: CMD = transcode 
matroska $(TARGET_SAMPLES)/mkv/hdr10tags-both.mkv nut "-map 0:v:0 -vf 
scale=iw:ih -c:v mpeg2video -bitexact -keep_metadata:s:v NUMBER" "-c copy -t 
0.1" "-show_entries format_tags:stream_tags" "" "" "" null
+
+# :s:v:1 specifier — video index 1 does not exist, so NUMBER_OF_BYTES should 
be deleted
+FATE_MATROSKA_FFMPEG_FFPROBE-$(call TRANSCODE, MPEG2VIDEO HEVC, NUT MATROSKA, 
SCALE_FILTER) += fate-matroska-reenc-delete-metadata-keep-stream-video1
+fate-matroska-reenc-delete-metadata-keep-stream-video1: CMD = transcode 
matroska $(TARGET_SAMPLES)/mkv/hdr10tags-both.mkv nut "-map 0:v:0 -vf 
scale=iw:ih -c:v mpeg2video -bitexact -keep_metadata:s:v:1 NUMBER_OF_BYTES" "-c 
copy -t 0.1" "-show_entries format_tags:stream_tags" "" "" "" null
+
 # -metadata:s:a:0 specifier must not suppress deletion on a non-matching 
(video) stream
 FATE_MATROSKA_FFMPEG_FFPROBE-$(call TRANSCODE, MPEG2VIDEO HEVC, NUT MATROSKA, 
SCALE_FILTER) += fate-matroska-reenc-delete-metadata-spec-scope
 fate-matroska-reenc-delete-metadata-spec-scope: CMD = transcode matroska 
$(TARGET_SAMPLES)/mkv/hdr10tags-both.mkv nut "-map 0:v:0 -vf scale=iw:ih -c:v 
mpeg2video -bitexact -metadata:s:a:0 NUMBER_OF_BYTES=custom" "-c copy -t 0.1" 
"-show_entries format_tags:stream_tags" "" "" "" null
diff --git a/tests/fate/mov.mak b/tests/fate/mov.mak
index 62b47baa4d..30f7cf665c 100644
--- a/tests/fate/mov.mak
+++ b/tests/fate/mov.mak
@@ -385,6 +385,11 @@ fate-mov-mp4-edst-remainder: CMD = stream_remux mov 
$(TARGET_SAMPLES)/audiomatch
 FATE_MOV_FFMPEG_FFPROBE-$(call ENCDEC, AAC AAC, NUT MOV) += 
fate-mov-reenc-delete-format-metadata
 fate-mov-reenc-delete-format-metadata: CMD = transcode mov 
$(TARGET_SAMPLES)/cover_art/Owner-iTunes_9.0.3.15.m4a nut "-map 0:a:0 -c:a aac 
-bitexact -t 0.1" "-c copy -t 0.1" "-show_entries format_tags" "" "" "" null
 
+# audio-only format tags (gapless_playback, iTunSMPB, iTunNORM) must survive 
when
+# only the cover-art video stream is re-encoded and the audio is stream-copied
+FATE_MOV_FFMPEG_FFPROBE-$(call ENCDEC, PNG, NUT MOV) += 
fate-mov-cover-reenc-keeps-audio-format-tags
+fate-mov-cover-reenc-keeps-audio-format-tags: CMD = transcode mov 
$(TARGET_SAMPLES)/cover_art/Owner-iTunes_9.0.3.15.m4a nut "-map 0:a:0 -c:a copy 
-map 0:v:0 -filter:v scale -c:v png -bitexact -t 0.1" "-c copy -t 0.1" 
"-show_entries format_tags" "" "" "" null
+
 # stream-level branding: vendor_id should be deleted on re-encode
 FATE_MOV_FFMPEG_FFPROBE-$(call ENCDEC, FLAC PCM_S16BE, NUT MOV) += 
fate-mov-reenc-delete-stream-metadata
 fate-mov-reenc-delete-stream-metadata: CMD = transcode mov 
$(TARGET_SAMPLES)/qt-surge-suite/surge-2-16-B-twos.mov nut "-c:a flac -bitexact 
-t 0.1" "-c copy -t 0.1" "-show_entries stream_tags" "" "" "" null
diff --git a/tests/ref/fate/caf-alac-remux b/tests/ref/fate/caf-alac-remux
index 63987239db..a77dedf0dd 100644
--- a/tests/ref/fate/caf-alac-remux
+++ b/tests/ref/fate/caf-alac-remux
@@ -1,5 +1,5 @@
-1f3ac6e905aa6bfee0d35c19a2400c26 *tests/data/fate/caf-alac-remux.caf
-1292684 tests/data/fate/caf-alac-remux.caf
+1aaad1d0c4a2fe9980bdb3625d74c8b4 *tests/data/fate/caf-alac-remux.caf
+1292637 tests/data/fate/caf-alac-remux.caf
 #extradata 0:       36, 0x562b05d8
 #tb 0: 1/44100
 #media_type 0: audio
@@ -10,17 +10,15 @@
 0,       4096,       4096,     4096,     6701, 0xa9ddc14e
 0,       8192,       8192,     4096,     6639, 0x3ccda8d6
 [FORMAT]
+TAG:album=OpenMusic
 TAG:track=5/13
-TAG:minor_version=0
-TAG:compatible_brands=M4A mp42isom
+TAG:genre=Rock
 TAG:disc=1
 TAG:title=Inside
 TAG:compilation=1
 TAG:gapless_playback=0
-TAG:genre=Rock
+TAG:album_artist=Maxwell Strait
 TAG:Encoding Params=vers
 TAG:iTunNORM= 000004DF 000004C2 00001E64 00001AB3 00000FB9 00000FB9 00006480 
00006480 00000FB9 00000B52
 TAG:artist=Maxwell Strait
-TAG:album_artist=Maxwell Strait
-TAG:album=OpenMusic
 [/FORMAT]
diff --git a/tests/ref/fate/cover-art-flac-remux 
b/tests/ref/fate/cover-art-flac-remux
index 7badb2544d..fad8a94272 100644
--- a/tests/ref/fate/cover-art-flac-remux
+++ b/tests/ref/fate/cover-art-flac-remux
@@ -1,5 +1,5 @@
-f41881b70a18d8405c1dd43ee8502349 *tests/data/fate/cover-art-flac-remux.flac
-964331 tests/data/fate/cover-art-flac-remux.flac
+61963e1df31cfa046f99d971a465d364 *tests/data/fate/cover-art-flac-remux.flac
+964133 tests/data/fate/cover-art-flac-remux.flac
 #extradata 0:       34, 0x8f1f0acf
 #tb 0: 1/44100
 #media_type 0: audio
@@ -92,18 +92,13 @@ TAG:comment=Publisher/Studio logotype
 TAG:title=White King Granulated Soap
 [/STREAM]
 [FORMAT]
-TAG:major_brand=M4A 
-TAG:minor_version=0
-TAG:compatible_brands=M4A mp42isom
+TAG:album=OpenMusic
+TAG:album_artist=Maxwell Strait
+TAG:artist=Maxwell Strait
 TAG:disc=1
 TAG:title=Inside
 TAG:compilation=1
-TAG:gapless_playback=0
 TAG:track=5/13
-TAG:Encoding Params=vers
-TAG:iTunNORM= 000004DF 000004C2 00001E64 00001AB3 00000FB9 00000FB9 00006480 
00006480 00000FB9 00000B52
-TAG:artist=Maxwell Strait
-TAG:album_artist=Maxwell Strait
-TAG:album=OpenMusic
 TAG:genre=Rock
+TAG:Encoding Params=vers
 [/FORMAT]
diff --git a/tests/ref/fate/cover-art-mp3-id3v2-remux 
b/tests/ref/fate/cover-art-mp3-id3v2-remux
index 42fe704470..ddc47c4988 100644
--- a/tests/ref/fate/cover-art-mp3-id3v2-remux
+++ b/tests/ref/fate/cover-art-mp3-id3v2-remux
@@ -1,5 +1,5 @@
-070ed1d95dc1bd365d68ae795966589f *tests/data/fate/cover-art-mp3-id3v2-remux.mp3
-346509 tests/data/fate/cover-art-mp3-id3v2-remux.mp3
+3a20f15563ed1d277f54562743f615de *tests/data/fate/cover-art-mp3-id3v2-remux.mp3
+346486 tests/data/fate/cover-art-mp3-id3v2-remux.mp3
 #tb 0: 1/14112000
 #media_type 0: audio
 #codec_id 0: mp3
diff --git a/tests/ref/fate/enhanced-flv-hevc b/tests/ref/fate/enhanced-flv-hevc
index 9e0af51b2a..80cedbcff3 100644
--- a/tests/ref/fate/enhanced-flv-hevc
+++ b/tests/ref/fate/enhanced-flv-hevc
@@ -1,5 +1,5 @@
-81199f98b1210eada2e7ff7ba11afd8c *tests/data/fate/enhanced-flv-hevc.flv
-3603038 tests/data/fate/enhanced-flv-hevc.flv
+6d8f2f8590bbcf9bd998b4420155412b *tests/data/fate/enhanced-flv-hevc.flv
+3602973 tests/data/fate/enhanced-flv-hevc.flv
 #extradata 0:      551, 0xb1ddcd66
 #extradata 1:        2, 0x00340022
 #tb 0: 1/1000
diff --git a/tests/ref/fate/enhanced-flv-multitrack 
b/tests/ref/fate/enhanced-flv-multitrack
index c825327ac8..71e0b54ab2 100644
--- a/tests/ref/fate/enhanced-flv-multitrack
+++ b/tests/ref/fate/enhanced-flv-multitrack
@@ -1,5 +1,5 @@
-fd79a2d2690c878a3b06cc66c4441e69 *tests/data/fate/enhanced-flv-multitrack.flv
-4697015 tests/data/fate/enhanced-flv-multitrack.flv
+347f5ababa03ba1e3ef62209f2355220 *tests/data/fate/enhanced-flv-multitrack.flv
+4696936 tests/data/fate/enhanced-flv-multitrack.flv
 #extradata 0:       46, 0x6fed1203
 #extradata 1:       26, 0x5e13070a
 #extradata 2:       12, 0x044200af
diff --git a/tests/ref/fate/generic-tags-remux-asf 
b/tests/ref/fate/generic-tags-remux-asf
index 54420ed21a..a9d6b39559 100644
--- a/tests/ref/fate/generic-tags-remux-asf
+++ b/tests/ref/fate/generic-tags-remux-asf
@@ -1,5 +1,5 @@
-b80387bd80ec592cb99df5de8ef60732 *tests/data/fate/generic-tags-remux-asf.asf
-20596 tests/data/fate/generic-tags-remux-asf.asf
+e4420ac5019d13273b1d7c068f717705 *tests/data/fate/generic-tags-remux-asf.asf
+20556 tests/data/fate/generic-tags-remux-asf.asf
 #extradata 0:        4, 0x00020001
 #tb 0: 1/1000
 #media_type 0: audio
@@ -40,11 +40,10 @@ TAG:copyright=2011 M83 Recording Inc
 TAG:date=2011-10-17
 TAG:disc=1
 TAG:disc_subtitle=Hurry Up
-TAG:encoded_by=Tau
+TAG:track=1/11
 TAG:filename=Intro.mp3
 TAG:genre=Electronic
 TAG:language=eng
 TAG:performer=Anthony Gonzalez
 TAG:title=Intro
-TAG:track=1/11
 [/FORMAT]
diff --git a/tests/ref/fate/generic-tags-remux-riff 
b/tests/ref/fate/generic-tags-remux-riff
index c25c3c12dd..322258e8fc 100644
--- a/tests/ref/fate/generic-tags-remux-riff
+++ b/tests/ref/fate/generic-tags-remux-riff
@@ -1,5 +1,5 @@
-9571b4873186aae56de614a2aada6150 *tests/data/fate/generic-tags-remux-riff.wav
-246 tests/data/fate/generic-tags-remux-riff.wav
+6ad807e593f65a3846d688a92638b0f5 *tests/data/fate/generic-tags-remux-riff.wav
+234 tests/data/fate/generic-tags-remux-riff.wav
 #tb 0: 1/44100
 #media_type 0: audio
 #codec_id 0: pcm_s16le
@@ -15,5 +15,4 @@ TAG:language=eng
 TAG:title=Intro
 TAG:album=Hurry Up, We're Dreaming
 TAG:track=1/11
-TAG:encoded_by=Tau
 [/FORMAT]
diff --git a/tests/ref/fate/generic-tags-remux-vorbiscomment 
b/tests/ref/fate/generic-tags-remux-vorbiscomment
index c5737bbf96..73ebba45a5 100644
--- a/tests/ref/fate/generic-tags-remux-vorbiscomment
+++ b/tests/ref/fate/generic-tags-remux-vorbiscomment
@@ -1,5 +1,5 @@
-e9e51f486ae8907794c46377678c5203 
*tests/data/fate/generic-tags-remux-vorbiscomment.flac
-8646 tests/data/fate/generic-tags-remux-vorbiscomment.flac
+00ad19f1aff315184c627fa2edb0c225 
*tests/data/fate/generic-tags-remux-vorbiscomment.flac
+8628 tests/data/fate/generic-tags-remux-vorbiscomment.flac
 #extradata 0:       34, 0x93a20b79
 #tb 0: 1/44100
 #media_type 0: audio
@@ -16,12 +16,11 @@ TAG:copyright=2011 M83 Recording Inc
 TAG:date=2011-10-17
 TAG:disc=1
 TAG:disc_subtitle=Hurry Up
-TAG:encoded_by=Tau
+TAG:track=1/11
 TAG:filename=Intro.mp3
 TAG:genre=Electronic
 TAG:language=eng
 TAG:performer=Anthony Gonzalez
 TAG:publisher=M83 Recording Inc
 TAG:title=Intro
-TAG:track=1/11
 [/FORMAT]
diff --git a/tests/ref/fate/h264-bsf-redundant-pps-side-data 
b/tests/ref/fate/h264-bsf-redundant-pps-side-data
index da27c3fe59..a8570cf51e 100644
--- a/tests/ref/fate/h264-bsf-redundant-pps-side-data
+++ b/tests/ref/fate/h264-bsf-redundant-pps-side-data
@@ -1,5 +1,5 @@
-18c64ec6b4f0cc39c5f8f3564b372fef 
*tests/data/fate/h264-bsf-redundant-pps-side-data.nut
-596084 tests/data/fate/h264-bsf-redundant-pps-side-data.nut
+3e92e076f369fd6a3d7a120d41d15918 
*tests/data/fate/h264-bsf-redundant-pps-side-data.nut
+596025 tests/data/fate/h264-bsf-redundant-pps-side-data.nut
 #extradata 0:       34, 0x850408e3
 #tb 0: 1/48000
 #media_type 0: video
diff --git a/tests/ref/fate/h264-bsf-redundant-pps-side-data2 
b/tests/ref/fate/h264-bsf-redundant-pps-side-data2
index 99918b80e4..287b10c025 100644
--- a/tests/ref/fate/h264-bsf-redundant-pps-side-data2
+++ b/tests/ref/fate/h264-bsf-redundant-pps-side-data2
@@ -1,5 +1,5 @@
-f94ed2c25b6bbe63160743f08de33665 
*tests/data/fate/h264-bsf-redundant-pps-side-data2.nut
-5138 tests/data/fate/h264-bsf-redundant-pps-side-data2.nut
+97b7e9c6ba90137731c672382862fac7 
*tests/data/fate/h264-bsf-redundant-pps-side-data2.nut
+5067 tests/data/fate/h264-bsf-redundant-pps-side-data2.nut
 #tb 0: 1/25
 #media_type 0: video
 #codec_id 0: rawvideo
diff --git a/tests/ref/fate/id3v2-reenc-delete-metadata 
b/tests/ref/fate/id3v2-reenc-delete-metadata
index a517621fc0..608d7fe7e4 100644
--- a/tests/ref/fate/id3v2-reenc-delete-metadata
+++ b/tests/ref/fate/id3v2-reenc-delete-metadata
@@ -1,9 +1,5 @@
-9b854b7dbe3fb779cd75f131e52372b0 
*tests/data/fate/id3v2-reenc-delete-metadata.nut
-2667 tests/data/fate/id3v2-reenc-delete-metadata.nut
+31f137d9ea26baee95f75083ac87f60a 
*tests/data/fate/id3v2-reenc-delete-metadata.nut
+2396 tests/data/fate/id3v2-reenc-delete-metadata.nut
 [FORMAT]
 TAG:title=7rk
-TAG:iTunPGAP=0
-TAG:encoded_by=iTunes 12.7.0.166
-TAG:iTunNORM= 00000362 000004C0 0000308F 00003CC5 00000DAC 00000DAC 00007D14 
00007AC9 000007C1 0000175E
-TAG:iTunSMPB= 00000000 00000210 0000086A 0000000000066486 00000000 0002DA9D 
00000000 00000000 00000000 00000000 00000000 00000000
 [/FORMAT]
diff --git a/tests/ref/fate/id3v2-reenc-delete-metadata-keep 
b/tests/ref/fate/id3v2-reenc-delete-metadata-keep
new file mode 100644
index 0000000000..c1562da559
--- /dev/null
+++ b/tests/ref/fate/id3v2-reenc-delete-metadata-keep
@@ -0,0 +1,6 @@
+805cef2308c41ebbf8e772f166aafe2e 
*tests/data/fate/id3v2-reenc-delete-metadata-keep.nut
+2524 tests/data/fate/id3v2-reenc-delete-metadata-keep.nut
+[FORMAT]
+TAG:title=7rk
+TAG:iTunSMPB= 00000000 00000210 0000086A 0000000000066486 00000000 0002DA9D 
00000000 00000000 00000000 00000000 00000000 00000000
+[/FORMAT]
diff --git a/tests/ref/fate/id3v2-reenc-delete-metadata-keep-format 
b/tests/ref/fate/id3v2-reenc-delete-metadata-keep-format
new file mode 100644
index 0000000000..d8acf33159
--- /dev/null
+++ b/tests/ref/fate/id3v2-reenc-delete-metadata-keep-format
@@ -0,0 +1,6 @@
+805cef2308c41ebbf8e772f166aafe2e 
*tests/data/fate/id3v2-reenc-delete-metadata-keep-format.nut
+2524 tests/data/fate/id3v2-reenc-delete-metadata-keep-format.nut
+[FORMAT]
+TAG:title=7rk
+TAG:iTunSMPB= 00000000 00000210 0000086A 0000000000066486 00000000 0002DA9D 
00000000 00000000 00000000 00000000 00000000 00000000
+[/FORMAT]
diff --git a/tests/ref/fate/id3v2-reenc-delete-metadata-keep-stream 
b/tests/ref/fate/id3v2-reenc-delete-metadata-keep-stream
new file mode 100644
index 0000000000..02827345a3
--- /dev/null
+++ b/tests/ref/fate/id3v2-reenc-delete-metadata-keep-stream
@@ -0,0 +1,5 @@
+31f137d9ea26baee95f75083ac87f60a 
*tests/data/fate/id3v2-reenc-delete-metadata-keep-stream.nut
+2396 tests/data/fate/id3v2-reenc-delete-metadata-keep-stream.nut
+[FORMAT]
+TAG:title=7rk
+[/FORMAT]
diff --git a/tests/ref/fate/id3v2-reenc-delete-metadata-map-metadata 
b/tests/ref/fate/id3v2-reenc-delete-metadata-map-metadata
index 544fda3b9b..ec640b7b55 100644
--- a/tests/ref/fate/id3v2-reenc-delete-metadata-map-metadata
+++ b/tests/ref/fate/id3v2-reenc-delete-metadata-map-metadata
@@ -1,9 +1,5 @@
-9b854b7dbe3fb779cd75f131e52372b0 
*tests/data/fate/id3v2-reenc-delete-metadata-map-metadata.nut
-2667 tests/data/fate/id3v2-reenc-delete-metadata-map-metadata.nut
+31f137d9ea26baee95f75083ac87f60a 
*tests/data/fate/id3v2-reenc-delete-metadata-map-metadata.nut
+2396 tests/data/fate/id3v2-reenc-delete-metadata-map-metadata.nut
 [FORMAT]
 TAG:title=7rk
-TAG:iTunPGAP=0
-TAG:encoded_by=iTunes 12.7.0.166
-TAG:iTunNORM= 00000362 000004C0 0000308F 00003CC5 00000DAC 00000DAC 00007D14 
00007AC9 000007C1 0000175E
-TAG:iTunSMPB= 00000000 00000210 0000086A 0000000000066486 00000000 0002DA9D 
00000000 00000000 00000000 00000000 00000000 00000000
 [/FORMAT]
diff --git a/tests/ref/fate/matroska-alac-remux 
b/tests/ref/fate/matroska-alac-remux
index 1e7a5b4c8e..d7d6eba47d 100644
--- a/tests/ref/fate/matroska-alac-remux
+++ b/tests/ref/fate/matroska-alac-remux
@@ -1,5 +1,5 @@
-6075eb35f53692596194f3b0175cb184 *tests/data/fate/matroska-alac-remux.matroska
-1293794 tests/data/fate/matroska-alac-remux.matroska
+8c3da576105e9c29451855520c1c68d2 *tests/data/fate/matroska-alac-remux.matroska
+1293709 tests/data/fate/matroska-alac-remux.matroska
 #extradata 0:       36, 0x562b05d8
 #tb 0: 1/1000
 #media_type 0: audio
@@ -159,9 +159,9 @@ DISPOSITION:multilayer=0
 TAG:title=Inside
 TAG:encoder=Lavf
 TAG:creation_time=2009-01-25T16:08:26.000000Z
-TAG:MAJOR_BRAND=M4A 
-TAG:MINOR_VERSION=0
-TAG:COMPATIBLE_BRANDS=M4A mp42isom
+TAG:track=5/13
+TAG:GENRE=Rock
+TAG:ALBUM=OpenMusic
 TAG:DISC=1
 TAG:COMPILATION=1
 TAG:GAPLESS_PLAYBACK=0
@@ -169,7 +169,4 @@ TAG:ENCODING_PARAMS=vers
 TAG:ITUNNORM= 000004DF 000004C2 00001E64 00001AB3 00000FB9 00000FB9 00006480 
00006480 00000FB9 00000B52
 TAG:ARTIST=Maxwell Strait
 TAG:ALBUM_ARTIST=Maxwell Strait
-TAG:ALBUM=OpenMusic
-TAG:GENRE=Rock
-TAG:track=5/13
 [/FORMAT]
diff --git a/tests/ref/fate/matroska-crop b/tests/ref/fate/matroska-crop
index 12a863942c..46c2629ff7 100644
--- a/tests/ref/fate/matroska-crop
+++ b/tests/ref/fate/matroska-crop
@@ -1,5 +1,5 @@
-fc4932f90dfc955b55cfbdbb210fdd16 *tests/data/fate/matroska-crop.matroska
-355698 tests/data/fate/matroska-crop.matroska
+5e994da09d804380c7e0d7ce107e3eba *tests/data/fate/matroska-crop.matroska
+355603 tests/data/fate/matroska-crop.matroska
 #tb 0: 1/1
 #media_type 0: video
 #codec_id 0: rawvideo
diff --git a/tests/ref/fate/matroska-dovi-hvce-mp4-to-mkv 
b/tests/ref/fate/matroska-dovi-hvce-mp4-to-mkv
index 03e25e6be7..67c8641c73 100644
--- a/tests/ref/fate/matroska-dovi-hvce-mp4-to-mkv
+++ b/tests/ref/fate/matroska-dovi-hvce-mp4-to-mkv
@@ -1,5 +1,5 @@
-8c4a1c8c1c40d3c75e4019aa4f06a6cc 
*tests/data/fate/matroska-dovi-hvce-mp4-to-mkv.matroska
-668049 tests/data/fate/matroska-dovi-hvce-mp4-to-mkv.matroska
+77bf58de6cf4db39bfa33568459fcb1f 
*tests/data/fate/matroska-dovi-hvce-mp4-to-mkv.matroska
+667965 tests/data/fate/matroska-dovi-hvce-mp4-to-mkv.matroska
 #extradata 0:      187, 0x34a930cb
 #tb 0: 1/1000
 #media_type 0: video
diff --git a/tests/ref/fate/matroska-dovi-write-config7 
b/tests/ref/fate/matroska-dovi-write-config7
index edb6757c68..1e61e0a5a9 100644
--- a/tests/ref/fate/matroska-dovi-write-config7
+++ b/tests/ref/fate/matroska-dovi-write-config7
@@ -1,5 +1,5 @@
-adafbb4d021db027f4ae4ef7ca1c56c2 
*tests/data/fate/matroska-dovi-write-config7.matroska
-72640 tests/data/fate/matroska-dovi-write-config7.matroska
+a713f83f8b20954728839450a7697491 
*tests/data/fate/matroska-dovi-write-config7.matroska
+72543 tests/data/fate/matroska-dovi-write-config7.matroska
 #extradata 0:      116, 0x2b8d1669
 #extradata 1:      116, 0x2b8d1669
 #tb 0: 1/1000
diff --git a/tests/ref/fate/matroska-dovi-write-config8 
b/tests/ref/fate/matroska-dovi-write-config8
index 14aadd3f74..6b38ad8806 100644
--- a/tests/ref/fate/matroska-dovi-write-config8
+++ b/tests/ref/fate/matroska-dovi-write-config8
@@ -1,5 +1,5 @@
-414d901156c2bc727c7b9b389e3ca1b5 
*tests/data/fate/matroska-dovi-write-config8.matroska
-3600635 tests/data/fate/matroska-dovi-write-config8.matroska
+c10db6bfab4b9b2344c7e7f92e8998de 
*tests/data/fate/matroska-dovi-write-config8.matroska
+3600558 tests/data/fate/matroska-dovi-write-config8.matroska
 #extradata 0:      551, 0xb1ddcd66
 #extradata 1:        2, 0x00340022
 #tb 0: 1/1000
diff --git a/tests/ref/fate/matroska-non-rotation-displaymatrix 
b/tests/ref/fate/matroska-non-rotation-displaymatrix
index ad9d6e5b43..33871f4aea 100644
--- a/tests/ref/fate/matroska-non-rotation-displaymatrix
+++ b/tests/ref/fate/matroska-non-rotation-displaymatrix
@@ -1,5 +1,5 @@
-7294b73bcb1cd5059b8f413e2a4dab5b 
*tests/data/fate/matroska-non-rotation-displaymatrix.matroska
-7866 tests/data/fate/matroska-non-rotation-displaymatrix.matroska
+d7fdaa33d0ae71997ff4e60953741631 
*tests/data/fate/matroska-non-rotation-displaymatrix.matroska
+7775 tests/data/fate/matroska-non-rotation-displaymatrix.matroska
 #extradata 0:       34, 0xc1d10b51
 #tb 0: 1/1000
 #media_type 0: video
diff --git a/tests/ref/fate/matroska-reenc-chapter-nofilter 
b/tests/ref/fate/matroska-reenc-chapter-nofilter
index 89ca986a6c..c751461561 100644
--- a/tests/ref/fate/matroska-reenc-chapter-nofilter
+++ b/tests/ref/fate/matroska-reenc-chapter-nofilter
@@ -1,5 +1,5 @@
-ee93018a787b4e9620dd27207e267ad6 
*tests/data/fate/matroska-reenc-chapter-nofilter.nut
-28879 tests/data/fate/matroska-reenc-chapter-nofilter.nut
+9cb225d7afd5aec09f3b90501f74cc0f 
*tests/data/fate/matroska-reenc-chapter-nofilter.nut
+28587 tests/data/fate/matroska-reenc-chapter-nofilter.nut
 [CHAPTER]
 TAG:title=Schloß
 TAG:NUMBER_OF_FRAMES=test
diff --git a/tests/ref/fate/matroska-reenc-delete-audio-metadata 
b/tests/ref/fate/matroska-reenc-delete-audio-metadata
new file mode 100644
index 0000000000..6b1cd0feaa
--- /dev/null
+++ b/tests/ref/fate/matroska-reenc-delete-audio-metadata
@@ -0,0 +1,12 @@
+7d3bba1fefcd3b1e4c8037b372bc7a96 
*tests/data/fate/matroska-reenc-delete-audio-metadata.nut
+28564 tests/data/fate/matroska-reenc-delete-audio-metadata.nut
+[STREAM]
+TAG:encoder=Lavc mpeg2video
+TAG:language=spa
+[SIDE_DATA]
+[/SIDE_DATA]
+[/STREAM]
+[FORMAT]
+TAG:DESCRIPTION=Edition description
+TAG:TITLE=Edition title
+[/FORMAT]
diff --git a/tests/ref/fate/matroska-reenc-delete-metadata 
b/tests/ref/fate/matroska-reenc-delete-metadata
index c85b6d18d6..7b7196def4 100644
--- a/tests/ref/fate/matroska-reenc-delete-metadata
+++ b/tests/ref/fate/matroska-reenc-delete-metadata
@@ -1,15 +1,8 @@
-f3f1913ea5dffcff4789d178aed75e10 
*tests/data/fate/matroska-reenc-delete-metadata.nut
-28856 tests/data/fate/matroska-reenc-delete-metadata.nut
+7d3bba1fefcd3b1e4c8037b372bc7a96 
*tests/data/fate/matroska-reenc-delete-metadata.nut
+28564 tests/data/fate/matroska-reenc-delete-metadata.nut
 [STREAM]
 TAG:encoder=Lavc mpeg2video
 TAG:language=spa
-TAG:BPS-eng=216040
-TAG:DURATION-eng=00:00:00.400000000
-TAG:NUMBER_OF_FRAMES-eng=10
-TAG:NUMBER_OF_BYTES-eng=10802
-TAG:_STATISTICS_WRITING_APP-eng=mkvmerge v9.0.1 ('Mask Machine') 64bit
-TAG:_STATISTICS_WRITING_DATE_UTC-eng=2019-02-14 12:53:10
-TAG:_STATISTICS_TAGS-eng=BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
 [SIDE_DATA]
 [/SIDE_DATA]
 [/STREAM]
diff --git a/tests/ref/fate/matroska-reenc-delete-metadata-filter-output 
b/tests/ref/fate/matroska-reenc-delete-metadata-filter-output
index 2f82277ea3..2bcb4a65de 100644
--- a/tests/ref/fate/matroska-reenc-delete-metadata-filter-output
+++ b/tests/ref/fate/matroska-reenc-delete-metadata-filter-output
@@ -1,15 +1,8 @@
-9a7537256acd618b31e18a3d92fc907f 
*tests/data/fate/matroska-reenc-delete-metadata-filter-output.nut
-28835 tests/data/fate/matroska-reenc-delete-metadata-filter-output.nut
+09fe3f3cb1d5d5c474069833bca0d97b 
*tests/data/fate/matroska-reenc-delete-metadata-filter-output.nut
+28543 tests/data/fate/matroska-reenc-delete-metadata-filter-output.nut
 [STREAM]
 TAG:encoder=Lavc mpeg2video
 TAG:language=spa
-TAG:BPS-eng=216040
-TAG:DURATION-eng=00:00:00.400000000
-TAG:NUMBER_OF_FRAMES-eng=10
-TAG:NUMBER_OF_BYTES-eng=10802
-TAG:_STATISTICS_WRITING_APP-eng=mkvmerge v9.0.1 ('Mask Machine') 64bit
-TAG:_STATISTICS_WRITING_DATE_UTC-eng=2019-02-14 12:53:10
-TAG:_STATISTICS_TAGS-eng=BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
 [SIDE_DATA]
 [/SIDE_DATA]
 [/STREAM]
diff --git a/tests/ref/fate/matroska-reenc-delete-metadata-keep 
b/tests/ref/fate/matroska-reenc-delete-metadata-keep
new file mode 100644
index 0000000000..129b639110
--- /dev/null
+++ b/tests/ref/fate/matroska-reenc-delete-metadata-keep
@@ -0,0 +1,13 @@
+6796b46d997552df3f92fb51a4e628c9 
*tests/data/fate/matroska-reenc-delete-metadata-keep.nut
+28591 tests/data/fate/matroska-reenc-delete-metadata-keep.nut
+[STREAM]
+TAG:encoder=Lavc mpeg2video
+TAG:language=spa
+TAG:NUMBER_OF_BYTES-eng=10802
+[SIDE_DATA]
+[/SIDE_DATA]
+[/STREAM]
+[FORMAT]
+TAG:DESCRIPTION=Edition description
+TAG:TITLE=Edition title
+[/FORMAT]
diff --git a/tests/ref/fate/matroska-reenc-delete-metadata-keep-prefix-nomatch 
b/tests/ref/fate/matroska-reenc-delete-metadata-keep-prefix-nomatch
new file mode 100644
index 0000000000..a084e133ca
--- /dev/null
+++ b/tests/ref/fate/matroska-reenc-delete-metadata-keep-prefix-nomatch
@@ -0,0 +1,12 @@
+7d3bba1fefcd3b1e4c8037b372bc7a96 
*tests/data/fate/matroska-reenc-delete-metadata-keep-prefix-nomatch.nut
+28564 tests/data/fate/matroska-reenc-delete-metadata-keep-prefix-nomatch.nut
+[STREAM]
+TAG:encoder=Lavc mpeg2video
+TAG:language=spa
+[SIDE_DATA]
+[/SIDE_DATA]
+[/STREAM]
+[FORMAT]
+TAG:DESCRIPTION=Edition description
+TAG:TITLE=Edition title
+[/FORMAT]
diff --git a/tests/ref/fate/matroska-reenc-delete-metadata-keep-stream-video 
b/tests/ref/fate/matroska-reenc-delete-metadata-keep-stream-video
new file mode 100644
index 0000000000..95bbb34211
--- /dev/null
+++ b/tests/ref/fate/matroska-reenc-delete-metadata-keep-stream-video
@@ -0,0 +1,13 @@
+6796b46d997552df3f92fb51a4e628c9 
*tests/data/fate/matroska-reenc-delete-metadata-keep-stream-video.nut
+28591 tests/data/fate/matroska-reenc-delete-metadata-keep-stream-video.nut
+[STREAM]
+TAG:encoder=Lavc mpeg2video
+TAG:language=spa
+TAG:NUMBER_OF_BYTES-eng=10802
+[SIDE_DATA]
+[/SIDE_DATA]
+[/STREAM]
+[FORMAT]
+TAG:DESCRIPTION=Edition description
+TAG:TITLE=Edition title
+[/FORMAT]
diff --git 
a/tests/ref/fate/matroska-reenc-delete-metadata-keep-stream-video-suffix 
b/tests/ref/fate/matroska-reenc-delete-metadata-keep-stream-video-suffix
new file mode 100644
index 0000000000..a5208fe81b
--- /dev/null
+++ b/tests/ref/fate/matroska-reenc-delete-metadata-keep-stream-video-suffix
@@ -0,0 +1,13 @@
+6796b46d997552df3f92fb51a4e628c9 
*tests/data/fate/matroska-reenc-delete-metadata-keep-stream-video-suffix.nut
+28591 
tests/data/fate/matroska-reenc-delete-metadata-keep-stream-video-suffix.nut
+[STREAM]
+TAG:encoder=Lavc mpeg2video
+TAG:language=spa
+TAG:NUMBER_OF_BYTES-eng=10802
+[SIDE_DATA]
+[/SIDE_DATA]
+[/STREAM]
+[FORMAT]
+TAG:DESCRIPTION=Edition description
+TAG:TITLE=Edition title
+[/FORMAT]
diff --git a/tests/ref/fate/matroska-reenc-delete-metadata-keep-stream-video1 
b/tests/ref/fate/matroska-reenc-delete-metadata-keep-stream-video1
new file mode 100644
index 0000000000..7e4e59648d
--- /dev/null
+++ b/tests/ref/fate/matroska-reenc-delete-metadata-keep-stream-video1
@@ -0,0 +1,12 @@
+7d3bba1fefcd3b1e4c8037b372bc7a96 
*tests/data/fate/matroska-reenc-delete-metadata-keep-stream-video1.nut
+28564 tests/data/fate/matroska-reenc-delete-metadata-keep-stream-video1.nut
+[STREAM]
+TAG:encoder=Lavc mpeg2video
+TAG:language=spa
+[SIDE_DATA]
+[/SIDE_DATA]
+[/STREAM]
+[FORMAT]
+TAG:DESCRIPTION=Edition description
+TAG:TITLE=Edition title
+[/FORMAT]
diff --git a/tests/ref/fate/matroska-reenc-delete-metadata-spec-scope 
b/tests/ref/fate/matroska-reenc-delete-metadata-spec-scope
index 5ef47368db..d5e5d752b9 100644
--- a/tests/ref/fate/matroska-reenc-delete-metadata-spec-scope
+++ b/tests/ref/fate/matroska-reenc-delete-metadata-spec-scope
@@ -1,15 +1,8 @@
-f3f1913ea5dffcff4789d178aed75e10 
*tests/data/fate/matroska-reenc-delete-metadata-spec-scope.nut
-28856 tests/data/fate/matroska-reenc-delete-metadata-spec-scope.nut
+7d3bba1fefcd3b1e4c8037b372bc7a96 
*tests/data/fate/matroska-reenc-delete-metadata-spec-scope.nut
+28564 tests/data/fate/matroska-reenc-delete-metadata-spec-scope.nut
 [STREAM]
 TAG:encoder=Lavc mpeg2video
 TAG:language=spa
-TAG:BPS-eng=216040
-TAG:DURATION-eng=00:00:00.400000000
-TAG:NUMBER_OF_FRAMES-eng=10
-TAG:NUMBER_OF_BYTES-eng=10802
-TAG:_STATISTICS_WRITING_APP-eng=mkvmerge v9.0.1 ('Mask Machine') 64bit
-TAG:_STATISTICS_WRITING_DATE_UTC-eng=2019-02-14 12:53:10
-TAG:_STATISTICS_TAGS-eng=BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
 [SIDE_DATA]
 [/SIDE_DATA]
 [/STREAM]
diff --git a/tests/ref/fate/mov-reenc-delete-format-metadata 
b/tests/ref/fate/mov-cover-reenc-keeps-audio-format-tags
similarity index 69%
copy from tests/ref/fate/mov-reenc-delete-format-metadata
copy to tests/ref/fate/mov-cover-reenc-keeps-audio-format-tags
index 78ec5a8d54..a9a5af0581 100644
--- a/tests/ref/fate/mov-reenc-delete-format-metadata
+++ b/tests/ref/fate/mov-cover-reenc-keeps-audio-format-tags
@@ -1,21 +1,18 @@
-31a5be81f6278f7d62e901207bf59485 
*tests/data/fate/mov-reenc-delete-format-metadata.nut
-894 tests/data/fate/mov-reenc-delete-format-metadata.nut
+d9b9b84a20f350bc1d59a91cbba225de 
*tests/data/fate/mov-cover-reenc-keeps-audio-format-tags.nut
+45776 tests/data/fate/mov-cover-reenc-keeps-audio-format-tags.nut
 [FORMAT]
-TAG:major_brand=M4A 
-TAG:minor_version=0
-TAG:compatible_brands=M4A mp42isom
+TAG:date=2010
+TAG:disc=3/5
+TAG:track=2/5
 TAG:comment=The comment... 
 TAG:title=Owner
 TAG:compilation=0
 TAG:gapless_playback=0
-TAG:date=2010
+TAG:genre=Rock
 TAG:iTunSMPB= 00000000 00000840 000001FD 000000000013B5C3 00000000 00000000 
00000000 00000000 00000000 00000000 00000000 00000000
 TAG:Encoding Params=vers
 TAG:iTunNORM= 0000085B 0000072C 00006BC3 0000D444 00004EBA 00004ED2 00008000 
00008000 000037DF 000039C7
 TAG:artist=The Artist
 TAG:album_artist=The Album Artist
 TAG:album=The Album
-TAG:genre=Rock
-TAG:track=2/5
-TAG:disc=3/5
 [/FORMAT]
diff --git a/tests/ref/fate/mov-reenc-delete-format-metadata 
b/tests/ref/fate/mov-reenc-delete-format-metadata
index 78ec5a8d54..dee47ddba3 100644
--- a/tests/ref/fate/mov-reenc-delete-format-metadata
+++ b/tests/ref/fate/mov-reenc-delete-format-metadata
@@ -1,21 +1,15 @@
-31a5be81f6278f7d62e901207bf59485 
*tests/data/fate/mov-reenc-delete-format-metadata.nut
-894 tests/data/fate/mov-reenc-delete-format-metadata.nut
+f63b90216e9667fa0b030aae0f808fd8 
*tests/data/fate/mov-reenc-delete-format-metadata.nut
+579 tests/data/fate/mov-reenc-delete-format-metadata.nut
 [FORMAT]
-TAG:major_brand=M4A 
-TAG:minor_version=0
-TAG:compatible_brands=M4A mp42isom
+TAG:genre=Rock
+TAG:album=The Album
+TAG:album_artist=The Album Artist
 TAG:comment=The comment... 
 TAG:title=Owner
 TAG:compilation=0
-TAG:gapless_playback=0
+TAG:disc=3/5
+TAG:artist=The Artist
 TAG:date=2010
-TAG:iTunSMPB= 00000000 00000840 000001FD 000000000013B5C3 00000000 00000000 
00000000 00000000 00000000 00000000 00000000 00000000
 TAG:Encoding Params=vers
-TAG:iTunNORM= 0000085B 0000072C 00006BC3 0000D444 00004EBA 00004ED2 00008000 
00008000 000037DF 000039C7
-TAG:artist=The Artist
-TAG:album_artist=The Album Artist
-TAG:album=The Album
-TAG:genre=Rock
 TAG:track=2/5
-TAG:disc=3/5
 [/FORMAT]
diff --git a/tests/ref/fate/mov-reenc-delete-stream-metadata 
b/tests/ref/fate/mov-reenc-delete-stream-metadata
index f54730e932..dd8bccc4f0 100644
--- a/tests/ref/fate/mov-reenc-delete-stream-metadata
+++ b/tests/ref/fate/mov-reenc-delete-stream-metadata
@@ -1,9 +1,8 @@
-c3339d3d42a7f414fec083f0766fb79a 
*tests/data/fate/mov-reenc-delete-stream-metadata.nut
-6629 tests/data/fate/mov-reenc-delete-stream-metadata.nut
+5e44edd89f2f43665ff5e4e53638fdf5 
*tests/data/fate/mov-reenc-delete-stream-metadata.nut
+6605 tests/data/fate/mov-reenc-delete-stream-metadata.nut
 [STREAM]
 TAG:encoder=Lavc flac
 TAG:creation_time=2002-06-02T18:38:54.000000Z
 TAG:language=eng
 TAG:handler_name=Apple Sound Media Handler
-TAG:vendor_id=[0][0][0][0]
 [/STREAM]
diff --git a/tests/ref/fate/mov-reenc-delete-stream-metadata-global-tag 
b/tests/ref/fate/mov-reenc-delete-stream-metadata-global-tag
index aa3332039e..424bfa2d96 100644
--- a/tests/ref/fate/mov-reenc-delete-stream-metadata-global-tag
+++ b/tests/ref/fate/mov-reenc-delete-stream-metadata-global-tag
@@ -1,11 +1,10 @@
-3b2b8f248a99168fa938c9767c350dca 
*tests/data/fate/mov-reenc-delete-stream-metadata-global-tag.nut
-6647 tests/data/fate/mov-reenc-delete-stream-metadata-global-tag.nut
+dc4bc94edbf9bcf78cf74471f244398b 
*tests/data/fate/mov-reenc-delete-stream-metadata-global-tag.nut
+6623 tests/data/fate/mov-reenc-delete-stream-metadata-global-tag.nut
 [STREAM]
 TAG:encoder=Lavc flac
 TAG:creation_time=2002-06-02T18:38:54.000000Z
 TAG:language=eng
 TAG:handler_name=Apple Sound Media Handler
-TAG:vendor_id=[0][0][0][0]
 [/STREAM]
 [FORMAT]
 TAG:vendor_id=custom
diff --git a/tests/ref/fate/rgb24-mkv b/tests/ref/fate/rgb24-mkv
index 5f4cb78318..59c532b80d 100644
--- a/tests/ref/fate/rgb24-mkv
+++ b/tests/ref/fate/rgb24-mkv
@@ -1,5 +1,5 @@
-0013b260aa50b70d1a00d9770581a177 *tests/data/fate/rgb24-mkv.matroska
-58236 tests/data/fate/rgb24-mkv.matroska
+e85dcc076f7ebea460517c3255705fec *tests/data/fate/rgb24-mkv.matroska
+58213 tests/data/fate/rgb24-mkv.matroska
 #tb 0: 1/10
 #media_type 0: video
 #codec_id 0: rawvideo

_______________________________________________
ffmpeg-cvslog mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to