文章目录

  • 一、工具准备
  • 二、操作步骤
    • 1. 导出视频中的位置信息
    • 2. 使用Java将位置信息转换为srt
    • 3. 视频+字幕合并(ffmpeg)
  • 参考材料

一、工具准备

  1. exiftool,用于导出视频的GPS信息(包括海拔高度)
    下载地址:https://exiftool.org/
  2. ffmpeg,给视频增加字幕
  3. Java,将exiftool导出的位置文件转换为字幕文件srt

二、操作步骤

1. 导出视频中的位置信息

exiftool -p /path/to/gpx.fmt -ee xxx.MP4 >out.gpx
–gpx.fmt下载地址:
https://github.com/exiftool/exiftool/tree/master/fmt_files
out.gpx内容:

<trkpt lat="{经度}" lon="{纬度}"><ele>{高度}</ele><time>{GPS时间}</time>
</trkpt>

2. 使用Java将位置信息转换为srt

public class SrtTest {private static final SimpleDateFormat EXIF_TIME_FORMAT = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");private static final SimpleDateFormat SRT_TIME_FORMAT = new SimpleDateFormat("HH:mm:ss.mmm");public static void main(String[] args) throws IOException, ParseException {String exifFilePath = "xxx";List<PosInfo> infoList = parseExifFile(exifFilePath);// 转换成字幕文件,保存到outputSrtFileString outputSrtFile="out.srt";transferToSrt(infoList,outputSrtFile);}private static void transferToSrt(List<PosInfo> infoList,String outputFile) throws IOException, ParseException {File output = new File(outputFile);BufferedWriter fw = new BufferedWriter(new FileWriter(output,false));//1//00:00:00.000 --> 00:01:00.000//测试字幕Date videoStart = SRT_TIME_FORMAT.parse("00:00:00.000");infoList.sort(Comparator.comparing(o -> o.time));for(int i=1;i<infoList.size();i++){fw.write(i+"\r\n");long currTime = infoList.get(i).time.getTime();int displaySec = (int)(currTime-infoList.get(i-1).time.getTime())/1000;String process = buildTimeLine(videoStart,displaySec);fw.write(process+"\r\n");fw.write("高度:"+infoList.get(i).height+"\r\n");fw.write("\r\n");addDisplay(videoStart,displaySec);}fw.flush();}private static void addDisplay(Date videoStart,int displaySec){Calendar calendar = Calendar.getInstance();calendar.setTime(videoStart);calendar.add(Calendar.SECOND,displaySec);videoStart=calendar.getTime();}//00:00:00.000 --> 00:01:00.000private static String buildTimeLine(Date videoStart,int displaySec){String process = SRT_TIME_FORMAT.format(videoStart)+" --> ";Calendar calendar = Calendar.getInstance();calendar.setTime(videoStart);calendar.add(Calendar.SECOND,displaySec);process += SRT_TIME_FORMAT.format(calendar.getTime());return process;}private static List<PosInfo> parseExifFile(String filePath) throws IOException, ParseException {List<String> lines = Files.readAllLines(new File(filePath).toPath());Iterator<String> iter = lines.iterator();List<PosInfo> infoList = Lists.newArrayList();while(iter.hasNext()){String line = iter.next();if(line.contains("<ele>")){float height =Float.parseFloat(line.substring(line.indexOf("<ele>")+5,line.indexOf("</ele>")));System.out.println(height);String nextLine=iter.next();String timeStr= nextLine.substring(nextLine.indexOf("<time>")+6,nextLine.indexOf("</time>"));Date time = EXIF_TIME_FORMAT.parse(timeStr);System.out.println(time);infoList.add(new PosInfo(height,time));}}return infoList;}private static class PosInfo{float height;Date time;public PosInfo(float height, Date time) {this.height = height;this.time = time;}}
}

获得字幕信息,如下:

1
00:00:00.000 --> 00:00:01.000
高度:20.12
00:00:01.000 --> 00:00:02.000
高度:20.33
00:00:02.000 --> 00:00:03.000
高度:20.3

表示: 第0->1秒,字幕显示"高度:20.1"。

3. 视频+字幕合并(ffmpeg)

ffmpeg -i xxx.MP4 -vf subtitles=out.srt output.mp4

参考材料

  1. 视频文件信息导出,看回答。https://stackoverflow.com/questions/40333901/export-gps-points-from-dash-cam-with-ffmpeg
  2. MP4合成字幕。https://www.jianshu.com/p/f33910818a1c

无人机拍摄的视频增加实时高度信息相关推荐

  1. Live Maps中国更新-为北京增加实时交通信息

    昨天,微软Live Maps中国进行了一次较大更新,为北京市增加了实时交通信息,并且支持将该信息免费发送至用户手机.其实准确的说,应该是将实时交通信息集成了进来,这些信息早就有,而且北京公众出行网和作 ...

  2. Python读取DJI无人机拍摄照片中的DJI自定义EXIF信息

    Python读取DJI无人机拍摄照片中的DJI自定义EXIF信息 b = b"\x3c\x2f\x72\x64\x66\x3a\x44\x65\x73\x63\x72\x69\x70\x74 ...

  3. 轻松获取图片和视频文件的Exif信息-Java篇

    前言 随着现在实景地图的如火如荼建设,无人机等航拍测绘手段的不断升级,我们在获取全景照片或者正射影像,全景视频等数据上更加快速.便捷.由于无人机本身不进行相关数据的处理,比如全景地图的生成.视频的信息 ...

  4. 多路视频数据实时采集系统设计与实现

    多路视频数据实时采集系统设计与实现 常永亮   王霖萱  常馨蓉 摘要 面对越来越多的实时视频采集.播放的应用,如何能更加方便的操控视频采集,保证流畅的播放效果,成为近几年实时媒体流的一个重要研究方向 ...

  5. 森林资源调查 |基于无人机平台应用激光雷达技术获取树木信息 (包含位置、树高、树冠直径、树冠面积和树冠体积等)

    一.场景概述 森林资源调查的重要内容之一是测量样方内单木的树种.树高.胸径及所在位置等.激光雷达技术能够同时获取森林冠层表面的水平和垂直结构信息,基于高密度的激光雷达点云不仅能够获取林分尺度森林参数, ...

  6. 码农技术炒股之路——实时交易信息、主力动向信息分库备份

    一般来说,一个股票信息应该保存在一张表中.但是由于我机器资源限制,且我希望尽快频率的抓取数据.所以每天我将所有股票的实时交易信息放在daily_temp库中的一个以日期命名的表中.主力动向信息也是如此 ...

  7. NeuralRecon:单目视频的实时Coherent 三维重建

    标题:NeuralRecon: Real-Time Coherent 3D Reconstruction from Monocular Video 作者:Jiaming Sun Yiming Xie ...

  8. 1920+1080+android三星手机,三星Galaxy Note3能拍摄1080p视频吗?支持1080p播放吗?

    三星Galaxy Note3能拍摄1080p视频吗 三星Galaxy Note3能拍摄1080p视频,支持1080p(1920×1080,30帧/秒)视频录制. 三星Galaxy Note3的机身边框 ...

  9. iNeuOS工业互联网操作系统,提升分布式云端控制安全策略和增加实时日志功能...

    目       录 1.      概述... 2 2.      平台演示... 2 3.      云端控制策略和应用过程... 2 3.1           云端控制策略... 2 3.2   ...

最新文章

  1. Ubuntu搭建Spark运行环境
  2. win8计算机管理打不开,win8,资源管理器未响应,文件夹打不开,假死……
  3. ie8以下 es5常见的数组遍历方法不可用的解决方案 forEach,map,filter,some,every
  4. 大数据互联网架构阶段 前台系统架构 跨域请求
  5. 浅谈javascript递归(白话版)
  6. Oracle入门(十三A1)之替换变量,变量名,变量名
  7. C# MVC 自定义ActionResult实现EXCEL下载
  8. 在本地调用hadoop的api
  9. Mybatis 处理日期格式自动转换
  10. ant design pro模板_ant design pro 当中改变ant design 组件的样式和 数据管理
  11. sqlplus登录、连接命令
  12. 关于代码整理重构小记
  13. 堆积图--MatplotLib
  14. Ubuntu 安装磁盘分区及启动项添加
  15. HDU1728 逃离迷宫 【BFS】
  16. Vue解决跨域问题方案
  17. 计算机网络特有的设备是什么,什么是网络设备(计算机入门知识,这些网络设备及工具你有必要知道)...
  18. 人口空间分布格局(1)
  19. linux用户motd,linux – 每个用户的SSH MOTD
  20. 基于java+ssm+mysql的大学生考勤管理系统及智能分析系统

热门文章

  1. 功能测试用例编写2(商城注册登录及购物车模块)
  2. 《Java 并发编程》线程池
  3. 墨者靶场 初级:Bash漏洞分析溯源
  4. 关于transforms.ToTensor()
  5. 你的人品有多好?来做个挺准的人品测试吧
  6. 高斯激光光束重塑成Donut模式
  7. 高斯激光光束重塑成 Donut 模式
  8. python 用turtle自动画图
  9. 传智健康2.0-4-预约管理-套餐管理
  10. Qt如何实现实时鼠标绘制图形