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

需求:

  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 -= 1

file.close()

【测试工具】如何制作指定大小的文件(包含可播放的视频或图片)_第1张图片
通过上边的程序我们可以得到一个文件,file_list.txt,里边包含了指定个数的文件名
使用FFmpeg合并这些相同的视频

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

【测试工具】如何制作指定大小的文件(包含可播放的视频或图片)_第2张图片
可以发现根据粗略计算出来的,结果变大了,这是因为合并的算法导致,我们进行略调整,目测减少两个,也就是59个试一下【测试工具】如何制作指定大小的文件(包含可播放的视频或图片)_第3张图片
还是大了一点,再减少一个,使用58个进行合并
【测试工具】如何制作指定大小的文件(包含可播放的视频或图片)_第4张图片
可以发现已经小于300M了,这样我们就拿到了300M左右两个测试视频。

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

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

三、生成指定大小的图片

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

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

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

【测试工具】如何制作指定大小的文件(包含可播放的视频或图片)_第5张图片

2、准备好一张图片

【测试工具】如何制作指定大小的文件(包含可播放的视频或图片)_第6张图片

3、合并文件

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

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

Mac电脑在命令行直接执行

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

这个图片就成了一百多兆大小
【测试工具】如何制作指定大小的文件(包含可播放的视频或图片)_第7张图片

你可能感兴趣的:(学习问题记录,音视频)