[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"docs-index-latest":3,"doc-latest-en-audio_sync_and_multicam":55,"docs-versions":57},{"version":4,"zh":5,"en":31},"latest",[6,10,13,16,19,22,25,28],{"slug":7,"title":8,"lang":9},"快速开始","快速开始 — Oak Video Editor Manual","zh",{"slug":11,"title":12,"lang":9},"基本功能","基本功能 — Oak Video Editor Manual",{"slug":14,"title":15,"lang":9},"节点","节点 — Oak Video Editor Manual",{"slug":17,"title":18,"lang":9},"LUT","LUT — Oak Video Editor Manual",{"slug":20,"title":21,"lang":9},"直方图","直方图 — Oak Video Editor Manual",{"slug":23,"title":24,"lang":9},"代理剪辑","代理剪辑 — Oak Video Editor Manual",{"slug":26,"title":27,"lang":9},"音频同步和多机位剪辑","音频同步和多机位剪辑 — Oak Video Editor Manual",{"slug":29,"title":30,"lang":9},"index","Oak Video Editor 使用手册 — Oak Video Editor Manual",[32,36,39,42,44,47,50,53],{"slug":33,"title":34,"lang":35},"quick_start","Quick Start — Oak Video Editor Manual","en",{"slug":37,"title":38,"lang":35},"basic_features","Basic Features — Oak Video Editor Manual",{"slug":40,"title":41,"lang":35},"nodes","Nodes — Oak Video Editor Manual",{"slug":43,"title":18,"lang":35},"lut",{"slug":45,"title":46,"lang":35},"histogram","Histogram — Oak Video Editor Manual",{"slug":48,"title":49,"lang":35},"proxy_editing","Proxy Editing — Oak Video Editor Manual",{"slug":51,"title":52,"lang":35},"audio_sync_and_multicam","Audio Sync and Multicam Editing — Oak Video Editor Manual",{"slug":29,"title":54,"lang":35},"Oak Video Editor User Manual — Oak Video Editor Manual",{"slug":51,"title":52,"lang":35,"version":4,"html":56},"\u003C!DOCTYPE html>\n\n\u003Chtml lang=\"en\" data-content_root=\".\u002F\">\n  \u003Chead>\n    \u003Cmeta charset=\"utf-8\" \u002F>\n    \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" \u002F>\u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1\" \u002F>\n\n    \u003Ctitle>Audio Sync and Multicam Editing &#8212; Oak Video Editor Manual\u003C\u002Ftitle>\n    \u003Clink rel=\"stylesheet\" type=\"text\u002Fcss\" href=\"_static\u002Fpygments.css?v=5ecbeea2\" \u002F>\n    \u003Clink rel=\"stylesheet\" type=\"text\u002Fcss\" href=\"_static\u002Fbasic.css?v=b08954a9\" \u002F>\n    \u003Clink rel=\"stylesheet\" type=\"text\u002Fcss\" href=\"_static\u002Falabaster.css?v=27fed22d\" \u002F>\n    \u003Cscript src=\"_static\u002Fdocumentation_options.js?v=7f00635f\">\u003C\u002Fscript>\n    \u003Cscript src=\"_static\u002Fdoctools.js?v=fd6eb6e6\">\u003C\u002Fscript>\n    \u003Cscript src=\"_static\u002Fsphinx_highlight.js?v=6ffebe34\">\u003C\u002Fscript>\n    \u003Clink rel=\"index\" title=\"Index\" href=\"genindex.html\" \u002F>\n    \u003Clink rel=\"search\" title=\"Search\" href=\"search.html\" \u002F>\n    \u003Clink rel=\"prev\" title=\"Proxy Editing\" href=\"proxy_editing.html\" \u002F>\n   \n  \u003Clink rel=\"stylesheet\" href=\"_static\u002Fcustom.css\" type=\"text\u002Fcss\" \u002F>\n  \n\n  \n  \n\n  \u003C\u002Fhead>\u003Cbody>\n  \n\n    \u003Cdiv class=\"document\">\n      \u003Cdiv class=\"documentwrapper\">\n        \u003Cdiv class=\"bodywrapper\">\n          \n\n          \u003Cdiv class=\"body\" role=\"main\">\n            \n  \u003Csection id=\"audio-sync-and-multicam-editing\">\n\u003Ch1>Audio Sync and Multicam Editing\u003Ca class=\"headerlink\" href=\"#audio-sync-and-multicam-editing\" title=\"Link to this heading\">¶\u003C\u002Fa>\u003C\u002Fh1>\n\u003Cp>Oak provides audio-sync tools based on timecode and waveforms, as well as basic multicam editing support.\u003C\u002Fp>\n\u003Csection id=\"audio-sync\">\n\u003Ch2>Audio Sync\u003Ca class=\"headerlink\" href=\"#audio-sync\" title=\"Link to this heading\">¶\u003C\u002Fa>\u003C\u002Fh2>\n\u003Csection id=\"synchronize-by-source-time\">\n\u003Ch3>Synchronize by Source Time\u003Ca class=\"headerlink\" href=\"#synchronize-by-source-time\" title=\"Link to this heading\">¶\u003C\u002Fa>\u003C\u002Fh3>\n\u003Cul class=\"simple\">\n\u003Cli>\u003Cp>Use case: different cameras or recorders share the same source timecode \u002F BWF time reference.\u003C\u002Fp>\u003C\u002Fli>\n\u003Cli>\u003Cp>Operation: select multiple clips on the timeline → right-click → \u003Ccode class=\"docutils literal notranslate\">\u003Cspan class=\"pre\">Synchronize\u003C\u002Fspan> \u003Cspan class=\"pre\">by\u003C\u002Fspan> \u003Cspan class=\"pre\">Source\u003C\u002Fspan> \u003Cspan class=\"pre\">Time\u003C\u002Fspan>\u003C\u002Fcode>.\u003C\u002Fp>\u003C\u002Fli>\n\u003Cli>\u003Cp>Oak reads each footage item’s \u003Ccode class=\"docutils literal notranslate\">\u003Cspan class=\"pre\">source_start_time\u003C\u002Fspan>\u003C\u002Fcode>, calculates the time offset, and moves the clips to the corresponding positions.\u003C\u002Fp>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fsection>\n\u003Csection id=\"synchronize-by-waveform\">\n\u003Ch3>Synchronize by Waveform\u003Ca class=\"headerlink\" href=\"#synchronize-by-waveform\" title=\"Link to this heading\">¶\u003C\u002Fa>\u003C\u002Fh3>\n\u003Cul class=\"simple\">\n\u003Cli>\u003Cp>Use case: no reliable timecode, but the audio content is the same across sources.\u003C\u002Fp>\u003C\u002Fli>\n\u003Cli>\u003Cp>Operation: select two or more clips with cached waveforms on the timeline → right-click → \u003Ccode class=\"docutils literal notranslate\">\u003Cspan class=\"pre\">Synchronize\u003C\u002Fspan> \u003Cspan class=\"pre\">by\u003C\u002Fspan> \u003Cspan class=\"pre\">Waveform\u003C\u002Fspan>\u003C\u002Fcode> (shortcut \u003Ccode class=\"docutils literal notranslate\">\u003Cspan class=\"pre\">Ctrl+Shift+W\u003C\u002Fspan>\u003C\u002Fcode>).\u003C\u002Fp>\u003C\u002Fli>\n\u003Cli>\u003Cp>The algorithm extracts an RMS envelope and estimates the offset using normalized cross-correlation.\u003C\u002Fp>\u003C\u002Fli>\n\u003Cli>\u003Cp>Uncached waveform regions are not treated as silence: envelope extraction marks uncached windows as invalid and the correlation skips them, so partially cached clips still align accurately.\u003C\u002Fp>\u003C\u002Fli>\n\u003Cli>\u003Cp>Window size is 50 ms; maximum supported offset is 10 minutes.\u003C\u002Fp>\u003C\u002Fli>\n\u003Cli>\u003Cp>\u003Ccode class=\"docutils literal notranslate\">\u003Cspan class=\"pre\">Synchronize\u003C\u002Fspan> \u003Cspan class=\"pre\">by\u003C\u002Fspan> \u003Cspan class=\"pre\">Waveform\u003C\u002Fspan> \u003Cspan class=\"pre\">(Adjust\u003C\u002Fspan> \u003Cspan class=\"pre\">Speed)\u003C\u002Fspan>\u003C\u002Fcode> is a variant for sources running at slightly different speeds (e.g. 24 fps vs 25 fps pull-down). When plain offset alignment is inconclusive, it searches a playback-rate range of 0.75–1.34 and applies the estimated rate as a clip speed change together with the offset placement, as a single undoable operation.\u003C\u002Fp>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fsection>\n\u003Csection id=\"timecode-bwf-auto-detection\">\n\u003Ch3>Timecode \u002F BWF Auto-Detection\u003Ca class=\"headerlink\" href=\"#timecode-bwf-auto-detection\" title=\"Link to this heading\">¶\u003C\u002Fa>\u003C\u002Fh3>\n\u003Cul class=\"simple\">\n\u003Cli>\u003Cp>When footage is imported, \u003Ccode class=\"docutils literal notranslate\">\u003Cspan class=\"pre\">FFmpegDecoder\u003C\u002Fspan>\u003C\u002Fcode> automatically probes:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cp>\u003Ccode class=\"docutils literal notranslate\">\u003Cspan class=\"pre\">timecode\u003C\u002Fspan>\u003C\u002Fcode>: LTC \u002F VITC timecode strings.\u003C\u002Fp>\u003C\u002Fli>\n\u003Cli>\u003Cp>\u003Ccode class=\"docutils literal notranslate\">\u003Cspan class=\"pre\">time_reference\u003C\u002Fspan>\u003C\u002Fcode>: the BWF \u003Ccode class=\"docutils literal notranslate\">\u003Cspan class=\"pre\">bext\u003C\u002Fspan>\u003C\u002Fcode> chunk sample reference.\u003C\u002Fp>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\u003Cli>\u003Cp>Detected source start times are written to the footage’s \u003Ccode class=\"docutils literal notranslate\">\u003Cspan class=\"pre\">FootageDescription\u003C\u002Fspan>\u003C\u002Fcode> and saved with the project.\u003C\u002Fp>\u003C\u002Fli>\n\u003Cli>\u003Cp>If a file does not contain these metadata fields, \u003Ccode class=\"docutils literal notranslate\">\u003Cspan class=\"pre\">Synchronize\u003C\u002Fspan> \u003Cspan class=\"pre\">by\u003C\u002Fspan> \u003Cspan class=\"pre\">Source\u003C\u002Fspan> \u003Cspan class=\"pre\">Time\u003C\u002Fspan>\u003C\u002Fcode> cannot be used unless a source start time is set manually (see below).\u003C\u002Fp>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fsection>\n\u003Csection id=\"manually-setting-the-source-start-time\">\n\u003Ch3>Manually Setting the Source Start Time\u003Ca class=\"headerlink\" href=\"#manually-setting-the-source-start-time\" title=\"Link to this heading\">¶\u003C\u002Fa>\u003C\u002Fh3>\n\u003Cul class=\"simple\">\n\u003Cli>\u003Cp>Right-click a footage item → \u003Ccode class=\"docutils literal notranslate\">\u003Cspan class=\"pre\">Properties\u003C\u002Fspan>\u003C\u002Fcode> opens the Footage Properties dialog, which contains a \u003Ccode class=\"docutils literal notranslate\">\u003Cspan class=\"pre\">Source\u003C\u002Fspan> \u003Cspan class=\"pre\">Start\u003C\u002Fspan> \u003Cspan class=\"pre\">Time\u003C\u002Fspan>\u003C\u002Fcode> field: an enable checkbox plus a value in seconds.\u003C\u002Fp>\u003C\u002Fli>\n\u003Cli>\u003Cp>Use it for footage whose metadata lacks timecode \u002F BWF information, or where auto-detection produced a wrong value.\u003C\u002Fp>\u003C\u002Fli>\n\u003Cli>\u003Cp>The dialog also indicates whether the current value was auto-detected (and from which metadata) or set manually.\u003C\u002Fp>\u003C\u002Fli>\n\u003Cli>\u003Cp>The value is used by \u003Ccode class=\"docutils literal notranslate\">\u003Cspan class=\"pre\">Synchronize\u003C\u002Fspan> \u003Cspan class=\"pre\">by\u003C\u002Fspan> \u003Cspan class=\"pre\">Source\u003C\u002Fspan> \u003Cspan class=\"pre\">Time\u003C\u002Fspan>\u003C\u002Fcode> and is saved with the project.\u003C\u002Fp>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fsection>\n\u003C\u002Fsection>\n\u003Csection id=\"multicam-editing\">\n\u003Ch2>Multicam Editing\u003Ca class=\"headerlink\" href=\"#multicam-editing\" title=\"Link to this heading\">¶\u003C\u002Fa>\u003C\u002Fh2>\n\u003Cp>Oak’s basic multicam feature treats the tracks inside a nested Sequence as different camera angles.\u003C\u002Fp>\n\u003Csection id=\"creating-a-multicam-clip\">\n\u003Ch3>Creating a Multicam Clip\u003Ca class=\"headerlink\" href=\"#creating-a-multicam-clip\" title=\"Link to this heading\">¶\u003C\u002Fa>\u003C\u002Fh3>\n\u003Col class=\"arabic simple\">\n\u003Cli>\u003Cp>Place each camera’s footage on a different track of the same Sequence and align them using the methods above.\u003C\u002Fp>\u003C\u002Fli>\n\u003Cli>\u003Cp>On the timeline, select the nested Sequence clip (its \u003Ccode class=\"docutils literal notranslate\">\u003Cspan class=\"pre\">connected_viewer\u003C\u002Fspan>\u003C\u002Fcode> must be a Sequence).\u003C\u002Fp>\u003C\u002Fli>\n\u003Cli>\u003Cp>Right-click → check \u003Ccode class=\"docutils literal notranslate\">\u003Cspan class=\"pre\">Multi-Cam\u003C\u002Fspan>\u003C\u002Fcode>.\u003C\u002Fp>\u003C\u002Fli>\n\u003Cli>\u003Cp>Oak creates a \u003Ccode class=\"docutils literal notranslate\">\u003Cspan class=\"pre\">MultiCamNode\u003C\u002Fspan>\u003C\u002Fcode>, rewires the Sequence output into it, and connects each track to \u003Ccode class=\"docutils literal notranslate\">\u003Cspan class=\"pre\">kSourcesInput\u003C\u002Fspan>\u003C\u002Fcode>.\u003C\u002Fp>\u003C\u002Fli>\n\u003C\u002Fol>\n\u003C\u002Fsection>\n\u003Csection id=\"switching-angles\">\n\u003Ch3>Switching Angles\u003Ca class=\"headerlink\" href=\"#switching-angles\" title=\"Link to this heading\">¶\u003C\u002Fa>\u003C\u002Fh3>\n\u003Cul class=\"simple\">\n\u003Cli>\u003Cp>Open the \u003Cstrong>Multicam\u003C\u002Fstrong> panel (hidden by default; open it from the \u003Ccode class=\"docutils literal notranslate\">\u003Cspan class=\"pre\">Window\u003C\u002Fspan>\u003C\u002Fcode> menu) to see a grid of angle thumbnails.\u003C\u002Fp>\u003C\u002Fli>\n\u003Cli>\u003Cp>Shortcuts:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cp>\u003Ccode class=\"docutils literal notranslate\">\u003Cspan class=\"pre\">1\u003C\u002Fspan>\u003C\u002Fcode>–\u003Ccode class=\"docutils literal notranslate\">\u003Cspan class=\"pre\">9\u003C\u002Fspan>\u003C\u002Fcode>: switch to the corresponding angle and split the clip at the playhead.\u003C\u002Fp>\u003C\u002Fli>\n\u003Cli>\u003Cp>\u003Ccode class=\"docutils literal notranslate\">\u003Cspan class=\"pre\">Ctrl+1\u003C\u002Fspan>\u003C\u002Fcode>–\u003Ccode class=\"docutils literal notranslate\">\u003Cspan class=\"pre\">Ctrl+9\u003C\u002Fspan>\u003C\u002Fcode>: switch angle without splitting.\u003C\u002Fp>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\u003Cli>\u003Cp>Clicking a thumbnail in the Multicam panel also switches and splits.\u003C\u002Fp>\u003C\u002Fli>\n\u003Cli>\u003Cp>Switching creates an undo command; press \u003Ccode class=\"docutils literal notranslate\">\u003Cspan class=\"pre\">Ctrl+Z\u003C\u002Fspan>\u003C\u002Fcode> to undo.\u003C\u002Fp>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fsection>\n\u003Csection id=\"multicam-output\">\n\u003Ch3>Multicam Output\u003Ca class=\"headerlink\" href=\"#multicam-output\" title=\"Link to this heading\">¶\u003C\u002Fa>\u003C\u002Fh3>\n\u003Cul class=\"simple\">\n\u003Cli>\u003Cp>\u003Ccode class=\"docutils literal notranslate\">\u003Cspan class=\"pre\">MultiCamNode\u003C\u002Fspan>\u003C\u002Fcode>’s \u003Ccode class=\"docutils literal notranslate\">\u003Cspan class=\"pre\">kCurrentInput\u003C\u002Fspan>\u003C\u002Fcode> determines which angle is currently output.\u003C\u002Fp>\u003C\u002Fli>\n\u003Cli>\u003Cp>In preview mode, \u003Ccode class=\"docutils literal notranslate\">\u003Cspan class=\"pre\">RenderProcessor\u003C\u002Fspan>\u003C\u002Fcode> generates a \u003Ccode class=\"docutils literal notranslate\">\u003Cspan class=\"pre\">multicam_output\u003C\u002Fspan>\u003C\u002Fcode> attribute for \u003Ccode class=\"docutils literal notranslate\">\u003Cspan class=\"pre\">MulticamDisplay\u003C\u002Fspan>\u003C\u002Fcode> to show all angles; final output is still controlled by the currently selected angle.\u003C\u002Fp>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fsection>\n\u003C\u002Fsection>\n\u003Csection id=\"limitations\">\n\u003Ch2>Limitations\u003Ca class=\"headerlink\" href=\"#limitations\" title=\"Link to this heading\">¶\u003C\u002Fa>\u003C\u002Fh2>\n\u003Cul class=\"simple\">\n\u003Cli>\u003Cp>There is no dedicated multicam sync wizard; you must first align the tracks inside a Sequence manually.\u003C\u002Fp>\u003C\u002Fli>\n\u003Cli>\u003Cp>Only the simple \u003Ccode class=\"docutils literal notranslate\">\u003Cspan class=\"pre\">Sequence\u003C\u002Fspan> \u003Cspan class=\"pre\">→\u003C\u002Fspan> \u003Cspan class=\"pre\">MultiCamNode\u003C\u002Fspan>\u003C\u002Fcode> structure is supported.\u003C\u002Fp>\u003C\u002Fli>\n\u003Cli>\u003Cp>There is no cut-list export.\u003C\u002Fp>\u003C\u002Fli>\n\u003Cli>\u003Cp>The README roadmap lists “full multicam angle switching” as a 0.5 milestone, so the current implementation is still early.\u003C\u002Fp>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fsection>\n\u003C\u002Fsection>\n\n\n          \u003C\u002Fdiv>\n          \n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"sphinxsidebar\" role=\"navigation\" aria-label=\"Main\">\n        \u003Cdiv class=\"sphinxsidebarwrapper\">\n\u003Ch1 class=\"logo\">\u003Ca href=\"index.html\">Oak Video Editor Manual\u003C\u002Fa>\u003C\u002Fh1>\n\n\n\n\n\n\n\n\n\u003Ch3>Navigation\u003C\u002Fh3>\n\u003Cul class=\"current\">\n\u003Cli class=\"toctree-l1\">\u003Ca class=\"reference internal\" href=\"quick_start.html\">Quick Start\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli class=\"toctree-l1\">\u003Ca class=\"reference internal\" href=\"basic_features.html\">Basic Features\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli class=\"toctree-l1\">\u003Ca class=\"reference internal\" href=\"nodes.html\">Nodes\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli class=\"toctree-l1\">\u003Ca class=\"reference internal\" href=\"lut.html\">LUT\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli class=\"toctree-l1\">\u003Ca class=\"reference internal\" href=\"histogram.html\">Histogram\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli class=\"toctree-l1\">\u003Ca class=\"reference internal\" href=\"proxy_editing.html\">Proxy Editing\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli class=\"toctree-l1 current\">\u003Ca class=\"current reference internal\" href=\"#\">Audio Sync and Multicam Editing\u003C\u002Fa>\u003Cul>\n\u003Cli class=\"toctree-l2\">\u003Ca class=\"reference internal\" href=\"#audio-sync\">Audio Sync\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli class=\"toctree-l2\">\u003Ca class=\"reference internal\" href=\"#multicam-editing\">Multicam Editing\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli class=\"toctree-l2\">\u003Ca class=\"reference internal\" href=\"#limitations\">Limitations\u003C\u002Fa>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\u003C\u002Ful>\n\n\n\u003Csearch id=\"searchbox\" style=\"display: none\" role=\"search\">\n  \u003Ch3 id=\"searchlabel\">Quick search\u003C\u002Fh3>\n    \u003Cdiv class=\"searchformwrapper\">\n    \u003Cform class=\"search\" action=\"search.html\" method=\"get\">\n      \u003Cinput type=\"text\" name=\"q\" aria-labelledby=\"searchlabel\" autocomplete=\"off\" autocorrect=\"off\" autocapitalize=\"off\" spellcheck=\"false\"\u002F>\n      \u003Cinput type=\"submit\" value=\"Go\" \u002F>\n    \u003C\u002Fform>\n    \u003C\u002Fdiv>\n\u003C\u002Fsearch>\n\u003Cscript>document.getElementById('searchbox').style.display = \"block\"\u003C\u002Fscript>\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"clearer\">\u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"footer\">\n      &#169;2025, Oak Video Editor Community.\n      \n      |\n      Powered by \u003Ca href=\"https:\u002F\u002Fwww.sphinx-doc.org\u002F\">Sphinx 9.1.0\u003C\u002Fa>\n      &amp; \u003Ca href=\"https:\u002F\u002Falabaster.readthedocs.io\">Alabaster 1.0.0\u003C\u002Fa>\n      \n      |\n      \u003Ca href=\"_sources\u002Faudio_sync_and_multicam.rst.txt\"\n          rel=\"nofollow\">Page source\u003C\u002Fa>\n    \u003C\u002Fdiv>\n\n    \n\n    \n  \u003C\u002Fbody>\n\u003C\u002Fhtml>",{"versions":58,"latest":4},[4]]