无人机拍摄的视频增加实时高度信息
文章目录
- 一、工具准备
- 二、操作步骤
- 1. 导出视频中的位置信息
- 2. 使用Java将位置信息转换为srt
- 3. 视频+字幕合并(ffmpeg)
- 参考材料
一、工具准备
- exiftool,用于导出视频的GPS信息(包括海拔高度)
下载地址:https://exiftool.org/ - ffmpeg,给视频增加字幕
- 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
参考材料
- 视频文件信息导出,看回答。https://stackoverflow.com/questions/40333901/export-gps-points-from-dash-cam-with-ffmpeg
- MP4合成字幕。https://www.jianshu.com/p/f33910818a1c
无人机拍摄的视频增加实时高度信息相关推荐
- Live Maps中国更新-为北京增加实时交通信息
昨天,微软Live Maps中国进行了一次较大更新,为北京市增加了实时交通信息,并且支持将该信息免费发送至用户手机.其实准确的说,应该是将实时交通信息集成了进来,这些信息早就有,而且北京公众出行网和作 ...
- Python读取DJI无人机拍摄照片中的DJI自定义EXIF信息
Python读取DJI无人机拍摄照片中的DJI自定义EXIF信息 b = b"\x3c\x2f\x72\x64\x66\x3a\x44\x65\x73\x63\x72\x69\x70\x74 ...
- 轻松获取图片和视频文件的Exif信息-Java篇
前言 随着现在实景地图的如火如荼建设,无人机等航拍测绘手段的不断升级,我们在获取全景照片或者正射影像,全景视频等数据上更加快速.便捷.由于无人机本身不进行相关数据的处理,比如全景地图的生成.视频的信息 ...
- 多路视频数据实时采集系统设计与实现
多路视频数据实时采集系统设计与实现 常永亮 王霖萱 常馨蓉 摘要 面对越来越多的实时视频采集.播放的应用,如何能更加方便的操控视频采集,保证流畅的播放效果,成为近几年实时媒体流的一个重要研究方向 ...
- 森林资源调查 |基于无人机平台应用激光雷达技术获取树木信息 (包含位置、树高、树冠直径、树冠面积和树冠体积等)
一.场景概述 森林资源调查的重要内容之一是测量样方内单木的树种.树高.胸径及所在位置等.激光雷达技术能够同时获取森林冠层表面的水平和垂直结构信息,基于高密度的激光雷达点云不仅能够获取林分尺度森林参数, ...
- 码农技术炒股之路——实时交易信息、主力动向信息分库备份
一般来说,一个股票信息应该保存在一张表中.但是由于我机器资源限制,且我希望尽快频率的抓取数据.所以每天我将所有股票的实时交易信息放在daily_temp库中的一个以日期命名的表中.主力动向信息也是如此 ...
- NeuralRecon:单目视频的实时Coherent 三维重建
标题:NeuralRecon: Real-Time Coherent 3D Reconstruction from Monocular Video 作者:Jiaming Sun Yiming Xie ...
- 1920+1080+android三星手机,三星Galaxy Note3能拍摄1080p视频吗?支持1080p播放吗?
三星Galaxy Note3能拍摄1080p视频吗 三星Galaxy Note3能拍摄1080p视频,支持1080p(1920×1080,30帧/秒)视频录制. 三星Galaxy Note3的机身边框 ...
- iNeuOS工业互联网操作系统,提升分布式云端控制安全策略和增加实时日志功能...
目 录 1. 概述... 2 2. 平台演示... 2 3. 云端控制策略和应用过程... 2 3.1 云端控制策略... 2 3.2 ...
最新文章
- Ubuntu搭建Spark运行环境
- win8计算机管理打不开,win8,资源管理器未响应,文件夹打不开,假死……
- ie8以下 es5常见的数组遍历方法不可用的解决方案 forEach,map,filter,some,every
- 大数据互联网架构阶段 前台系统架构 跨域请求
- 浅谈javascript递归(白话版)
- Oracle入门(十三A1)之替换变量,变量名,变量名
- C# MVC 自定义ActionResult实现EXCEL下载
- 在本地调用hadoop的api
- Mybatis 处理日期格式自动转换
- ant design pro模板_ant design pro 当中改变ant design 组件的样式和 数据管理
- sqlplus登录、连接命令
- 关于代码整理重构小记
- 堆积图--MatplotLib
- Ubuntu 安装磁盘分区及启动项添加
- HDU1728 逃离迷宫 【BFS】
- Vue解决跨域问题方案
- 计算机网络特有的设备是什么,什么是网络设备(计算机入门知识,这些网络设备及工具你有必要知道)...
- 人口空间分布格局(1)
- linux用户motd,linux – 每个用户的SSH MOTD
- 基于java+ssm+mysql的大学生考勤管理系统及智能分析系统