视频文件添加字幕

起因:最近看了下mdn的video文章,看到一个有趣的知识点,居然可以自己手动给视频添加字幕

先上代码:

<body>
    <figure id="videoContainer" data-fullscreen="false">
    <video id="video" controls preload="metadata">
      <source src="./sintel-short.mp4" type="video/mp4"></source>
      <track label="Chinese" kind="subtitles" srclang="en" src="./cn.vtt" >
      <track label="English" kind="subtitles" srclang="en" src="./en.vtt" >
    </video>
  </figure>
  <button id="cn">仅中文</button>
  <button id="en">仅英文</button>
  <button id="double">双语</button>
    <script>
		var video = document.getElementById('video');
    console.log('video: ', video.textTracks);
    for (let index = 0; index < video.textTracks.length; index++) {
      const element = video.textTracks[index];
      element.mode='showing'
    }
    let cn = document.getElementById('cn')
    let en = document.getElementById('en')
    let double = document.getElementById('double')
    cn.addEventListener('click',()=>{
      video.textTracks[0].mode = 'showing'
      video.textTracks[1].mode = 'hidden'
    })
    en.addEventListener('click',()=>{
      video.textTracks[0].mode = 'hidden'
      video.textTracks[1].mode = 'showing'
    })
    double.addEventListener('click',()=>{
      for (let index = 0; index < video.textTracks.length; index++) {
      const element = video.textTracks[index];
      element.mode='showing'
    }
    })
    </script>
  </body>

主要依据的是video属性来的。

.vtt文件,可以有专门的网站转换字幕,这里我直接拿的官网文件

最重要的一问题,html直接在浏览器运行的时候,字幕是不展示的,百度了一下找到了解决问题:

vscode安装Live serve插件,然后右键选择open with LIve  serve 即可

 

要给本地视频文件添加字幕,可以使用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类来创建一个新的视频文件并将每一帧写入其中,就像读取视频文件一样。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值