字幕文件与视频文件对不上的处理方式

阅读原文

序言

最近给自己的私人影院下了很多电影,会出现一种情况:很多字幕网站的字幕都是比较老的,字幕可以适配1080p(或者比较早)的视频,但是有部分2160p的视频的字幕很难找,经常下了一堆字幕,结果都和视频对不上,差了个几秒。观影嘛,能4k,尽量4k的啊。当然,在电脑上播放的话,使用IINA或者Potplayer可以直接调整字幕延迟,其实也没差。但是如果需要把电影放在电视上播放的话,那就得让字幕和视频文件对起来了。

想着能不能自己动手,把字幕文件处理下,不需要大修大改,非常深入的学习怎么制作字幕,因为下载下来的字幕文件每条的Start time, End time, Duration都是没问题的,就是整体前后差几秒而已。

找字幕软件,摸索使用方法,花了两三个小时总算是搞定了。

准备工作

准备工作1

可以先在IINA或者Potplayer里面预处理下,通过调整字幕延迟,看看字幕文件和视频文件相差多少帧/秒,是快了还是慢了,会方便点,字幕软件里校正处理比较麻烦,而且实际效果和在播放器里播放有点差别。

总之,先搞清楚,字幕文件和视频文件相差几秒就ok。

例如我下面这个例子,测试出来,字幕快了4秒,需要延迟4秒刚刚好。

https://pic-1259640338.cos.ap-shanghai.myqcloud.com/img/Screen%20Shot%202022-07-14%20at%2017.17.46.png

准备工作2

字幕的下载网站

分享交流下载字幕平台 - SubHD

字幕下载网站 | A4k字幕网

Windows下的处理方式

下载SubtitleEdit

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要给本地视频文件添加字幕,可以使用JavaCV和OpenCV库来实现。以下是一个基本的示例,演示如何使用JavaCV和OpenCV来读取视频文件并在每一帧上添加文本。 首先,需要添加JavaCV和OpenCV库的依赖项。这可以通过在您的项目中添加以下Maven依赖项来完成: ``` <dependency> <groupId>org.bytedeco</groupId> <artifactId>javacv</artifactId> <version>1.5.3</version> </dependency> <dependency> <groupId>org.bytedeco</groupId> <artifactId>opencv</artifactId> <version>4.5.1-1.5.3</version> </dependency> ``` 接下来,可以使用以下代码来打开视频文件并读取每一帧: ``` FFmpegFrameGrabber grabber = new FFmpegFrameGrabber("path/to/video.mp4"); grabber.start(); Frame frame; while ((frame = grabber.grabFrame()) != null) { // 处理每一帧 } grabber.stop(); grabber.release(); ``` 在处理每一帧时,可以使用JavaCV的CanvasFrame类将帧显示在屏幕上。然后可以使用OpenCV的putText方法在图像上添加文本。以下是一个完整的示例: ``` FFmpegFrameGrabber grabber = new FFmpegFrameGrabber("path/to/video.mp4"); grabber.start(); CanvasFrame canvas = new CanvasFrame("Video"); Frame frame; while ((frame = grabber.grabFrame()) != null) { if (canvas.isVisible()) { // 在CanvasFrame上显示帧 canvas.showImage(frame); // 将帧转换为OpenCV Mat格式 Java2DFrameConverter converter = new Java2DFrameConverter(); BufferedImage image = converter.getBufferedImage(frame); Mat mat = new Mat(image.getHeight(), image.getWidth(), CV_8UC3); byte[] data = ((DataBufferByte) image.getRaster().getDataBuffer()).getData(); mat.data().put(data); // 在图像上添加文本 Imgproc.putText(mat, "Hello, world!", new Point(50, 50), FONT_HERSHEY_SIMPLEX, 1.0, new Scalar(255, 255, 255), 2); // 将Mat转换回JavaCV Frame格式并显示 Frame newFrame = converter.convert(mat); canvas.showImage(newFrame); } } canvas.dispose(); grabber.stop(); grabber.release(); ``` 这个示例将在每一帧上添加“Hello, world!”的文本。您可以根据需要更改文本的位置,字体,大小和颜色。另外,要将字幕保存到视频文件中,您可以使用JavaCV的FFmpegFrameRecorder类来创建一个新的视频文件并将每一帧写入其中,就像读取视频文件一样。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值