如何去除视频内的字幕和台词?最新4种方法汇总
Posted 鬼手的CSD
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何去除视频内的字幕和台词?最新4种方法汇总相关的知识,希望对你有一定的参考价值。
对于很多自媒体和视频剪辑从业者来说,视频去文字和水印是家常便饭了,经常需要去除各种视频中的文字。那么如何去除视频中的文字(字幕)呢?随着科技的发展,AI人工智能技术在音视频的应用也越来越多,小编今天为大家整理一下视频去文字和去水印的常用方法。本文将告诉你在2023年,大家是如何快速且无痕的删除视频字幕的!
以下是本篇主要内容
-
字幕的定义和类型
-
移除字幕的4种方法
-
如何用PR软件去除视频字幕
-
如何用鬼手剪辑自动去除视频字幕
-
如何用爱剪辑手动删除视频字幕
-
鬼手剪辑、PR中间值和爱剪辑等视频去字幕方法对比
第1部分:视频字幕的定义和类型
通常有两种类型的字幕,硬编码字幕和软字幕。 软字幕定义:是指字幕没有嵌入到电影中,可以由用户自己添加字幕文件。这可以通过将字幕叠加到可用的视频上来完成。如果你只下载字幕,那么它们将被认为是原始的。而软字幕主要是一个独立的流,可以根据用户的意愿打开或关闭。所以当你需要去除视频中的软字幕或者外挂字幕的时候,只需要打开播放器选择关闭字幕,就可以了。你也可以单独的下载字幕的SRT文件,对他实行编辑或者其他处理。 硬编码字幕定义:也被称之为嵌入式字幕、内嵌字幕、内置字幕等等,通常字幕的文字是已经嵌入电影中的字幕,这基本上意味着硬编码字幕是视频图像的一部分,无法摆脱。他没有一个单独的字幕文件,用户不能使用剪辑工具或者播放工具来删除这个选项。这些字幕是不可拆卸的,不能改变或完全删除。
第2部分:移除或者删除内嵌字幕的四种方法
软字幕可以用很多播放软件来去除,通常就是关闭播放器里的字幕选项或者移除SRT字幕文件即可. 但如果你的字幕已经嵌入某个视频中,我们通常使用另外四种方法来删除它们,后文均有详细介绍。
-
方法一、裁剪视频:通过爱剪辑等软件裁剪视频,只保留视频中没有水印的区域。
-
方法二、贴纸遮盖:通过剪映(capcut)等软件在视频中添加贴纸或图像来掩盖有水印的区域。
-
方法三、模糊贴回:通过PR等软件,用PR中间值的方法来遮挡有水印或者有文字的区域。
-
方法四、AI智能处理:通过鬼手剪辑(GhostCut)等软件,上传视频后自动检测视频中水印和字幕的位置,然后自动进行擦除,对于哪些移动字幕、不规则的文字场景、浮动的水印等等。
第3部分:如何用PR软件去除视频字幕?
PR可以裁剪画面或使用中间值去除字幕。
-
点击视频左侧效果控件中的缩放,放大画面,裁剪字幕。
-
在效果中搜索中间值并添加到视频上。
-
在左侧效果控件中绘制中间值的区域蒙版,设置半径数值。
-
根据以上步骤操作即可在PR中去掉字幕。
第4部分:如何用鬼手剪辑自动删除视频中的字幕?
我们来看看鬼手剪辑GhostCut视频去字幕案例,如下图所示:
鬼手剪辑去除文字效果
鬼手剪辑的操作流程也非常简单:
-
打开V信,搜索“鬼手剪辑”的小程序进去,点击【智能去文字】;
-
上传你需要处理的视频;
-
选择需要擦除的语言种类【中文或者英文】,选择擦除的方式【自动擦除还是自动裁剪】
-
点击提交,等待几分钟,即可完成文字全自动去除。
如果视频文字去除不干净,或者有误擦除,你可以到网页端选择文字擦除调整进行操作。你还可以同时在完成视频擦除的时候选择去重、视频翻译和其他选项,会一次性处理好,很方便。效果如上图所示
第5部分:如何用爱剪辑手动删除视频中的字幕?
加黑边遮住字幕和LOGO,打造宽屏电影效果 对于原视频字幕打的不太高的视频,为视频加黑边,即可遮住原片字幕和LOGO,还能实现宽屏电影的效果。方法有如下两种:
方法1、在“叠加素材”面板点击“加相框”左侧栏,在“其他”列表,有各种高度的黑边相框可供选择,当然,爱友们也可以选择喜欢的其他缤纷相框~
方法2、在“画面风格”面板点击“滤镜”左侧栏,在“滤镜”列表选择“加黑边框”。通过该功能,我们可以在“效果设置”栏目灵活设置边框高度、透明度、边框颜色。
第6部分:鬼手剪辑、PR中间值和爱剪辑等去字幕方法对比
去除方法 | 代表软件 | 时间成本 | 难度 | 效果 | 适合人群 |
剪裁法 | 爱剪辑 | 高 | 一般 | 损失画面信息 | 普通用户 |
黏贴法 | 剪映 | 高 | 一般 | 遮挡不好看,且难以大量处理 | 普通用户 |
AI智能处理 | 鬼手剪辑 | 少 | 低 | 大部分场景适合,几乎无痕 | 所有用户 |
中间值方法 | PR软件 | 高 | 难 | 大部分场景适合,有模糊痕迹 | 专业用户 |
相比而言,鬼手剪辑去字幕更简单,效果更好,速度更快,也适合更多用户。大家可以根据需要来选择自己的视频去字幕的方式哦
如何映射用ffmpeg和视频字幕提取的帧? (帧精度问题)
【中文标题】如何映射用ffmpeg和视频字幕提取的帧? (帧精度问题)【英文标题】:How to map frame extracted with ffmpeg and subtitle of a video? (frame accuracy problem) 【发布时间】:2019-11-12 15:12:09 【问题描述】:想为使用 ffmpeg 提取的帧生成文本文件,如果有的话,包含帧的字幕,在我也使用 ffmpeg 刻录字幕的视频上。
我使用带有pysrt
的python 脚本来打开subrip 文件并生成文本文件。
我正在做的是每个帧都由 ffmpeg 用帧号命名,然后由于它们以恒定速率提取,我可以使用公式 t1 = fnum/fps
轻松检索帧的时间位置,其中fnum
是使用文件名检索的帧数,fps
是传递给 ffmpeg 以进行帧提取的频率。
即使我使用相同的字幕文件来检索时间轴中的文本位置,也就是视频中使用的那个,我仍然会遇到准确性错误。大多数我有一些文本文件丢失或一些不应该存在。
因为在谈论帧时时间并不是真正连续的,所以我尝试使用带有硬编码字幕的视频的 fps 重新校准 t
,让我们将 fps vfps
称为视频 fps(我已确保视频 fps字幕刻录前后相同)。我得到公式:t2 = int(t1*vfps)/vfps
。
它仍然不是 100% 准确。
例如,我的视频是 30fps (vfps=30
),我以 4fps (fps=4
) 提取帧。
提取的第 166 帧 (fnum=166
) 没有显示字幕。在 subrip 文件中,前一个字幕以t_prev=41.330
结尾,下一个字幕从t_next=41.400
开始,这意味着t_sub
应该满足:t_prev < t_sub and t_sub < t_next
,但我无法做到这一点。
我试过的公式:
t1 = fnum/fps # 41.5 > t_next
t2 = int(fnum*vfps/fps)/vfps # 41.5 > t_next
# is it because of a indexing problem? No:
t3 = (fnum-1)/fps # 41.25 < t_prev
t4 = int((fnum-1)*vfps/fps)/vfps # 41.23333333 < t_prev
t5 = int(fnum*vfps/fps - 1)/vfps # 41.466666 > t_next
t6 = int((fnum-1)*vfps/fps + 1)/vfps # 41.26666 < t_prev
使用的命令:
# burning subtitles
# (previously)
# ffmpeg -r 25 -i nosub.mp4 -vf subtitles=sub.srt withsub.mp4
# now:
ffmpeg -i nosub.mp4 -vf subtitles=sub.srt withsub.mp4
# frames extraction
ffmpeg -i withsub.mp4 -vf fps=4 extracted/%05.bmp -hide_banner
为什么会发生这种情况,我该如何解决?
我注意到的一件事是,如果我提取原始视频和字幕的帧,对帧进行差异处理,结果不仅是字幕,背景也有变化(这不应该发生)。如果我两次使用相同的视频做相同的体验,差异为null,这意味着帧提取是一致的。
区别代码:
ffmpeg -i withsub.mp4 -vf fps=4 extracted/%05.bmp -hide_banner
ffmpeg -i no_sub.mp4 -vf fps=4 extracted_no_sub/%05.bmp -hide_banner
for img in no_sub/*.bmp; do
convert extracted/$img##*/ $img -compose minus -composite diff/$img##*/
done
谢谢。
【问题讨论】:
ffmpeg -r 25 -i nosub.mp4 --> 这将重新定时帧并破坏原始时间戳。除非您知道自己在做什么,否则您不想这样做。 不是真的...我想在不改变帧率的情况下刻录字幕。所以我先试试这个:ffmpeg -i nosub.mp4 -vf subtitles=sub.srt withsub.mp4
但是它把帧率从25改成了30,所以我手动设置了帧率,好像不对。我不是 ffmpeg 的大用户。我在 Google 上搜索了如何使用 ffmpeg 保留帧率并找到了这个 superuser.com/questions/460332/…,但它没有被接受的答案。
分享您最初尝试的日志。
我的错,原来的 fps 是 30,所以我第一次尝试刻录字幕并没有改变帧速率。然而问题依然存在。并且在字幕刻录前后进行帧减法显示出比字幕更多的差异。请让我提醒一下,这不是我要解决的问题,但可能是我的问题的原因。你想看什么日志?
还值得注意的是,在示例中,区间的边界乘以帧提取得到:t_prev*fps=165.32
和 t_next*fps=165.6
,这意味着,如果 ffmpeg 提取的帧是1/fps
的因素,那么我不应该让第 166 帧位于两个字幕之间,而是显示第二个字幕(或者前一个字幕)。如果通过视频 fps 进行校正也是一样的:int(t_next*vfps)*fps/vfps=165.2
, int(t_next*vfps)*fps/vfps=165.6
【参考方案1】:
您可以提取具有准确时间戳的帧,因此
ffmpeg -i nosub.mp4 -vf subtitles=sub.srt,settb=AVTB,select='if(eq(n\,0)\,1\,floor(4*t)-floor(4*prev_t))' -vsync 0 -r 1000 -frame_pts true extracted/%08d.bmp
这将从每四分之一秒中提取第一帧。输出文件名长度为 8 个字符,其中前 5 位是秒,后三位是毫秒。您可以根据最大文件持续时间更改字段大小。
【讨论】:
您能否详细介绍一下参数?我也收到一个错误:Missing ')' or too many args in 'if(eq(n,0)'
settb 过滤器用于将时基设置为 1 微秒,选择过滤器表达式将选择第一帧,然后选择最接近上一季度秒的每一帧。 -r 1000 将时间戳转换为毫秒精度(否则文件名会变得更长)。 vsync 确保 ffmpeg 不会改变时间戳。 frame_pts 将时间戳打印到文件名中。
编辑 cmd 以转义所有逗号以上是关于如何去除视频内的字幕和台词?最新4种方法汇总的主要内容,如果未能解决你的问题,请参考以下文章