{"about":{"site":"https://codewithpapers.app","non_affiliation":"Code with Papers and Syntology are not affiliated with, endorsed by, or sponsored by Papers with Code, Meta, or the pwc-archive mirror.","licence":"CC BY-SA 4.0","licence_url":"https://creativecommons.org/licenses/by-sa/4.0/legalcode","attribution":"https://codewithpapers.app/attribution","modified":"archive material modified by Syntology; see the attribution page"},"url":"/paper/video-seal-open-and-efficient-video","title":"Video Seal: Open and Efficient Video Watermarking","arxiv_id":"2412.09492","date":"2024-12-12","proceeding":null,"authors":["Pierre Fernandez","Hady Elsahar","I. Zeki Yalniz","Alexandre Mourachko"],"abstract":"The proliferation of AI-generated content and sophisticated video editing tools has made it both important and challenging to moderate digital platforms. Video watermarking addresses these challenges by embedding imperceptible signals into videos, allowing for identification. However, the rare open tools and methods often fall short on efficiency, robustness, and flexibility. To reduce these gaps, this paper introduces Video Seal, a comprehensive framework for neural video watermarking and a competitive open-sourced model. Our approach jointly trains an embedder and an extractor, while ensuring the watermark robustness by applying transformations in-between, e.g., video codecs. This training is multistage and includes image pre-training, hybrid post-training and extractor fine-tuning. We also introduce temporal watermark propagation, a technique to convert any image watermarking model to an efficient video watermarking model without the need to watermark every high-resolution frame. We present experimental results demonstrating the effectiveness of the approach in terms of speed, imperceptibility, and robustness. Video Seal achieves higher robustness compared to strong baselines especially under challenging distortions combining geometric transformations and video compression. Additionally, we provide new insights such as the impact of video compression during training, and how to compare methods operating on different payloads. Contributions in this work - including the codebase, models, and a public demo - are open-sourced under permissive licenses to foster further research and development in the field.","url_abs":"https://arxiv.org/abs/2412.09492v1","url_pdf":"https://arxiv.org/pdf/2412.09492v1.pdf","source":{"archive":"pwc-archive (Hugging Face), CC BY-SA 4.0","snapshot":"2025-07-28","licence_url":"https://creativecommons.org/licenses/by-sa/4.0/legalcode","row_kind":"abstracts"},"code_links":[{"paper_slug":"video-seal-open-and-efficient-video","repo_url":"https://github.com/facebookresearch/videoseal","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":1,"framework":"pytorch","reach":{"status":"ok","spdx":"MIT"}}],"tasks":[{"task_slug":"video-compression","task_name":"Video Compression"},{"task_slug":"video-editing","task_name":"Video Editing"}],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2412.09492","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2412.09492"}},"developers":"https://syntology.ai/developers","read_at":"2026-09-24T18:15:14+00:00","read_at_is":"when the build read Syntology's graph, not when any sample ran","claim":"Per-sample execution status on synthesized fixtures; not a correctness claim about the paper. Samples come from repositories linked to the paper, official or community; repo_kind says which.","repos":[{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/facebookresearch/videoseal","reach":{"status":"ok","spdx":"MIT"}}],"summary":{"unverified":9},"by_repo_kind":{"official":{"samples":9,"ran":0,"repositories":1}},"repo_kind_vocabulary":{"official":"The archive marks this repository official for the paper","named_in_paper":"The archive records that the paper mentions this repository; it is not marked official","listed":"In the archive's code links for this paper, not marked official and not recorded as mentioned in the paper","found_in_text":"Syntology found this repository in the paper's own text; whether it is the authors' implementation is not asserted","community":"Not in the archive's code links for this paper; a community repository Syntology harvested"},"n_pointer_only_for_licence":0,"samples":[{"code_sha256_prefix":"9424bc290492af88","entry":"adopt_weight","repo":"facebookresearch/videoseal","repo_kind":"official","path":"videoseal/losses/videosealloss.py","file_url":"https://github.com/facebookresearch/videoseal/blob/HEAD/videoseal/losses/videosealloss.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"9424bc290492af88"}},{"code_sha256_prefix":"b61ecb572a0c1a2b","entry":"build_loss","repo":"facebookresearch/videoseal","repo_kind":"official","path":"videoseal/losses/perceptual.py","file_url":"https://github.com/facebookresearch/videoseal/blob/HEAD/videoseal/losses/perceptual.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"b61ecb572a0c1a2b"}},{"code_sha256_prefix":"4f04a1ea76a14dc9","entry":"gaussian_filter","repo":"facebookresearch/videoseal","repo_kind":"official","path":"videoseal/losses/ssim.py","file_url":"https://github.com/facebookresearch/videoseal/blob/HEAD/videoseal/losses/ssim.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"4f04a1ea76a14dc9"}},{"code_sha256_prefix":"c2e6030864843901","entry":"hinge_d_loss","repo":"facebookresearch/videoseal","repo_kind":"official","path":"videoseal/losses/videosealloss.py","file_url":"https://github.com/facebookresearch/videoseal/blob/HEAD/videoseal/losses/videosealloss.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"c2e6030864843901"}},{"code_sha256_prefix":"3ba1a73724675e43","entry":"ms_ssim","repo":"facebookresearch/videoseal","repo_kind":"official","path":"videoseal/losses/ssim.py","file_url":"https://github.com/facebookresearch/videoseal/blob/HEAD/videoseal/losses/ssim.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"3ba1a73724675e43"}},{"code_sha256_prefix":"0086e76caac76ff6","entry":"normalize_tensor","repo":"facebookresearch/videoseal","repo_kind":"official","path":"videoseal/losses/watson_vgg.py","file_url":"https://github.com/facebookresearch/videoseal/blob/HEAD/videoseal/losses/watson_vgg.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"0086e76caac76ff6"}},{"code_sha256_prefix":"913d396ed85be58b","entry":"prepare_image","repo":"facebookresearch/videoseal","repo_kind":"official","path":"videoseal/losses/dists.py","file_url":"https://github.com/facebookresearch/videoseal/blob/HEAD/videoseal/losses/dists.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"913d396ed85be58b"}},{"code_sha256_prefix":"cc287dc402b9202b","entry":"softmax","repo":"facebookresearch/videoseal","repo_kind":"official","path":"videoseal/losses/watson_fft.py","file_url":"https://github.com/facebookresearch/videoseal/blob/HEAD/videoseal/losses/watson_fft.py","link_basis":"plan_row","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"cc287dc402b9202b"}},{"code_sha256_prefix":"e867dacbd4ba1d08","entry":"ssim","repo":"facebookresearch/videoseal","repo_kind":"official","path":"videoseal/losses/ssim.py","file_url":"https://github.com/facebookresearch/videoseal/blob/HEAD/videoseal/losses/ssim.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"e867dacbd4ba1d08"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}