目录
背景:对于素材的测试,经常需要测试不同格式的图片/视频和不同分别分辨率的图片/视频,为了测等价类边界值则需要的素材格式和分辨率非常苛刻,想要便捷的获取到自己需要的测试数据,则必须自己去创造这些数据。
1.修改图片格式
'''修改图片格式''' # 入参为fileName文件名称和newFormat新格式 def format(fileName,newFormat): im = Image.open(fileName) newName = fileName.split('.')[0]+'.'+newFormat image = im.convert('RGB') image.save(newName) # os.remove(fileName) format('a.jpg','png')
效果图如下:
运行后可将图片格式修改,这种方法不是单单修改文件后缀,而是修改格式,所以图片大小是会改变的。
2.修改图片分辨率
'''修改图片分辨率''' def resolution(fileName,size): image = Image.open(fileName) resized_image = image.resize(size,Image.ANTIALIAS) resized_image.save(fileName.split('.')[0] + '_1.' + fileName.split('.')[-1])resolution("a.png",(500,500))
效果图如下:
运行后可将图像进行拉伸或压缩,图片的像素修改了,图片大小也会改变的。
3.改变视频格式
'''改变视频格式''' # #.mp4 *.wmv *.rm *.avi *.flv *.webm *.wav *.rmvb *.mpg *.mov def format(fileName, newFormat): os.system(f'ffmpeg -i {fileName} {fileName.split(".")[0]}.{newFormat}') videoFormat.format('a.avi', 'mp4')
效果图如下:
视频改变格式后会进行重新抽帧作为前导图,所以封面可能是不一样,但是内容一样。
注:ffmpeg需要下载并加入到path路径下,下载地址如下:
https://ffmpeg.org/
下载教程和放入path路径地址如下:
https://blog.csdn.net/yinshipin007/article/details/130650738
4.改变视频分辨率
'''修改分辨率''' # 视频地址、输出目录、宽度、高度,码率 def resolution(video_name: str, output_dir: str, size:tuple, bit_rate=2000): ext = os.path.basename(video_name).strip().split('.')[-1] # if ext not in ['mp4']: # raise Exception('format error') newVideoName = os.path.join( output_dir, '{}.{}'.format( uuid.uuid1().hex, ext)) ff = FFmpeg(inputs={'{}'.format(video_name): None}, outputs={ newVideoName: '-s {}*{} -b {}k'.format(size[0],size[1], bit_rate)}) ff.run() return newVideoNamevideoFormat.resolution('a.mp4','',(500,500))
效果图如下:
5.裁剪视频
入参:文件名,裁剪长度
'''裁剪视频'''
def cropping(fileName,length,deposit=None):
result = subprocess.Popen(
['ffprobe', '-v', 'error', '-show_entries', 'format=duration', '-of', 'default=noprint_wrappers=1:nokey=1',fileName], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
output = result.stdout.read() # 输出视频的时长信息print('视频时长:', float(output))
videoTime = float(output)
if(videoTime>length):
clip = VideoFileClip(fileName).subclip(0,length)
new_file = '1.mp4'
clip.write_videofile(new_file)
else:
return
if(videoTime>2*length):
clip = VideoFileClip(fileName).subclip(length,2*length)
new_file = '2.mp4'
clip.write_videofile(new_file)
else:
return
if(videoTime>3*length):
clip = VideoFileClip(fileName).subclip(2*length,3*length)
new_file = '3.mp4'
clip.write_videofile(new_file)
else:
return
if(videoTime>4*length):
clip = VideoFileClip(fileName).subclip(3*length,4*length)
new_file = '4.mp4'
clip.write_videofile(new_file)
else:
return
if(videoTime>5*length):
clip = VideoFileClip(fileName).subclip(4*length,5*length)
new_file = '5.mp4'
clip.write_videofile(new_file)
else:
return
if(videoTime>6*length):
clip = VideoFileClip(fileName).subclip(5*length,6*length)
new_file = '6.mp4'
clip.write_videofile(new_file)
else:
return
if(videoTime>7*length):
clip = VideoFileClip(fileName).subclip(6*length,7*length)
new_file = '7.mp4'
clip.write_videofile(new_file)
else:
return
if(videoTime>8*length):
clip = VideoFileClip(fileName).subclip(7*length,8*length)
new_file = '8.mp4'
clip.write_videofile(new_file)
else:
return
if(videoTime>9*length):
clip = VideoFileClip(fileName).subclip(8*length,9*length)
new_file = '9.mp4'
clip.write_videofile(new_file)
else:
return
if(videoTime>10*length):
clip = VideoFileClip(fileName).subclip(9*length,10*length)
new_file = '10.mp4'
clip.write_videofile(new_file)
else:
return
cropping('a.mp4',12)
效果图如下
把原始图片裁剪为每个12s的视频,且最多裁剪10个视频。可根据自己需要进行简单修改代码。
视频的长度虽然是一样的,但是大小还是有些差异的。
6.文件夹文件的批量操作
上面这些操作如果想大量操作,数据源可以从文件夹中获取,如:
for root, dirs, files in os.walk(file_in): for file in files: print(file) #对文件的操作
《修改图片\视频的分辨率和格式》篇结束,欢迎去我的主页查看其它技术类文章~