Provenance · C2PA · Compliance · Workflow

Does Your AI Ad Still Carry Its AI Watermark After You Export It?

· 11 min read

Quick answer:it depends which watermark you mean, and for the common one the answer is no. Provenance metadata, the C2PA manifest that says "this was made by model X at time Y", lives in a box in the MP4 container. We injected one into a test clip and pushed it through the two ffmpeg commands our own production pipeline runs. It was gone after both, including after a pure stream copy that never decoded a single frame. Invisible pixelwatermarks such as Google's SynthID are a different mechanism and Google says they are designed to survive lossy compression. So an exported AI ad can very plausibly arrive at a platform with no readable provenance data attached and still be carrying a watermark no one can see. Neither one is a disclosure to your audience. Only something in the frame is.

Three different things get called "the AI watermark"

Most confusion here is vocabulary. Three separate mechanisms share the word, and they fail in completely different ways:

MechanismWhere it livesWhat removes it
C2PA Content Credentials / XMP packetA top-level uuid box in the MP4 container, alongside the video data but not part of itAny tool that rewrites the container, including a lossless remux
Invisible pixel or audio watermark (e.g. SynthID)Inside the frames and audio samples themselvesHeavy editing; designed to survive ordinary compression
Visible on-screen label or logoBurned into the pictureCropping, masking, or deliberate removal

The C2PA 2.1 specification is unusually precise about the first one. Appendix A.4 defines a uuid box with extended type D8FEC3D6-1B0E-483C-9297-5828877EC481, and states that the box containing the manifest store "shall appear before the first 'mdat' box in the file and before any 'moov' box in the file", placed after the ftyp box. The spec even explains why a uuid box was chosen over a custom c2pabox: "browsers based on Chromium will immediately fail playback when they encounter any unknown top-level boxes." That single design note tells you how the standard is positioned. It is a passenger in the file, tolerated by decoders, understood by almost nothing in a normal video toolchain.

Why this is worth measuring right now

Article 50 of the EU AI Act has applied since 2 August 2026, per the European Commission's own FAQ, with a limited grace period to 2 December 2026 for the marking obligations on systems placed on the market before that date. Article 50(2) reads:

"Providers of AI systems, including general-purpose AI systems, generating synthetic audio, image, video or text content, shall ensure that the outputs of the AI system are marked in a machine-readable format and detectable as artificially generated or manipulated. Providers shall ensure their technical solutions are effective, interoperable, robust and reliable as far as this is technically feasible."

Read who that lands on: providers. The company that trained and serves the model. Not you, the advertiser holding the exported file. That split is the whole story. The marking obligation attaches at generation, then the file goes through your editor, your ad platform's transcode, and possibly a re-upload by an agency, and nothing in that sentence follows it. Your own duty lives one paragraph down, in Article 50(4), and it asks for something a container box could never deliver: a disclosure a human being can actually perceive.

California drew the line in the same place. Its AI Transparency Act defines a "latent disclosure" as one "present but not manifest", carrying the provider's name, the system name and version, the time of creation or alteration and a unique identifier, and it binds a "covered provider" with over 1,000,000 monthly visitors or users. AB 853 moved the operative date to 2 August 2026 and added a second wave: from 1 January 2027, large online platforms must detect compliant provenance data and, "to the extent technically feasible", must not knowingly strip system provenance data or a digital signature. Note what is being legislated there, hedges included. Lawmakers already assume platforms strip this data, and that stopping them is not always technically possible.

The test: does the manifest survive our pipeline?

We can answer this for our own stack precisely, because we know exactly what the file passes through. Two ffmpeg invocations touch every video on the platform, and neither passes -map_metadata:

  • On ingest, every generated clip is remuxed to move the moov atom to the front so it starts playing before it has fully downloaded. The command is -map 0 -ignore_unknown -c copy -movflags +faststart -f mp4. No decode, no re-encode, no quality change. Every model we run writes moov last, so in practice this runs on everything.
  • On download, when a customer trims, adds captions, adds music or a watermark, the file is re-encoded: -c:v libx264 -preset veryfast -crf 23 -pix_fmt yuv420p -movflags +faststart -c:a aac -b:a 128k.

The test clip was a 3-second 720x1280 H.264/AAC file. Into it we injected two top-level uuid boxes at the spec-mandated position, immediately after ftyp and before moov and mdat: one carrying the C2PA extended type with box_purpose set to manifest, one carrying the standard XMP extended type BE7ACFCB-97A9-42E8-9C71-999491E3AFAC with an identifiable keyword inside a dc:subject bag. Because inserting bytes ahead of mdat breaks every chunk offset in the sample tables, we patched all 142 stco entries by the inserted delta. The result decoded cleanly with no ffmpeg errors, which matters: a broken test file would have proved nothing.

FileBytesTop-level boxesC2PA manifestXMP packet
Input66,955ftyp uuid uuid moov free mdatpresentpresent
After ingest remux (-c copy)66,492ftyp moov free mdatgonegone
After download re-encode78,714ftyp moov free mdatgonegone

66,955 minus 66,492 is 463 bytes, exactly the size of the two injected boxes. The remux did not damage the manifest or move it. It simply did not carry it. Adding use_metadata_tags to the movflags did not bring it back either.

The stream copy is the finding that surprised us. Intuition says a lossless container rewrite should preserve everything in the container. It does not, because the MP4 muxer builds a fresh box structure from the streams and the metadata dictionary it was handed, and an unrecognised top-level box was never in either.

What we did not test. The marker payloads were stand-ins, not a real signed manifest from a model provider, so what is measured here is box survival and not signature validity. The run used ffmpeg 8.1 locally; production runs the ffmpeg-static 6.1.1 build, which we did not separately re-measure. And this is our pipeline. Yours will differ in the details, though almost every video toolchain in existence is ffmpeg underneath.

The one thing that did survive

In a parallel run we wrote ordinary container tags with ffmpeg's -metadata flag, a title and a comment. Both came through the stream copy and the full re-encode unchanged, because ffmpeg copies the global metadata dictionary from input to output by default. So the file format is not the problem and metadata as a concept is not the problem. The problem is specifically that C2PA and XMP live in a box no general-purpose muxer knows to keep, while the humble comment field lives somewhere every muxer already reads and writes.

Practically: if you need a machine-readable note to ride along through ordinary editing, a container tag is a far better bet than an XMP packet. It is still not a disclosure to anybody, since no viewer will ever see it.

What is actually reading these markings

This would be academic if nothing consumed provenance data. Something does. YouTube's help page on disclosing altered or synthetic content says YouTube may automatically apply an AI label on the video player or in the expanded description for content that contains C2PA metadata. TikTok reads Content Credentials the same way and auto-labels when it finds them, which we covered in TikTok's AI content disclosure rules. So a stripped manifest has a real consequence, and it is not the one people expect. You do not get punished for the missing metadata. You lose the free automatic label, and your own on-screen disclosure becomes the only one on the video.

The industry knows this. The Content Authenticity Initiative's documentation on Durable Content Credentials says plainly that "platforms that host media assets might remove C2PA manifest data, if, for example, they use software that does not yet support the standard", and that "if a copy of the manifest data is stored in an online database, you can use a watermark or a fingerprint to find it again". That is the fix being built: pair the fragile metadata with a durable pixel watermark and a perceptual fingerprint, so a stripped manifest can be recovered from a database rather than the file. It is a good design. It is also not something an ecom media buyer can rely on today.

Which of the models we run mark their output

We run twelve models, and the honest answer is that public documentation on provenance marking is thin for most of them. Google is the clear exception. Google DeepMind states that "videos made with Veo will be marked with SynthID", and describes SynthID as an invisible digital watermark added to the AI-generated image or video segment, "designed to stand up to modifications like cropping, adding filters, changing frame rates, or lossy compression". That is a pixel-domain signal, so nothing in our test above touches it. A Veo 3.1 render that loses its container metadata may well still be detectable as Google output.

For the rest, the models from ByteDance, Kuaishou, Alibaba, xAI, VEED and PrunaAI that make up the bulk of our catalogue, we have not found provider documentation making an equivalent claim, and we are not going to invent one. Treat "is this model's output watermarked" as unknown unless the provider says otherwise in writing. If you want the underlying economics of that catalogue rather than its provenance behaviour, that is in our AI video model cost benchmarks.

What to actually do

  • Put the disclosure in the frame. A caption, sticker or burned-in line is the only marking that survives a container rewrite, a platform transcode and a re-upload, because it is picture data. Every other layer is best-effort.
  • Switch on the platform's own toggle anyway. It is the disclosure the platform recognises and it costs nothing.
  • Do not assume an auto label will fire. If your pipeline re-encodes, and nearly all do, the provenance box the platform would have read is probably not there. Plan as though no automatic label will appear.
  • Check your own export path once. Run a clip through your editor and inspect the output for a top-level uuid box. It takes ten minutes and tells you more than any vendor claim. This is not academic if you sell on Amazon, where sellers were told to embed contains-synthetic-performer into the file's own metadata under New York's synthetic performer law. Write that one after the last re-encode, not before.
  • Keep a record outside the file. Which ad used which model, on which date, with what prompt. When a platform or a regulator asks, the file will not answer for you.

One thing about our own product, since it is the pipeline under test: we do not add or preserve C2PA data, and after this measurement we are not going to claim we do. If you need a compliance disclosure, put it in the creative.

Sources

All nine were read directly in August 2026. The test described above was run on 21 August 2026. This is general information about how video files behave, not legal advice.


For the platform-side rules that sit on top of all this, TikTok's AI content disclosure rules and Meta's AI-generated creative ad policy cover what each platform requires of you, and what makes AI UGC look fake covers the part no label can fix. UGC Vids AI is the render step ahead of all of it, with plans from $49/month for 5,000 credits and 3 days free to try it.

Frequently asked questions

Does C2PA metadata survive when a video is re-encoded?

In our test, no. A C2PA manifest lives in a top-level 'uuid' box in the MP4 container, placed after 'ftyp' and before 'moov' and 'mdat' as the C2PA 2.1 specification requires. We injected one into a test clip and ran it through the two ffmpeg commands our production pipeline actually uses. Both removed it: the stream-copy remux (-c copy, no decoding at all) and the full H.264 re-encode. The output file was exactly 463 bytes smaller, the size of the injected boxes. A stream copy is enough to lose the manifest, because the muxer writes a fresh set of boxes rather than carrying unknown ones across.

What is the difference between C2PA metadata and SynthID?

They are different layers. C2PA Content Credentials are data attached to the file, in a container box, which is why an ordinary transcode can drop them. SynthID is a signal embedded in the pixels and audio samples themselves. Google describes it as an invisible digital watermark added to the image or video segment, designed to stand up to modifications like cropping, adding filters, changing frame rates, or lossy compression. Metadata is easy to read and easy to lose; a pixel watermark is harder to read and harder to lose.

Who is legally responsible for marking an AI video, the tool or the advertiser?

Article 50(2) of the EU AI Act puts the machine-readable marking duty on providers of AI systems that generate synthetic audio, image, video or text, not on the advertiser. But it is the advertiser who edits, exports and uploads the file. So the duty and the file part company, and nothing in Article 50(2) obliges you to keep a marking a provider applied. Deployer-side duties are a separate paragraph with a separate trigger. Platform rules and national law can also apply on top of the AI Act. This is general information, not legal advice.

Do any platforms actually read C2PA metadata?

Yes, at least one does, and says so. YouTube's help page on disclosing altered or synthetic content states that it may automatically apply an AI label on the video player or in the expanded description for content that contains C2PA metadata. That is the practical consequence of the manifest being stripped: the automatic label does not fire, and your own disclosure becomes the only one on the video.

Can I put a text marker in an MP4 that survives a re-encode?

Some kinds, yes. In the same test, ordinary container metadata tags written with ffmpeg's -metadata flag (title and comment) came through both the stream copy and the full re-encode intact, because ffmpeg copies the global metadata dictionary by default. The 'uuid' boxes carrying the C2PA manifest and the XMP packet did not. So where a marker is written matters more than what it says. Neither kind is visible to a viewer, so neither one discharges a disclosure obligation to an audience on its own.

What is the only marking that reliably survives everything?

Pixels. A disclosure burned into the frames, or spoken in the audio, cannot be stripped by a container rewrite because it is part of the picture. That is also the form platform policies tend to accept: TikTok's advertising policy, for example, accepts a clear disclaimer, caption, watermark or sticker you add yourself. If you need a disclosure to survive editing, re-uploads and every platform's own transcode, put it in the frame and treat provenance metadata as a bonus that may or may not still be there.

Definitions

What is AI UGC?What is AI Avatar?What is Text-to-Video?What is Veo 3.1?What is Spark Ads?

Compare alternatives

UGC Vids AI vs ArcadsUGC Vids AI vs MakeUGCUGC Vids AI vs Creatify

Stop reading. Start shipping.

Generate your first UGC ad in 2 minutes. No editing required.

Try the free generator