baocut
무료测试用的说明书:用 BaoCut 转录、翻译、剪辑与导出视频。
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
用户有一个长视频(访谈、讲座、直播回放、口播),想从中切出几支能单独发布的短视频时用:读转写找出最值得发的话题,每个话题从开头的钩子剪到讲完,建成可编辑的子视频,用户在编辑器里接着调;几支、每支多长可以交给你按话题定。需要视频的转写。不用于按主题从零做一个新的短视频,也不用于把整段口播剪干净(用剪口播)。
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
실행 점수 미검증
설치 방법 보기설치하기 전에 에이전트에게 전달되는 지시 내용을 확인할 수 있습니다.
刷到这条短视频的人没看过长视频,也不知道前面讲了什么。头三秒没抓住他,他就划走了;中间出现「刚才说的那个」,他就不知道在说什么。所以一段短视频要自己站得住:开头就是钩子,只讲一件事,停在结论上。
挑的单位是话题:一件事从提出到讲完。一个观点和它的理由,一个问题和它的回答,一个故事和它的落点。一支短视频就是一个话题完整的一段,不多也不少。
最容易挑坏的两种样子:
交付的是可编辑的子视频,不是 mp4:每一段用 videos_derive 建成父视频旁边的一个独立视频,用户在编辑器里继续调入出点、画面和字幕,要文件时再导出。
没有转写(kind 为 speech 的文档)时先转写,告诉用户转写在进行。挑片段只需要原文的词时间;润色和翻译只在用户要时才做。视频已经有章节时,章节有助于定位话题,但章节的边界不是短视频的边界。
读带时间的文稿:export 导出字幕(kind subtitles、format srt)或带时间码的文稿(kind transcript、format md、timestamps true),给 purpose preview(只是你自己读,不是交给用户的),jobs_inspect 等到 completed,读 outputs 里的文件。这些时间是剪辑后时间线上的时间,和 videos_derive 的 start、end、取帧用的是同一个时钟。
句界怎么取:找句子的起止不用 dump 整份 speech 文档。documents_read 读转写时,返回的 translationBasis.sentences 每一句带 start、end(秒),但那是素材时钟;videos_derive 的 start、end 是时间线时钟。父视频从 0 秒开始、原速、没有剪口地播放这条素材时,两者相同,可以直接用句子的 start、end 定区间。先确认这一点:用 videos_inspect(或 facts)看视频项的 sourceIn 是否为 0、速度是否为 1、有没有剪口。任一条不满足,就用上面导出的 SRT 或文稿里的时间线时间,或者把素材时间换算成时间线时间再传,不要把素材时间直接当时间线时间用。
用户点了话题(「切一支讲 X 的」)时,先用 space_search_v2(query 写 X 的意思,videoIds 只给这部视频,kinds 给 ["speech"])找讲到它的几处,再按上面读那几段前后的文稿定区间;命中的时间在当前时间线上(clock 为 sequence)时可以直接当时间线时间用;needsResolve 的先用 space_resolve_search_hit 按当前版本重新定位;weak 的先读原文。没有语义索引时(effectiveMode 为 lexical)换几个关键词再找,或读全文。
已经切过的:space_list 给 videoId 列出这部视频派生的短视频,读它们的名字与区间,不重复切同一段;用户要再切一支同一话题的时先问。
通读整份文稿(用户给了范围就读那一段),按话题切开:换了一个问题、一个观点、一个故事,就是新话题的开始。每个话题记下大致的起止、一句话说它讲什么、落点(结论、答案或包袱)在哪一句。一章里常有几个话题,一个话题也可能跨过章节边界。
够格的话题三条都满足,缺一条就不要:
文稿只是线索:对够格的话题,用 videos_frames 在那几秒取几帧看画面(有没有可看的、说话人在不在画面里),再结合上下文判断是认真说的还是玩笑。帧是素材画面,不含字幕与叠加的元素。然后按看点强弱、成立得稳不稳排序,最强的在前。
derived)和它们的区间,新的候选避开这些区间。对比一下(只是示意):
不好:12:00–14:30,从「好,那我们接下来聊聊成本这块」开始,到「这个我们待会儿再展开」结束。
好:12:41–13:22,从「我们算过,一条视频的成本其实只有三块钱」开始,到「所以贵的从来不是生成,是返工」结束。
后一段是一个完整的话题:头一句就是数字,中间是理由,停在结论上,没有指代前文的话。
不需要在会话里反复问边界:子视频保留着整份时间线与文稿,用户在编辑器里点划掉的句子就能把它放回来。标题和理由用用户说话的语言写。
对每一段调用 videos_derive:
video 是父视频,start、end 是剪辑后时间线上的秒,name 用片段标题。width 1080、height 1920;1:1 时 1080×1080;保留原画幅(或没提)时不传 width、height 和 fit。不要为了「高清」把小尺寸放大。fit: "cover"(铺满、裁掉多余)。用户说「居中」:不传 crop 和 crops,居中建好;说「我自己定」:同样居中建好,并告诉用户可以在画布上直接拖动、缩放画面自己摆(一拖就变成自由摆放,之后换画幅不再跟着铺满)。用户没说或说「自动」(默认):走下面按镜头取景的流程。给的裁框只是取景:子视频里存成取景点,源画面不裁,之后改回原画幅还能看到完整画面。取景是按镜头切换的静态裁框,不是跟随人物的运动镜头:用户要「画面一直跟着说话的人移动」时如实说做不到。带取景点的片段在画布上只能围着取景点放大、缩小(focalPoint.zoom),不能拖动:要换某段对准的位置,你用 setStyle 改那一段的 focalPoint,或请用户在画布上把它改成自由摆放后自己摆(之后换画幅不再自动对准)。range(起:止,这一段的时间线秒)取这一段的 shots(每个镜头有 start、end 和三个 sampleAt)与 cuts。它只检测画面切换,不认人。再用 videos_frames 的 at 传所有镜头的 sampleAt,每次 8 个镜头(24 帧,是单次上限)。每帧的 faces 是检测到的人脸框,x、y、w、h 按帧的宽高归一化到 0–1,对应素材画面,正好是 crop 的坐标。w × h)小于 0.001 的脸是误检,不算;面积不小于最大那张脸 1/4 的是主脸。只有一张主脸的是单人近景;两张以上主脸、左右跨度(最左脸的 x 到最右脸的 x + w)超过竖屏裁框宽 cw(第 5 步的公式)的是多人全景;跨度不超过 cw 的是多人近景;没有脸的另记。不要拿固定的面积阈值分近景与全景:同一部片子里全景的脸可以和别的片子的近景一样大。x + w/2)归成人,相差不到 0.1 的算同一个人。出现的帧数最多的是主讲人;帧数相近时取平均面积大的那个。另一个人的近景就是采访者(或对方)的镜头。crop 同一套坐标);再看上下有没有烧进画面的边框(色条、黑边)。cw = (画布宽 ÷ 画布高) × (原画高 × (1 − top − bottom) ÷ 原画宽);left = 中心 − cw/2,限制在 0 到 1 − cw 之间,right = 1 − cw − left。实例:16:9 的原画出 9:16、上下不裁,cw = 0.316;脸中心在 0.30 时给 left 0.142、right 0.542。上下有烧进去的边框时,top、bottom 给边框的高度比例把它裁掉(多给一点,不留细边),没有就给 0。
x + w/2)的中位数。top、bottom 都不超过 0.15)让脸大一些,不超过;有烧进去的边框时,边框高度也算在这 15% 里,边框更高就以边框为准,并在 notes 里说明。left 的差,且 top、bottom 相同)时合并成 crops 的一项,from 取前一个镜头的起点,to 取后一个镜头的终点。left 至少是台标右缘 + 0.01;在右边时,left + cw 至多是台标左缘 − 0.01(right 至少是 1 − 台标左缘 + 0.01)。挪了之后这个镜头的脸被裁出画面、或者两边都让不开时,这个镜头换裁框也不行,就换片段;不要交付压着半个台标的裁框。layout: "rows"(上下排开),4 人 "grid"(田字格),5 人以上不分屏。crops 的这一项写 {from, to, layout, panels},panels 是每个人要看见的源区域(四边比例,同 crop):以这个人的脸为准,左右各留一张脸宽,上面留半张脸高,下面到胸口(脸下面再约 2.5 张脸高),出了画面的边取 0。次序随意:Runtime 按左右排进格子,最左的人在最上面,同一个人在每一段分屏里都在同一格。crops 项盖住整段,不按说话人来回切。crops 的 from、to 直接用 shots 的 start、end,是逐帧准确的,不再在估出的切换点前后各 1 秒试探。只有看到某个镜头的三帧明显是两种机位(说明漏了一个切换)时,把 threshold 降到 0.2,对那一小段重跑 videos_shots;或在怀疑的时间点前后用 at 补取几帧。创建时:crops 传全部合并后的项(一人 {from, to, left, top, right, bottom},分屏 {from, to, layout, panels};最多 64 项、互不重叠,都是父视频时间线的秒),同时把第一个一人镜头的裁框作为普通的 crop 传上,当作没覆盖到的帧的兜底。faces 都是空的,居中(不传 crop 和 crops),并如实说没找到人脸。结果的 detector 为 null 时是检测器不可用,不是没人:这时退回看帧图片,逐镜头估主讲人在画面哪一侧,照第 5、6 步的算法给 crops 和 crop,并说明这次是看图估的;看图估不分屏。hook 是保留段的第一句原话,原样照抄,不改写(至多 300 字);reason 一句话说为什么挑它,写给用户看(至多 500 字);notes 是提示牌字符串数组,写取景、机位、台标检查里发现并需要用户知道的事,没有就不传。
hook、reason、notes 就是派生来源文档里的那份(认回已有的子视频时是原来那份,这次传的不会改写它);也可以用 documents_read 读返回的 derivationDocumentId。chapters: false:30 秒的子视频不该带着父视频的整份章节。captions 按用户的字幕要求:要字幕给 true(默认),不要给 false。用户只要原文或只要译文时,字幕层的选择按他的话,做不到的(例如没有译文)如实说。translations-skipped 警告时,告诉用户哪种语言没带上。range 是实际采用的边界,对一下和你要的差多少(见上面的短停顿);captions[].cueCount 只数落在区间内的 cue,不是整份字幕的条数,用它判断字幕有没有建出来、数量是否合理。reused 为 true),不会多建。子视频是什么:整份复制父视频的时间线与文稿,区间之外的部分被剪掉,用户在编辑器里点划掉的句子就能把它放回来;原视频不动。所以不要把哪一支移入回收站,也不要为了「改边界」重建一支,让用户在编辑器里拖。
去口癖、收紧停顿会改动整个视频,不在这里做;用户要时先说明影响,按剪口播的做法在子视频上处理。
创建结果里的 warnings 逐条告诉用户,用大白话:
multiple-assets:父视频不止一份主素材,这一版只按主素材剪,别的素材跟着移动,请用户在编辑器里检查。items-not-restorable:整段落在剪掉区域里的其他轨片段不会随「恢复」回来。range-not-exact:区间之外有一部分没能剪掉(主素材盖不到),入出点会比要求的略宽。captions-skipped:字幕层没建成,说明原因,告诉用户可以在字幕面板里再建。crops-adjusted:有一段取景范围被裁短或丢掉了(超出子视频范围,或截完一帧不剩),截掉的那几帧按相邻镜头或兜底的裁框取景;告诉用户是哪几秒:可以在画布上选中那一段放大,要挪位置先改成自由摆放,或请你改那一段的 focalPoint。split-short:有分屏段短于 3 秒:先核对合段有没有算错;告诉用户是哪几秒,觉得闪可以在属性面板的「版式」里换回一人。panel-upscaled:有几格放得太大(成片一个像素对原片超过 2.5 个),画面会发虚;告诉用户是哪一段,可以在「版式」里调小放大或换回一人。panel-region-cropped:有一格装不下你给的区域,这个人被裁掉了一部分;同样告诉用户是哪一段、在「版式」里调。panels-ignored:分屏段没生效,按几个人的并集当一人取景了(画幅没变、不是铺满或片段不是全屏);说明是哪一段。animation-split:画面被按取景切成了几段,循环动画或音量包络在每段的交界处会重新开始;告诉用户在哪几秒,有影响时请他在编辑器里检查。translations-skipped:父视频的这份译文没能带进子视频(旧格式换不过来),子视频里没有这门语言;告诉用户是哪种语言,可以在子视频上重新翻译。拒绝的错误(父视频有代码画面、区间为空等)如实说,不绕开。
默认交付是子视频,不是 mp4。用户明确要文件时,再对子视频调用 export:kind video、format mp4,jobs_inspect 等到 completed,把 outputs 里的 path 告诉用户。时间线上的字幕默认烧进成片(burnCaptions),不要字幕时给 false。用户想直接导出、不建子视频时,也可以沿用在父视频上按 ranges 导出的老办法,每段一个 {start, end}。
preview,不按 ranges 把片段导出成 mp4 来检查。收尾时逐支列出,写给用户看:
아직 리뷰가 없습니다. 사용해 본 소감을 남겨 주세요.
로그인 없이 쓸 수 있습니다. 사용 후기, 질문, 작동하지 않은 환경 등을 편하게 남겨 주세요.
아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.
测试用的说明书:用 BaoCut 转录、翻译、剪辑与导出视频。
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
用 BaoCut 处理视频与音频:转录、字幕、翻译、配音、剪口播、切短视频、分章、总结写稿、从链接下载、压缩转码、导出成片,或从零做一条成片。有媒体文件、视频链接、字幕文件或 BaoCut 视频时用;只翻译纯文本、与视频无关的写作或作图、别的剪辑器与 FFmpeg 的用法、BaoCut 源码开发不用。
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
Release BaoCut Electron desktop apps through GitHub Actions tags by default; use local/manual packaging only when explicitly requested. Also handles App version bumps, release continuation and portable signing backups; excludes craft skills and legacy standalone CLI releases.
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
旁白、视频切片与文字动画混搭的成片:拿一条新闻、一件事、一段八卦、一个产品或人物的故事,从网上与用户的视频库里搜素材、切当事人的原声,配旁白剪成一条画面一直在动的片子,推文、引语、日期、数字做成压在画面上的卡片。题材不限;别的成片里要加一段这样的切片也用它。整段画面由代码画出来的讲解片走 explainer-video,剪已有的口播走 talking-head-cut。
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
用户要给视频做封面、要封面大字,或要标题和封面一起出时用:读文稿提炼卖点,给几组标题与封面文案,用户挑定后按视频画幅生成封面图,放进这个视频的候选素材。每句都由视频兑现。只要标题或简介、不要封面时用起标题与写简介。需要视频的转写。
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
用户问「我哪一期讲过 X」「这几部视频里谁说过 Y」「X 在我的视频里是怎么讲的」「有哪些讲 X 的视频」这类要在多部视频里找答案的问题时用:按意思检索、按视频去重、按当前版本重新定位,只凭找回来的原话回答,每条论断注明视频与时间,覆盖不全时说明。不用于总结或改写一部视频(那是总结、博客),也不改视频。
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.