背景

手机拍摄的视频往往比特率极高,空间占用极大,在整理照片备份时,如果可以对某些特别大、但又不要求画质极高的视频进行压缩,从而达到节省空间的目的,同时又不会丢失回忆。

常用的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

压缩视频并保留元信息相关推荐

  1. CoVOS:无需解码!利用压缩视频比特流的运动矢量和残差进行半监督的VOS加速(CVPR 2022)...

    关注公众号,发现CV技术之美 本篇分享 CVPR 2022 论文『Accelerating Video Object Segmentation with Compressed Video』,探讨了如何 ...

  2. Python如何创建装饰器时保留函数元信息

    问题 你写了一个装饰器作用在某个函数上,但是这个函数的重要的元信息比如名字.文档字符串.注解和参数签名都丢失了. 很多人学习python,不知道从何学起. 很多人学习python,掌握了基本语法过后, ...

  3. ICASSP 2022 | 前沿音视频成果分享:基于可变形卷积的压缩视频质量增强网络

    阿里云视频云视频编码与增强技术团队最新研究成果论文<基于可变形卷积的压缩视频质量增强网络>(Deformable Convolution Dense Network for Compres ...

  4. **图片元信息Exif**

    什么是Exif? Exif是一种图像文件格式,实际上Exif格式就是在JPEG格式头部插入了数码照片的信息,包括拍摄时的光圈.快门.白平衡.ISO.焦距.日期时间等各种和拍摄条件以及相机品牌.型号.色 ...

  5. db2 删除schema中所有表_常用SQL系列之(六):删除方式、数据库、表及索引元信息查询等...

    本系统为@牛旦教育IT课堂在微头条上的内容, 为便于查阅,特辑录于此,都是常用SQL基本用法.. 前两篇连接: (一):SQL点滴(查询篇):数据库基础查询案例实战 (二):SQL点滴(排序篇):数据 ...

  6. java 视频压缩_Java 压缩视频(无需安装插件)

    亲测可用,基于ffmpeg 去进行压缩, 测试原视频大小:835.87 MB 压缩后大小:118.8 MB 压缩比率 :85.78% 好了,开始上代码 1.首先 pom文件中引入下面两个 jar 包 ...

  7. MATLAB AppDesigner 中TextArea保留原有信息并换行显示提示信息

    App Designer 中的文本区域TextArea组件,一般可以用来作为matlab app设计中的信息显示. app.TextArea.Value = 'Hello Matlab'; Value ...

  8. PHP使用ffmpeg压缩视频

    PHP使用ffmpeg压缩视频 视频压缩可以有一下方式: 1.压缩分辨率 例如视频的分辨率是720x1280,可以压缩分辨率为360x640 2.压缩帧数 通过压缩视频的帧数来压缩,可以压缩视频的帧数 ...

  9. Kubernetes学习笔记(二):Pod控制器详解:资源元信息、ReplicaSet、Deployment、DaemonSet、Job、CronJob

    1.资源元信息 Kubernetes的资源对象组成:主要包括了Spec.Status两部分.其中Spec部分用来描述期望的状态,Status部分用来描述观测到的状态 Kubernetes的元数据部分. ...

最新文章

  1. 异常检测算( OneClassSVM、EllipticEnvelope、IsolationForest、LocalOutlierFactor)法比较,基于四个仿真数据集
  2. python 中shape 1,n 与1的区别
  3. 网站快照更新不及时有什么好的解决办法吗?
  4. 统计字符串中单词个数
  5. “No operations defined in spec!”一文教你swagger如何扫描多个controller
  6. Sail(CodeForces - 298B )
  7. java 什么时候用递归_如果要用Java实现算法,一定慎用递归
  8. hbase数据结构小结
  9. div+css完成首页布局
  10. 对流式计算模型的理解
  11. 你不知道的分布式锁+分布式事务面试题
  12. PostgreSQL column cryptographic use pgcrypto extension and optional openssl lib
  13. Mac Yapi 内网安装保姆级步骤
  14. Appium+python实现App自动化登录
  15. 《Android进阶指北》进阶必备,今日送出8本
  16. 阿里P8亲自教你!Android高级工程师进阶学习,全套教学资料
  17. 似然函数和最大似然估计
  18. 快速接入百度地图定位、描点
  19. DNA存储技术创造新纪录 存储容量已达200MB
  20. 小城里的“明星”产业,有微信云托管保驾护航

热门文章

  1. app安卓开发教程!Kotlin可能带来的一个深坑,知乎上已获万赞
  2. Absolute 盘点8种CSS实现垂直居中水平居中的绝对定位居中技术
  3. centos7的virbr0问题
  4. range()和np.arange()的区别
  5. DuplicateHandle用法
  6. linux缩小根目录分区如何缩小,Linux根目录分区大小调整教程
  7. C和C++中struct的typedef用法建议
  8. 抓住一切机会从小事做起 优秀营销人死守的5个秘密
  9. 01 线程同步机制封装类
  10. Dart语法之可选参数{ } [ ]