需求:

  1. 需要指定大小的 视频/图片 文件(如300M、299.9M、300.1M)
  2. 上传后还可以进行预览,查看视频内容,可以拖拉进度条,检查视频内容是否受损

存储单位转换:计算机中常见的单位及转换

一、生成指定大小的文件

这个网络的资源比较多,主要方法有以下几种

1、fsutil命令(Windows)

# fsutil file createnew  文件名(带路径)  文件大小(byte)
# 例如:创建一个100M大小的.zip文件
# 100M = 1024字节 * 1024 * 100
fsutil file createnew D:\test.zip

2、mkfile命令(Mac)

# mkfile -n size[b|k|m|g] file_name
# 创建一个100M的.zip文件
mkfile -n 100m test.zip

3、dd命令(通用)

# dd命令需要定义 文件名,区块尺寸和区块大小
# dd if=/dev/zero of=filename bs=1024 count=1000
  • if 输入文件
  • of 输出文件
  • bs 字节为单位的块大小
  • count 被复制的块数
  • /dev/zero 是一个字符设备,不断的返回0值字节
# bs的默认单位是byte,即b,也可以指定为 bs=1M
# 在当前目录下会生成一个1000M的test文件
# 文件内容为全0(因从/dev/zero中读取,/dev/zero为0源)
# 但是这样为实际写入硬盘,文件产生速度取决于硬盘读写速度
# 如果欲产生超大文件,速度很慢。# 在/test目录生成一个大小为1G的大文件,内容是0
dd if=/dev/zero of=/test count=2 bs=512M

二、生成指定大小的视频

预先环境配置:Mac如何配置FFmpeg环境

通过第一部分我们知道如何生成一个指定大小的文件,我们自然可以通过上述方式更改一下后缀名,将其变成一个视频或其他任何类型文件。

但是我们的目的是希望创建出来的视频文件还可以进行播放和预览,如果有音频内容就更好了,便于我们进行第二步测试时候,播放、操作进度条及校验清晰度等。

那我们需要了解视频大小由什么参数决定。

视频大小计算公式:总码率(音频码率+视频码率) * 时长 / 8 = 视频时长(kb)
码率(常用单位kbps):每秒有多少数据 1Mbps=1024Kbps=1024/8KBps=128KB/s

了解这个基本就可以开工了,我们的目标就是如何修改一个已知视频的码率,通过搜索发现视频相关的概念太多,我们目标只解决问题,不讨论视频内部的各种概念

我们可以拿到指定大小的视频,最简单的方式就是裁剪,根据公式,我们按需要从一个大视频中裁剪指定的长度,就可以获取对应大小的视频

我们如果想拿到一个200M的视频大小如何操作呢?

# 首先第一步从得物下载一个视频,test1video的大小是5.2M,
# 也就是说,我们想拿到300M的视频,得先让这个视频拼接起来
import os# 获取视频的大小byte
file_byte = os.path.getsize("/Users/admin/Downloads/test/test1video.mp4") # 5159526
# 这个视频离我们目标有点远,需要进行视频长度拼接,保持视频的其他参数不变
tar_size = 1024 * 1024 * 300    # 300M
count = (int)(tar_size/file_byte) + 1
print(count)
# 生成一个file_list.txt文件,填入指定内容
file = open('/Users/admin/Downloads/test/file_list.txt','w+')
while count > 0:if count != 1:file.write("file 'test1video.mp4'\n")else:file.write("file 'test1video.mp4'")count -= 1file.close()


通过上边的程序我们可以得到一个文件,file_list.txt,里边包含了指定个数的文件名
使用FFmpeg合并这些相同的视频

# 需要先添加FFmpeg相关可执行文件,并且配置环境变量
ffmpeg -f concat -i file_list.txt -c copy file_list.mp4


可以发现根据粗略计算出来的,结果变大了,这是因为合并的算法导致,我们进行略调整,目测减少两个,也就是59个试一下
还是大了一点,再减少一个,使用58个进行合并

可以发现已经小于300M了,这样我们就拿到了300M左右两个测试视频。

问1:如何将视频制作输出为精准到比特的大小呢?
使用视频制作软件,制作出单位视频

问2:为什么Mac电脑和其他电脑显示同一个视频的大小会有差别?
答:Mac电脑进行计算视频大小的时候是有自己的算法的,不是常规的计算方式,不用管Mac电脑的显示内存大小

三、生成指定大小的图片

我们使用“图片内部藏文件的做法”
三步

1、生成一个 指定大小的.zip文件

# 生成一个100M大小的zip文件
mkfile -n 100m zip100m.zip

2、准备好一张图片

3、合并文件

windows电脑请编写这个.bat文件,并双击执行

copy/b nice.jpeg+zip100m.zip=nice2.jpeg

Mac电脑在命令行直接执行

cat ./nice.jpeg zip100m.zip > nice2.jpeg

这个图片就成了一百多兆大小

【测试工具】如何制作指定大小的文件(包含可播放的视频或图片)相关推荐

  1. Linux 磁盘管理-配额管理-配置用户对磁盘进行指定大小或者文件数量的使用权限

    一.磁盘配额 1.磁盘配额概念 配置用户对磁盘进行指定大小或者文件数量的使用权限. 1)用户配额和组配额 2)磁盘容量限制和文件个数限制 3)软限制和硬限制 4)宽限时间 如果用户的空间占用数处于软限 ...

  2. 过滤Linux下不同大小的文件,linux查找当前目录下 M/G 大小的文件,删除Linux下指定大小的文件

    过滤Linux下不同大小的文件,linux查找当前目录下 M/G 大小的文件,删除Linux下指定大小的文件 find ./ -type f -size +1G| xargs rm 在清理系统日志文件 ...

  3. php使用curl下载指定大小的文件

    php中使用基于libcurl的curl函数,可以对目标url发起http请求并获取返回的响应内容.通常的请求方式类似如下的代码: public function callFunction($url, ...

  4. linux为用户指定资源大小,Linux_Linux系统下生成一个指定大小的文件,在装系统,因此在这里随便记 - phpStudy...

    Linux系统下生成一个指定大小的文件 在装系统,因此在这里随便记点东西. 从前与经理讨论NVR项目的时候,他提到要预先将用户指定好的磁盘空间预留出来,这是比较容易实现的功能.不容易实现的是自己写一个 ...

  5. linux文件下生成一个文件,Linux系统下生成一个指定大小的文件要注意什么?

    在装系统,因此在这里随便记点东西. 从前与经理讨论NVR项目的时候,他提到要预先将用户指定好的磁盘空间预留出来,这是比较容易实现的功能.不容易实现的是自己写一个文件系统,这种方法我是不太敢照量啊,不过 ...

  6. linux删除指定大小的文件,Linux下删除空文件,删除指定大小的文件

    Linux下批量删除空文件(大小等于0的文件)的方法: find . -name "*" -type f -size 0c | xargs -n 1 rm -f 用这个还可以删除指 ...

  7. linux如何删除指定大小以下的文件夹,Linux中定时删除超过指定大小的文件夹

    背景: 开发环境总是动不动就没有空间了, 大部分都是debug日志.所以有必要在日志很疯狂的时候,删除不必要的日志. 思路:一. 书写删除日志文件脚本: 定时任务执行.  但是有时候的日志是需要保存用 ...

  8. cantata测试工具_我如何构建和维护开源音乐播放器Cantata

    cantata测试工具 这是与开发和维护开源音乐播放器的开发人员进行的一系列对话的第三部分. Craig Drummond是Cantata的开发者和维护者, Cantata是一种开源音乐播放器,充当M ...

  9. linux创建指定大小的文件

    一.生成文件大小和实际占空间大小一样的文件 dd if=/dev/zero of=name.file bs=1M count=1 文件名称name.file bs=1M表示每一次读写1M数据,coun ...

最新文章

  1. 清华「计图」、旷视「天元」纷纷重磅开源,国产深度学习框架迎来高光时刻...
  2. 容器的综合应用:文本查询程序
  3. struts-config message-resources配置问题总结
  4. Andoid 采用ListView三种显示数据列表
  5. android 如何 root权限获取,如何获取android手机root权限获取
  6. coffeescript html5,HTML5——前端预处理技术(Less、Sass、CoffeeScript)
  7. C/C++基础面试-Sizof的全面理解
  8. c语言中区别一般变量,C语言中,为了区别一般的变量,符号常量必须用
  9. ACL-IJCNLP 2021|行业首个少样本NER数据集,清华联合阿里达摩院开发
  10. wordpress建立二级导航菜单
  11. java调用zebra斑马打印条码+英文+数字+中文
  12. 微信小程序左滑删除(Slideview)
  13. 2023年最新zabbix监控Linux服务+ensp交换机
  14. 渐进式web应用程序_为什么渐进式Web应用程序很棒,以及如何构建一个
  15. 中兴程序员跳楼事件始末解读
  16. STM32F4+DP83848以太网通信指南系列(一):知识储备
  17. 【jquery】jquery-icheck radio的点击事件、change事件、获取当前选中的值
  18. ava.net.ConnectException: Connection refused: connect
  19. SQL Server中的六种约束:主键约束,外键约束,唯一约束,非空约束,检查约束,默认约束
  20. android view.setVisibility 不显示问题

热门文章

  1. java基于springboot+vue的协同过滤算法的图书推荐系统 nodejs
  2. python unpacking_Python在unpacking上的一个小陷阱
  3. 安卓Zygote详解
  4. C++中的getline()函数
  5. 爬虫(一):爬虫的基础知识 ---通用爬虫和聚焦爬虫,http和https协议,常见的响应状态码
  6. 笔记本做wifi热点
  7. Magic Leap 价值 20 多亿美元的 AR 幻梦,现在醒了
  8. 前端自学路线 更新11.11
  9. 融合DE 端和FE端数据,利用小波变换生成时频图,再分别利用DCNN、KNN和DNN进行对比实验(python代码)
  10. matlab实现nc文件批量转tif文件