编写批处理文件,调用ffmpeg抽帧

简介: 编写批处理文件,调用ffmpeg抽帧

有需求如下:

一个文件目录下有多个视频,需要对每个视频进行抽帧,并保存到图片文件夹内;

需求分析:

对视频抽帧可以使用ffmpeg,遍历文件目录可以使用批处理;

功能实现:

编写批处理文件,遍历文件夹下所有视频文件,然后对每个视频调用ffmpeg抽帧;

  1. 遍历文件夹下所有mp4文件:使用for循环
set src_dir=J:\Download\post
for %%a in (%src_dir%\*.mp4) do (
 echo %%a
)
  1. 创建存放抽帧图片的文件夹
setlocal enableextensions enabledelayedexpansion
SET /A COUNT=1
 for .... do (
   SET /A COUNT+=1
   mkdir %src_dir%\!COUNT! 
)
endlocal

setlocal enabledelayedexpansion 是什么意思?

设置本地为延迟扩展。其实也就是:延迟变量,全称"延迟环境变量扩展",
在cmd执行命令前会对脚本进行预处理,其中有一个过程是变量识别过程,在这个过程中,如果有两个%括起来的如%value%类似这样的变量,就会对其进行识别,并且查找这个变量对应的值,再而将值替换掉这个变量,这个替换值的过程,就叫做变量扩展,然后再执行命令。
  1. 调用ffmpeg抽帧
ffmpeg -i "%%a" -r 5 -vf scale=-1:960 "%src_dir%/png/!COUNT!/img_%%03d.png"

完整代码如下

chcp 65001
setlocal enableextensions enabledelayedexpansion
@echo off
echo start....
set src_dir=J:\Download\post
echo %src_dir%
SET /A COUNT=1

for %%a in (%src_dir%\*.mp4) do (
    SET /A COUNT+=1
    echo %%a
    echo !COUNT!
    rem mkdir %src_dir%\!COUNT! 创建文件夹
    echo '开始抽帧' 
    rem echo 
    ffmpeg -i "%%a" -r 5 -vf scale=-1:960 "%src_dir%/png/!COUNT!/img_%%03d.png"
    pause
)
endlocal
pause

为了解决输出乱码,需要添加如下代码:

chcp 65001

而@echo off则表示

执行了这条命令后关闭所有命令(包括本身这条命令)的回显。而echo off命令则表示关闭其他所有命令(不包括本身这条命令)的回显,@的作用就是关闭紧跟其后的一条命令的回显;

抽帧处理的图片:
在这里插入图片描述
发现一个问题:

原视频大小时500k,而抽帧出来后,每个图片大概有1M左右,感觉图片太大了;

尝试压缩一下图片

图片压缩

  • 使用ffmpeg命令
ffmpeg -i src.png -q 5 dest.png

发现压缩效果一般,只减少了几十k;

  • 使用tinypng

tinypng官网地址:访问
在这里插入图片描述

在官网地址可以测试图片压缩;发现压缩了80%;

官网上也提供了api,只需要申请一下key就可以调用;

每个apiKey,每月可以免费调用500个图片

在这里插入图片描述

使用python调用,首先安装tinify

pip install --upgrade tinify

编码实现:

import tinify
tinify.key = "YOUR_API_KEY"
source = tinify.from_file("src.png")
source.to_file("optimized.png")```

由于使用tinypng有次数限制,所以又尝试使用ffmpeg,通过搜索,找到如下方式,经测试可以实现压缩70%;

ffmpeg -i in.png -vf palettegen=max_colors=256:stats_mode=single -y tmp.png
ffmpeg -i in.png -i tmp.png -lavfi "[0][1:v] paletteuse" -pix_fmt pal8 -y out.png
ffmpeg -i in.png -vf palettegen=max_colors=256:stats_mode=single -y tmp.png
这里的输出结果是一个调色板 并不是完整图像 由于这是单张静图所以mode使用的是single
ffmpeg -i in.png -i tmp.png -lavfi "0 paletteuse" -pix_fmt pal8 -y out.png
再用优化过的调色板去转换 得到结果
相关文章
|
5月前
|
前端开发 算法 API
构建高性能图像处理Web应用:Next.js与TailwindCSS实践
本文分享了构建在线图像黑白转换工具的技术实践,涵盖技术栈选择、架构设计与性能优化。项目采用Next.js提供优秀的SSR性能和SEO支持,TailwindCSS加速UI开发,WebAssembly实现高性能图像处理算法。通过渐进式处理、WebWorker隔离及内存管理等策略,解决大图像处理性能瓶颈,并确保跨浏览器兼容性和移动设备优化。实际应用案例展示了其即时处理、高质量输出和客户端隐私保护等特点。未来计划引入WebGPU加速、AI增强等功能,进一步提升用户体验。此技术栈为Web图像处理应用提供了高效可行的解决方案。
|
8月前
|
计算机视觉
YOLOv11改进策略【SPPF】| AIFI : 基于Transformer的尺度内特征交互,在降低计算成本的同时提高模型的性能
YOLOv11改进策略【SPPF】| AIFI : 基于Transformer的尺度内特征交互,在降低计算成本的同时提高模型的性能
309 9
YOLOv11改进策略【SPPF】| AIFI : 基于Transformer的尺度内特征交互,在降低计算成本的同时提高模型的性能
|
8月前
|
前端开发 数据安全/隐私保护 开发者
Pic Smaller:开源神器,碾压TinyPNG!90%开发者不知道的免费图像压缩利器
嗨,大家好,我是小华同学。今天介绍一个强大的开源图像压缩工具——Pic Smaller(图小小)。它支持JPEG、PNG、WEBP等多种格式的智能压缩,具备本地压缩、自定义配置等特性,确保图像数据安全。用户只需上传图片,Pic Smaller便会自动执行压缩并提供详细信息。项目已部署在Vercel平台,Pic Smaller基于Vite和React构建,适合开发者、设计师及普通用户,帮助高效管理图像。
463 9
|
12月前
|
前端开发
PDF文件上传转成base64编码并支持预览
PDF文件上传转成base64编码并支持预览
600 12
|
6月前
|
人工智能
如何筛选高流量的AI模型?
我会定期查看huggingface.co/spaces和replicate.com排行榜,关注优质博主以了解最新实用模型。例如,根据排行榜趋势,我用两天时间创建了[grokghibli](https://grokghibli.pro/)。不过,自定义驱动视频失败率较高,模型还需优化。如有产品改进建议,请随时告诉我!期待与大家交流探讨。
|
前端开发
react 调用摄像头
react 调用摄像头
233 0
|
Java 程序员 API
【深入探究 Qt 线程】一文详细解析Qt线程的内部原理与实现策略
【深入探究 Qt 线程】一文详细解析Qt线程的内部原理与实现策略
972 0
|
机器学习/深度学习 计算机视觉
YOLOv5改进 | 检测头篇 | DynamicHead支持检测和分割(不同于网上版本,全网首发)
YOLOv5改进 | 检测头篇 | DynamicHead支持检测和分割(不同于网上版本,全网首发)
789 0
|
前端开发 JavaScript UED
深度解析Qt背景设计:从基础到高级,从Widget到Quick(三)
深度解析Qt背景设计:从基础到高级,从Widget到Quick
479 0
|
安全 开发工具 数据安全/隐私保护
MacOS安装FFmpeg
MacOS安装FFmpeg
10090 57