视频如下所示:
看这个视频是不是很有食欲,擦擦口水,下面回归咱们本文正题啦!
1.ffmpeg一行代码实现视频转换为图片
ffmpeg的安装请参考上一篇文章《Python批量转换音乐视频格式》,或者自行百度,安装方法非常简单!
ffmpeg一行代码实现视频转换为图片,代码如下所示:
ffmpeg -i test.avi %d.jpg
ffmpeg几乎支持可以解码所有的视频和图片格式,所以可以放心使用。我们知道视频是由一帧帧图片组成,只需要把这一帧帧的图片保存即可。通常视频的帧率为25 fps(可以参考测试中信号的频率为25Hz进行理解),即每秒25张图片,则一分钟长度的视频将保存成60x25=1500张图片。为了保持生成的图片名称具有相同的长度,我们可以使用格式符(%d、%f、%e、%s等),此处使用%d输出有符号的十进制整数。
如代码为:
ffmpeg -i test.mp4 %4d.png
生成的图片名称为0001.png、0002.png、0003.png、……、1500.png
下面我们来测试这个代码,视频就用上文新鲜鸡汤的视频。
我的视频存放在桌面上,新生成的图片准备存放在桌面文件夹“一锅鸡汤”内。测试代码如下:
ffmpeg -i C:\Users\Administrator\Desktop\一锅鸡汤.mp4 C:\Users\Administrator\Desktop\一锅鸡汤\%4d.png
生成过程如下所示,只需要短短几秒即可以实现功能,代码中视频和图片格式可以随意进行更换!
2. ffmpeg一行代码实现视频转换为gif动画
由于TX对视频的限制,上传的视频必须要经过审核。对于一些时间比较短的视频我们可以将其保存为GIF文件,更方便传播。视频文件保存成GIF格式,是把每一帧保存到GIF的动画帧中,使用该命令时必须将像素格式设置为rgb24。
视频转换为gif动画代码如下:
ffmpeg -i test.avi -pix_fmt rgb24promotion.gif
假如我们有一个需求是将上面那个鸡汤视频命名为“新鲜鸡汤”保存为GIF动画,测试代码如下所示:
ffmpeg -i C:\Users\Administrator\Desktop\一锅鸡汤.mp4-pix_fmt rgb24 C:\Users\Administrator\Desktop\一锅鸡汤\新鲜鸡汤.gif
生成过程如下所示,只需要短短几秒即可以实现功能,代码中视频和图片格式可以随意进行更换!
3. ffmpeg一行代码实现图片格式转换
如果你有一个jpg格式的图片想转换成png格式等类似的格式转换需求,那么可以参考下文方法。
Ffmpeg支持除EXR、LJPEG、PIC和PTX文件类型之外的几乎所有图像类型,这极大的方便了我们处理不同格式文件的工作。
格式转换的代码如下:
ffmpeg -i image.type1 image.type2
假设我们现在有个将png转换成jpg格式的需求,即将上文中0001.png格式转换为jpg并以名称“image”保存在相同文件夹内,测试代码如下:
ffmpeg -i C:\Users\Administrator\Desktop\0001.pngC:\Users\Administrator\Desktop\一锅鸡汤\image.jpg
实现过程如下所示,新生成的image.jpg在右上方文件夹内:
此外还有一些音频、视频、图片等格式转换、裁剪编辑等相关问题,请自行了解吧,总之ffmpeg功能多多,操作也非常简单!
有了这些图片,我们后续可以做很多好玩的事情,比如针对每一帧图片进行处理,二值化、图像识别、做各种各样的炫酷视频等。
如果你想处理的工作内容比较少也比较单一,那么了解上面那么多就够了,如果你想再简单一些或者想批量处理视频、音频、图片等,那么Python会是你很好的工具。 假如我们现在有个需求:把上文1000张png格式的图片全部转换为jpg格式,这时如果我们一张张的进行转换,工作量非常大,几乎把自己坑死!!!这时如果借助Python将非常简单,喝杯咖啡的功夫,工作就自动完成了,so easy!4. ffmpeg+Python实现图片格式批量转换 针对上面的需求,实现起来非常简单,只需要15行代码! 首先获取png图片的存放路径,然后读取路径中所有的图片;再进行格式转换;最后保存到同一个文件夹即可,具体执行代码如下:
import subprocess
import os
def png2jpg(png_path, jpg_path=None):
filenames = os.listdir(png_path)
print(filenames) # 显示文件夹内所有文件名称
for i in range(len(filenames)):
if "png" == filenames[i].split(".")[-1]:
png_files = os.path.join(png_path + "\\" + filenames[i])
jpg_path = os.path.join(png_path + "\\" + filenames[i].rsplit('.',1)[0] + ".jpg")
error = subprocess.call([r"C:\ffmpeg\bin\ffmpeg","-i", png_files, jpg_path])
if error:
print("Done!%s 转换成功!" %filenames[i])
else:
print("%s 不是一个有效的png格式文件!" % filenames[i])
if __name__ == "__main__":
png_path = r"C:\Pythonwork\image2image\一锅鸡汤" # 定义wav文件所在文件夹
png2jpg(png_path)
为了能更直观的看到图片格式转换的过程,我制作了一个GIF图片。为了减小图片的尺寸,此处选择10张照片进行示意,整个转换过程大概不到1秒钟,是不是非常快呀!
过程如下所示:
附录1 ffmpeg支持的图片格式
表格中列出了ffmpeg支持的图像格式及其特征后缀。除LJPEG(无损JPEG)以外的所有这些文件类型都可以解码,除EXR,PIC和PTX之外都可以编码。
ffmpeg支持的图片格式:
扩展名 | 编码 | 解码 | 描述 |
.Y.U.V | √ | √ | 每个组件的一行文件 |
BMP | √ | √ | 微软BMP图像 |
DPX | √ | √ | 数码照片交换 |
EXR | X | √ | OpenEXR |
GIF | √ | √ | 动画gif是未压缩的 |
JPG | √ | √ | 不支持渐进式JPEG |
JP2 | √ | √ | JPEG 2000 |
JLS | √ | √ | JPEG-LS |
LJPG | X | X | 无损的JPEG |
PAM | √ | √ | PAM是带有alpha支持的PNM扩展 |
PBM | √ | √ | 便携式位图图像 |
PCX | √ | √ | PC画笔 |
PGM | √ | √ | 便携式GrayMap形象 |
PGMYUV | √ | √ | PGM与U和V的分量在YUV 4:2 0 |
PIC | X | √ | Pictor/PC Paint |
PNG | √ | √ | 便携式网络图形 |
PPM | √ | √ | 便携式PixelMap形象 |
PTX | X | √ | V.Flash PTX格式 |
SGI | √ | √ | SGI RGB图像格式 |
RAS | √ | √ | Sun Rasterfile图像格式 |
TIFF | √ | √ | YUV, JPEG和一些扩展还没有被支持 |
TGA | √ | √ | Truevision Targa 图像格式 |
XBM | √ | √ | X位图图像格式 |
XFace | √ | √ | XFace图像格式 |
XWD | √ | √ | X窗口转储图像格式 |
- python时域信号统计分析
- Python加速度信号转速度位移小程序
- Python批量转换音乐视频格式
- Python编写加速度-振幅-频率转换程序
- Python程序代码打包成exe独立可执行程序