【FFmpeg系列】:图片处理

引言

FFmpeg 是一个功能强大的多媒体处理工具,广泛应用于音视频处理领域。然而,它的图片处理能力同样不容忽视。本文将深入探讨 FFmpeg 在图片处理方面的高级技巧和优化方法,帮助您更高效地完成图片处理任务。

一、图片格式转换

1.1 基础转换

1.1.1 JPG 转 PNG

ffmpeg -i input.jpg output.png

1.1.2 PNG 转 JPG 

ffmpeg -i input.png output.jpg

1.1.3 BMP 转 WEBP 

ffmpeg -i input.bmp output.webp

1.2 批量转换

1.2.1 批量转换 JPG 到 PNG

# 创建一个 Bash 脚本
#!/bin/bash
for file in *.jpg; do
    ffmpeg -i "$file" "${file%.jpg}.png"
done

1.2.2 批量转换 PNG 到 JPG 

# 创建一个 Bash 脚本
#!/bin/bash
for file in *.png; do
    ffmpeg -i "$file" "${file%.png}.jpg"
done

二、调整图片质量

2.1 基础转换

2.1.1 设置 JPG 质量

ffmpeg -i input.png -q:v 2 output.jpg
  •  -q:v 参数用于设置 质量等级,范围是 1(最差)到 31(最好)。  

2.1.2 设置 PNG 压缩级别

ffmpeg -i input.jpg -compression_level 9 output.png
  • -compression_level 参数用于设置 PNG 压缩级别,范围是 0(最快)到 9(最慢),默认值是 6。 

三、图片合成和修改

3.1 添加水印

3.1.1 文字水印

ffmpeg -i input.jpg -vf "drawtext=fontfile=font.ttf: text='Watermark': x=50: y=50: fontcolor=white: fontsize=24" output.jpg
  • fontfile=font.ttf: 指定字体文件的位置,font.ttf 是字体文件的名字,需要确保 ffmpeg 能够访问到这个文件。
  • text='Watermark': 设置要在图片上显示的文本内容,这里是 “Watermark”。
  • x=50: y=50: 设置文本在图片上的位置,x 和 y 分别表示从图片左上角开始的水平和垂直偏移量,单位是像素。
  • fontcolor=white: 设置文本的颜色,这里是白色。
  • fontsize=24: 设置文本的字体大小,这里是 24 像素。

3.1.2 图片水印

ffmpeg -i input.jpg -i watermark.png -filter_complex "overlay=W-w-10:H-h-10" output.jpg
  • overlay:叠加滤镜
  • W-w-10 和 H-h-10:水印位置,分别表示距离右侧和底部 10 像素

3.2 裁剪和缩放

3.2.1 裁剪图片

ffmpeg -i input.jpg -vf "crop=640:320:0:0" output.jpg
  • crop:裁剪滤镜
  • 640:320:0:0:裁剪区域的宽度、高度、左上角 x 坐标和 y 坐标 

3.2.2 缩放图片

ffmpeg -i input.jpg -vf "scale=640:320" output.jpg
  • scale:缩放滤镜
  • 64:320:目标宽度和高度 

3.3.3 缩放缩放

ffmpeg -i input.jpg -vf "scale=192:-1" output.jpg
ffmpeg -i input.jpg -vf "scale=-1:108" output.jpg
ffmpeg -i input.jpg -vf "scale=-192:108" output.jpg
  • scale=192:-1:固定宽度为 192 像素,高度自动计算以保持宽高比。
  • scale=-1:108:固定高度为 108 像素,宽度自动计算以保持宽高比。
  • scale=-192:108:固定宽度为 192 像素,高度为 108 像素(负值会被视为正值)。

3.3.4 旋转图片

ffmpeg -i input.jpg -vf "transpose=1" output.jpg
  • transpose=0:垂直翻转
  • transpose=1:顺时针旋转 90 度
  • transpose=2:逆时针旋转 90 度
  • transpose=3:水平翻转 

3.3 合并多张图片

3.3.1 水平拼接

ffmpeg -i 001.jpg -i 002.jpg -filter_complex hstack output.jpg
  • -filter_complex hstack:将两张图片水平堆叠在一起。 

3.3.2 垂直拼接

ffmpeg -i 001.jpg -i 002.jpg -filter_complex vstack output.jpg
  • -filter_complex vstack:将两张图片水平堆叠在一起。 

3.3.3 N张图片水平拼接

ffmpeg -i 001.jpg -i 002.jpg -i 003.jpg -filter_complex "[0:v][1:v][2:v]hstack=inputs=3" output.jpg
  •  -filter_complex "[0:v][1:v][2:v]hstack=inputs=3":将三张图片水平堆叠在一起。
    • [0:v]:指代第一个输入文件的视频流(即 001.jpg)。
    • [1:v]:指代第二个输入文件的视频流(即 002.jpg)。
    • [2:v]:指代第三个输入文件的视频流(即 003.jpg)。
    • hstack=inputs=3:水平堆叠滤镜,将三个图像并排显示。
    • inputs=3:指定输入的数量为 3。

3.3.4 N张图片垂直拼接

ffmpeg -i 001.jpg -i 002.jpg -i 003.jpg -filter_complex "[0:v][1:v][2:v]vstack=inputs=3" output.jpg
  •  -filter_complex "[0:v][1:v][2:v]hstack=inputs=3":将三张图片垂直堆叠在一起。
    • [0:v]:指代第一个输入文件的视频流(即 001.jpg)。
    • [1:v]:指代第二个输入文件的视频流(即 002.jpg)。
    • [2:v]:指代第三个输入文件的视频流(即 003.jpg)。
    • hstack=inputs=3:垂直堆叠滤镜,将三个图像并排显示。
    • inputs=3:指定输入的数量为 3。

总结

通过本文,我们详细介绍了如何使用 FFmpeg 进行图片格式转换、编辑、合成。FFmpeg 的强大功能和灵活性使其成为处理多媒体数据的理想工具。希望这些知识能帮助你在图片处理方面更加得心应手。如果你有任何疑问或想要了解更多进阶技巧,欢迎留言交流!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/890515.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【JavaSE基础】Java 变量

为什么需要变量 变量是程序的基本组成单位 class Test{public static void main(String[] args){int a 1; //定义一个变量,类型为int,变量名为a,并赋值为1int b 3; //定义另一个变量,类型为int,变量名为b&#xff0…

2-120 基于matlab的滑动平均滤波下通过幅度谱最大值方法估计太阳黑子的周期

基于matlab的滑动平均滤波下通过幅度谱最大值方法估计太阳黑子的周期。具体步骤为:1)在Matlab 环境下读取太阳黑子数目序列,并绘制其时域波形; 2)采用离散时间卷积计算方法对太阳黑子数据序列进行滑动平均滤波&#xf…

vue后台管理系统从0到1搭建(4)各组件的搭建

文章目录 vue后台管理系统从0到1搭建(4)各组件的搭建Main.vue 组件的初构 vue后台管理系统从0到1搭建(4)各组件的搭建 Main.vue 组件的初构 根据我们的效果来看,分析一下,我们把左边的区域分为一个组件&am…

前端的全栈之路:基于 Vue3 + Nest.js 全栈开发的后台应用

☘️ 项目简介 Vue3 Admin 是一个前端基于 Soybean Admin 二次开发,后端基于 Nest.js 的全栈后台应用,适合学习全栈开发的同学参考学习。 🍁 前端技术栈: Vue3.5、Ant Design Vue、UnoCSS、Pinia 🍁 后端技术栈&…

【浏览器】如何正确使用Microsoft Edge

1、清理主页广告 如今的Microsoft Edge 浏览器 主页太乱了,各种广告推送,点右上角⚙️设置,把快速链接、网站导航、信息提要、背景等全部关闭。这样你就能得到一个超级清爽的主页。 网站导航       关闭 …

线程基础学习

线程的实现 通过实现Runnable接口的方式,实现其中的run方法。继承Thread类,然后重写其中的run方法。通过线程池创建线程,默认采用DefaultThreadFactory。有返回值的callable,实现callable接口,实行call方法。 本质上…

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-13

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-13 目录 文章目录 计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-13目录1. The Cognitive Capabilities of Generative AI: A Comparative Analysis with Human Benchmarks2. WALL-E: World Alig…

动态规划的优化与高级应用

姊妹篇: 动态规划基础与经典问题-CSDN博客 贪心算法:原理、应用与优化_最优解-CSDN博客​​​​​​贪心算法:原理、应用与优化_最优解-CSDN博客 一、动态规划的优化策 动态规划在提高时间效率的同时,往往会占用较多的空间。因…

Unity3d折叠Inspector中的变量

InspectorFoldoutGroup插件 [Pixeye.Unity.Foldout("【曲线图】")] public BrokenLineUpDownGraph aimStabilityGraph;[Pixeye.Unity.Foldout("【曲线图】")] public BrokenLineUpGraph aimDensityGraph;[Pixeye.Unity.Foldout("【曲线图】")] p…

Xilinx远程固件升级(二)——STARTUPE2原语的使用

通过(一)可以看出,对于远程固件升级实际上是通过调用flash不同区域的bit实现,通过golden image和update image共同保障了系统的稳定性。在项目中如果将flash的时钟直接绑定FPGA后进行约束,在综合编译时是无法通过的。这…

优先算法1--双指针

“一念既出,万山无阻。”加油陌生人! 目录 1.双指针--移动零 2.双指针-复写零 ok,首先在学习之前,为了方便大家后面的学习,我们这里需要补充一个知识点,我这里所谓的指针,不是之前学习的带有…

【原创】Android Studio 中安装大模型辅助编码插件:通义灵码

在 Android Studio 中内置了 Ginimi 预览版,但需要“加速器”才可使用。 在国内有平替的软件同样可以使用,比如 阿里的通义灵码,智谱的CodeGeeX等,从功能和使用上来说都是大同小异。 这里我们以通义灵码为例来讲解其安装和使用 通…

《机器学习与数据挖掘综合实践》实训课程教学解决方案

一、引言 随着信息技术的飞速发展,人工智能已成为推动社会进步的重要力量。作为人工智能的核心技术之一,机器学习与数据挖掘在各行各业的应用日益广泛。本方案旨在通过系统的理论教学、丰富的实践案例和先进的实训平台,帮助学生掌握机器学习…

selenium-Alert类用于操作提示框/确认弹框(4)

之前文章我们提到,在webdriver.WebDriver类有一个switch_to方法,通过switch_to.alert()可以返回Alert对象,而Alert对象主要用于网页中弹出的提示框/确认框/文本输入框的确认或者取消等动作。 Alert介绍 当在页面定位到提示框/确认框/文本录入…

Vulnhub靶场案例渗透[7]- DC7

文章目录 1. 靶场搭建2. 信息收集2.1 确定靶机ip2.2 服务信息收集2.3 社工信息收集 3. 提权 1. 靶场搭建 靶场源地址 检验下载文件的检验码&#xff0c;对比没问题使用vmware打开 # windwos 命令 Get-FileHash <filePath> -Algorithm MD5 # linux md5sum filepath2. 信…

计算机网络(以Linux讲解)

计算机网络 网络协议初识协议分层OSI七层模型TCP/IP五层模型--初识 网络中的地址管理IP地址MAC地址 网络传输基本流程网络编程套接字预备知识网络字节序socket编程UDP socketTCP socket地址转换函数Jsoncpp 进程间关系与守护进程进程组会话控制终端作业控制守护进程 网络命令TC…

线性代数 行列式

一、行列式 1、定义 一个数学概念&#xff0c;主要用于 线性代数中&#xff0c;它是一个可以从方阵&#xff08;即行数和列数相等的矩阵&#xff09;形成的一个标量&#xff08;即一个单一的数值&#xff09; 2、二阶行列式 &#xff0c;像这样将一个式子收缩称为一个 2*2 的…

Node.js入门——fs、path模块、URL端口号、模块化导入导出、包、npm软件包管理器

Node.js入门 1.介绍 定义&#xff1a;跨平台的JS运行环境&#xff0c;使开发者可以搭建服务器端的JS应用程序作用&#xff1a;使用Node.Js编写服务器端代码Node.js是基于Chrome V8引擎进行封装&#xff0c;Node中没有BOM和DOM 2.fs模块-读写文件 定义&#xff1a;封装了与…

Python异常处理详解:try, except, else, finally的使用方法与示例

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐&#xff1a;「storm…

【Iceberg分析】Spark集成Iceberg采集输出

Spark集成Iceberg采集输出 文章目录 Spark集成Iceberg采集输出Iceberg提供了两类指标和提供了两类指标输出器ScanReportCommitReport LoggingMetricsReporterRESTMetricsReporter验证示例相关环境配置结果说明 Iceberg提供了两类指标和提供了两类指标输出器 ScanReport 包含在…