压缩视频并保留元信息
背景
手机拍摄的视频往往比特率极高,空间占用极大,在整理照片备份时,如果可以对某些特别大、但又不要求画质极高的视频进行压缩,从而达到节省空间的目的,同时又不会丢失回忆。
常用的HandBrake在压缩视频后便抹去了所有元数据,包括修改日期、GPS位置、拍摄设备等。
所以需要寻求一个合适解决方法。
方案
使用到的工具有两个:ffmpeg和exiftool,是两个非常著名的开源软件。
ffmpeg作为一个常用的视频处理开源程序,被诸如HandBrake等软件用作底层代码的核心。其提供了各类的压缩方式。
exiftool可以处理各类音视频的metadata。
VBR(variable bit rate)
bitrate固定目标码率模式默认采用的是VBR动态(可变)比特率的方式进行编码,简单的内容少给点码率,复杂的内容多给点码率。
VBR例子:ffmpeg -i input.mp4 -vcodec libx264 -preset veryslow output.mp4
ABR(average bit rate)
现在的网络视频基本上都是采用ABR平均比特率的编码方式,如果VBR的码率变化太大,用户的设备或网络状况又不好的情况下很容易变成花屏或者黑屏。
ABR例子:ffmpeg -i input.mp4 -vcodec libx264 -preset veryslow -b:v 3000k output.mp4
CBR(constant bit rate)
CBR恒定比特率,他其实就是在ABR的基础上加上一些指令(…-b:v 4000k -minrate 4000k -maxrate 4000k -bufsize 1835k…)让码率尽可能固定在一个数值上。
对于大多数情况,我们可以采用VBR进行动态压缩。cd到照片所在文件夹,以下命令将会对所有视频文件进行压缩,并将压缩后的文件重新命名,加上-compressed的后缀。这样压缩后的视频,虽然元数据都得到了保存,但文件的修改时间缺没有得到保留。故需要之后的第二行代码进行操作。
for i in *[^-compressed].*; do ffmpeg -i "$i" -movflags use_metadata_tags -vcodec libx264 -preset fast "${i%.*}-compressed.mp4"; done
\
for i in *[^-compressed].*; do touch -r "$i" "${i%.*}-compressed.mp4"; done #批量拷贝视频的修改时间
在使用前可以先哪一个视频来做测试,压缩和修改完日期后利用另一个开源工具exiftool
查看元数据,看是否是正确的修改日期、GPS位置、拍摄设备等。
参考文献
https://blog.csdn.net/ETalien_/article/details/102931065
压缩视频并保留元信息相关推荐
- CoVOS:无需解码!利用压缩视频比特流的运动矢量和残差进行半监督的VOS加速(CVPR 2022)...
关注公众号,发现CV技术之美 本篇分享 CVPR 2022 论文『Accelerating Video Object Segmentation with Compressed Video』,探讨了如何 ...
- Python如何创建装饰器时保留函数元信息
问题 你写了一个装饰器作用在某个函数上,但是这个函数的重要的元信息比如名字.文档字符串.注解和参数签名都丢失了. 很多人学习python,不知道从何学起. 很多人学习python,掌握了基本语法过后, ...
- ICASSP 2022 | 前沿音视频成果分享:基于可变形卷积的压缩视频质量增强网络
阿里云视频云视频编码与增强技术团队最新研究成果论文<基于可变形卷积的压缩视频质量增强网络>(Deformable Convolution Dense Network for Compres ...
- **图片元信息Exif**
什么是Exif? Exif是一种图像文件格式,实际上Exif格式就是在JPEG格式头部插入了数码照片的信息,包括拍摄时的光圈.快门.白平衡.ISO.焦距.日期时间等各种和拍摄条件以及相机品牌.型号.色 ...
- db2 删除schema中所有表_常用SQL系列之(六):删除方式、数据库、表及索引元信息查询等...
本系统为@牛旦教育IT课堂在微头条上的内容, 为便于查阅,特辑录于此,都是常用SQL基本用法.. 前两篇连接: (一):SQL点滴(查询篇):数据库基础查询案例实战 (二):SQL点滴(排序篇):数据 ...
- java 视频压缩_Java 压缩视频(无需安装插件)
亲测可用,基于ffmpeg 去进行压缩, 测试原视频大小:835.87 MB 压缩后大小:118.8 MB 压缩比率 :85.78% 好了,开始上代码 1.首先 pom文件中引入下面两个 jar 包 ...
- MATLAB AppDesigner 中TextArea保留原有信息并换行显示提示信息
App Designer 中的文本区域TextArea组件,一般可以用来作为matlab app设计中的信息显示. app.TextArea.Value = 'Hello Matlab'; Value ...
- PHP使用ffmpeg压缩视频
PHP使用ffmpeg压缩视频 视频压缩可以有一下方式: 1.压缩分辨率 例如视频的分辨率是720x1280,可以压缩分辨率为360x640 2.压缩帧数 通过压缩视频的帧数来压缩,可以压缩视频的帧数 ...
- Kubernetes学习笔记(二):Pod控制器详解:资源元信息、ReplicaSet、Deployment、DaemonSet、Job、CronJob
1.资源元信息 Kubernetes的资源对象组成:主要包括了Spec.Status两部分.其中Spec部分用来描述期望的状态,Status部分用来描述观测到的状态 Kubernetes的元数据部分. ...
最新文章
- 异常检测算( OneClassSVM、EllipticEnvelope、IsolationForest、LocalOutlierFactor)法比较,基于四个仿真数据集
- python 中shape 1,n 与1的区别
- 网站快照更新不及时有什么好的解决办法吗?
- 统计字符串中单词个数
- “No operations defined in spec!”一文教你swagger如何扫描多个controller
- Sail(CodeForces - 298B )
- java 什么时候用递归_如果要用Java实现算法,一定慎用递归
- hbase数据结构小结
- div+css完成首页布局
- 对流式计算模型的理解
- 你不知道的分布式锁+分布式事务面试题
- PostgreSQL column cryptographic use pgcrypto extension and optional openssl lib
- Mac Yapi 内网安装保姆级步骤
- Appium+python实现App自动化登录
- 《Android进阶指北》进阶必备,今日送出8本
- 阿里P8亲自教你!Android高级工程师进阶学习,全套教学资料
- 似然函数和最大似然估计
- 快速接入百度地图定位、描点
- DNA存储技术创造新纪录 存储容量已达200MB
- 小城里的“明星”产业,有微信云托管保驾护航
热门文章
- app安卓开发教程!Kotlin可能带来的一个深坑,知乎上已获万赞
- Absolute 盘点8种CSS实现垂直居中水平居中的绝对定位居中技术
- centos7的virbr0问题
- range()和np.arange()的区别
- DuplicateHandle用法
- linux缩小根目录分区如何缩小,Linux根目录分区大小调整教程
- C和C++中struct的typedef用法建议
- 抓住一切机会从小事做起 优秀营销人死守的5个秘密
- 01 线程同步机制封装类
- Dart语法之可选参数{ } [ ]