Linux下使用convert对图片缩放和使用ffmpeg对视频进行转换

FFmpeg与ImageMagick:免费开源的多格式本地转换工具实战指南 格式转换是数据处理中的基础技术,其核心原理是通过编解码器将文件从一种编码格式解析为中间数据,再重新编码为目标格式。FFmpeg作为多媒体处理的事实标准,支持视频、音频的编解码与转换,而ImageMagick则专注于图片格式处理。这些开源工具的价值在于提供免费、可本地部署的解决方案,避免了在线服务的隐私风险和文件限制。在实际应用中,FFmpeg可用于视频转码、音频提取,ImageMagick适用于图片批量转换与PDF处理,结合脚本自动化能显著提升办公和开发效率。本文以FFmpeg和ImageMagick为例, 阅读详情

鉴于工作需要,研究了一下Linux的convert命令和ffmpeg命令

一、使用convert命令实现图片缩放

工作需求:在用户上传图片和视频时进行异步处理,如果上传的是图片,生成一张中等比例的图片和一张小的缩略图。最终的结果,存储一张原图,一张中等比例的图片,一张缩略图。如果上传的是视频,需要将视频格式统一转化为mp4格式。

上传图片和视频使用的是百度的在线编辑器ueditor。对其上传类Uploader.class.php进行修改,具体操作如下

/**
* 上传文件的主处理方法
* @return mixed
*/
private function upFile() {
	$file = $this->file = $_FILES[$this->fileField];
	if (!$file) {
	    $this->stateInfo = $this->getStateInfo("ERROR_FILE_NOT_FOUND");
	    return;
	}
	if ($this->file['error']) {
		#error_log(json_encode($file), 3, "./logs/error.log");
		#error_log(json_encode($this->file), 3, "./logs/error.log");
	    $this->stateInfo = $this->getStateInfo($file['error']);
	    return;
	} else if (!file_exists($file['tmp_name'])) {
	    $this->stateInfo = $this->getStateInfo("ERROR_TMP_FILE_NOT_FOUND");
	    return;
	} else if (!is_uploaded_file($file['tmp_name'])) {
	    $this->stateInfo = $this->getStateInfo("ERROR_TMPFILE");
	    return;
	}

	$this->oriName = $file['name'];
	$this->fileSize = $file['size'];
	$this->fileType = $this->getFileExt();
	$this->fullName = $this->getFullName();
	$this->filePath = $this->getFilePath();
	$this->fileName = $this->getFileName();
	$dirname = dirname($this->filePath);

	//检查文件大小是否超出限制
	if (!$this->checkSize("upFile")) {
	    $this->stateInfo = $this->getStateInfo("ERROR_SIZE_EXCEED");
	    return;
	}

	//检查是否不允许的文件格式
	if (!$this->checkType()) {
	    $this->stateInfo = $this->getStateInfo("ERROR_TYPE_NOT_ALLOWED");
	    return;
	}

	//创建目录失败
	if (!file_exists($dirname) && !mkdir($dirname, 0777, true)) {
	    $this->stateInfo = $this->getStateInfo("ERROR_CREATE_DIR");
	    return;
	} else if (!is_writeable($dirname)) {
	    $this->stateInfo = $this->getStateInfo("ERROR_DIR_NOT_WRITEABLE");
	    return;
	}

	//移动文件
	//if (!(move_uploaded_file($file["tmp_name"], $this->filePath) && file_exists($this->filePath))) { //移动失败
	$tmp_content = file_get_contents($file["tmp_name"]);
	$newfile = $this->_compress($tmp_content);
	if (!(file_put_contents($this->filePath, $newfile) && file_exists($this->filePath))) { //移动失败
	    $this->stateInfo = $this->getStateInfo("ERROR_FILE_MOVE");
	} else { //移动成功
	    //异步处理上传图片文件
	    if(in_array($this->fileType,array('.png','.jpg','.jpeg','.bmp'))){
		$getSize=getimagesize($this->filePath);
		$middleSize=$getSize[1] * (750 / $getSize[0]);
		$smallSize=$getSize[1] * (360 / $getSize[0]);
		$srcName=basename($this->fullName);
		$cmd = "sh ../shell/deal.sh $srcName $middleSize $smallSize >>logs/syn_upload.log  &";
		exec($cmd);
	    }//异步转换视频为mp4格式
            if(in_array($this->fileType,array('.mp4','.mov','.avi'))){
                $srcName=basename($this->fullName);
                $cmd = "sh ../shell/deal_video.sh $srcName >>logs/syn_upload_video.log  &";
                exec($cmd);
            }
	    $this->stateInfo = $this->stateMap['SUCCESS'];
	}
}
//deal.sh(处理图片的shell脚本)
#!/bin/bash
DATE=$(date +%Y%m%d);
newext='jpg';
for file in ../images/${DATE}/$1; do
 echo ${file};
 #name=$(ls $file | cut -d. -f1);
 ext=${file##*.};
 name=$(basename ${file} .${ext});
 #echo $name;exit;
 if [ $ext = 'png' ];then
    ext=${newext};
 fi
 to_middle_file="../images/$DATE/${name}_m.${ext}";
 to_small_file="../images/$DATE/${name}_s.${ext}";
 convert -resize 750x$2! -quality 80 ${file} ${to_middle_file};
 ls ${to_middle_file};
 convert -resize 360x$3! ${file} ${to_small_file};
 ls ${to_small_file};
done
//deal_video.sh(处理视频的shell脚本)
#!/bin/bash
DATE=$(date +%Y%m%d);
newext='mp4';
for file in ../video/${DATE}/$1; do
 #echo ${file};
 #name=$(ls $file | cut -d. -f1);
 ext=${file##*.};
 name=$(basename ${file} .${ext});
 #echo $name;
 if [ $ext != 'mp4' ];then
    ext=${newext};
    to_new_file="../video/$DATE/${name}.${ext}";
    #echo $to_new_file;exit;
    ffmpeg -i ${file} -vcodec copy -acodec copy ${to_new_file};
    ls ${to_new_file};
 fi
done
Windows平台开源格式转换工具实战:FFmpeg、ImageMagick与Pandoc应用指南 格式转换是数据处理与系统交互中的基础技术环节,其核心原理在于改变信息的编码方式或封装结构,以适应不同的软硬件环境。从技术实现层面看,这涉及字符编码、行尾序列、多媒体容器、文档结构等多个维度的标准化处理。其技术价值在于消除系统间数据交换的壁垒,保障信息的完整性与可读性,是自动化工作流与跨平台协作的基石。典型的应用场景包括:开发中统一项目文件的字符编码(如UTF-8)与行尾符(LF),以保障代码在不同操作系统(Windows/Linux/macOS)下的正确执行;办公自动化中批量转换文档、图片与音视频格式,以适 阅读详情

相关推荐

手把手调试Altera FPGA远程升级:从ASMI扇区擦除到Remote Update IP配置的避坑实录

本文详细解析了Altera FPGA远程升级的全流程,重点介绍了Cyclone IV系列FPGA的ASMI扇区擦除和Remote Update IP配置的实战技巧。通过双镜像架构设计、ASMI IP核优化配置及Remote Update IP的隐藏参数设置,帮助开发者避免常见陷阱,提升远程升级的可靠性和效率。

weixin_30872499的博客 447

基于FFmpeg与ImageMagick的本地自动化格式转换方案

格式转换是数据处理与多媒体处理中的基础需求,涉及音频、视频、图片及文档等多种文件类型的互操作。其核心原理在于通过编解码器对文件进行解析、转码与重新封装,以实现跨平台、跨应用的兼容性。在技术价值上,本地化处理方案能有效规避在线工具的文件大小限制、隐私泄露风险与网络依赖问题,为开发者与内容创作者提供安全可控、高效批量的处理能力。典型的应用场景包括音视频素材预处理、文档自动化归档、网页图片优化以及CI/CD流水线集成。本文聚焦于利用FFmpeg进行音频转码、ImageMagick实现图片处理,并结合Python脚

weixin_34050519的博客 443

Cursor生成JAVA相关的关键词提示规则

你是 Java 编程、Spring Boot、Spring Framework、Maven、JUnit 及相关 Java 技术的专家。在项目根目录创建一个.curstorrules文件(注意有个小数点),之后在该文件内填入下面内容。始终遵循 SOLID 原则,保持高内聚低耦合的 Spring Boot 应用设计。Java 和 Spring Boot 使用规范。Spring Boot 具体规范。

kitonGao的博客 2115

Linux环境,使用convert命令批量转换JPG图片——缩小图片尺寸

Linux环境,使用convert命令批量转换JPG图片——缩小图片尺寸 简介 今天批量转换图片尺寸,使用了一下 ImageMagick 图片处理软件包中的一个命令 convert ,以及sh脚本。 使用软件 图片处理软件包 ImageMagick 的安装过程就略过了。 sh脚本 下面是具体的sh脚本,很简单,就是一个for循环而已。 #! /bin/bash # 在需要转换图片的目录下运行此脚...

weixin_44732817的博客 2530

【YOLO 系列】基于YOLO V8的智能车载交通标志识别系统【python源码+Pyqt5界面+数据集+训练代码】

本文详细介绍了基于YOLO V8构建智能车载交通标志识别系统的完整流程。从环境搭建、数据集准备、模型训练到PyQt5图形界面开发,提供了Python源码和实战代码,帮助开发者快速实现高精度、实时的交通标志检测应用,提升驾驶辅助系统的开发效率。

wdx012345的博客 966

扣子(coze)实战 | 一键生成爆款书单视频

摘要:本文介绍了一个基于DeepSeek和Coze平台实现短视频高效生成的工作流方案。该方案耗时仅1-2分钟即可完成"假如书籍会说话"类短视频制作,包含书籍内容深度解读、对话台词生成、自动配音、素材合成等环节,支持通过剪映进行二次编辑。作者分享了完整开发思路和8个工作模块,并开放了包含该工具在内的100+智能体共享空间,提供会员专属服务。该方案为非真人出镜短视频的批量化生产提供了可行方案。

yueyehuguang的博客 2394

linux中改变修改图片大小:使用convert命令

非常详细,请见:https://blog.youkuaiyun.com/mybelief321/article/details/9969949?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-

六十英里的专栏 1356

vue3 - vite报错TypeError: crypto.hash is not a function(vue3+vite启动运行提示错误,项目无法启动且打包报错失败,详细解决排查方案教程)

vue3 vite 报错,vue3+vite启动报错:TypeError: crypto.hash is not a function,创建vue3+vite项目时报错TypeError: crypto.hash is not a function,如何解决这个问题,VUE3+VITE报错crypto.hash,vue3运行报错,vite运行报错,vue3打包报错,vite打包报错,vue3新建项目无法运行,vue3 vite创建项目直接报错了,node版本不兼容,修改了node版本还是不行,依旧报错,一直

✅ 精选推荐文章 1万+

在 Linux 中使用 “Converter” GUI 工具转换和操作图像

Converter 在 ​​Flathub​​ 上以 Flatpak 的形式提供,可以安装在你选择的任何 Linux 发行版上。因此,你可能需要参考我们的 ​​Flatpak 指南​​ 来安装它。你还可以 ​​调整 Nautilus​​​ 以获得 ​​右键单击上下文菜单中的调整大小选项​​。如果你的系统上还没有安装,你可以随时参考我们的 ​​安装指南​​。你还可以调整图像的质量、大小和背景颜色。你可以随时在你的系统上 安装 ImageMagick 来转换图像,但并不是每个人都喜欢使用终端来转换和操作图像。

Free雅轩的博客 448

告别 DIFY 构建卡顿 / 失败!巧用 Makefile 一键构建本地 WEB 镜像,附核心避坑指南

本文详细介绍了DIFY本地源码构建WEB镜像的完整流程,重点解决因官方npm源不稳定导致的构建失败问题。通过修改web/Dockerfile文件启用国内npmmirror镜像源,可大幅提升依赖下载速度和稳定性。在DIFY根目录执行封装好的make build-web命令即可一键完成构建,无需手动编写复杂docker命令。文章还提供了前置环境准备、构建结果验证等实用指导,帮助开发者高效完成DIFY前端二次开发后的镜像构建验证。

2501_93651177的博客 182

【Unity大规模RTS/攻城战框架】Large Scale Combat System - RTS Sieges深度解析

本文介绍了Unity专业级大规模RTS战斗框架Large Scale Combat System(LSCS)。该系统通过Job System+Burst技术解决了万人级单位的性能问题,提供完整的RTS操作体系、动态阵型系统、战术AI和攻城战功能。其亮点包括可破坏城门、行走城墙、战术AI配置系统,支持URP渲染管线,适用于Total War风格的大规模兵团对战项目。LSCS不仅提供核心战斗系统,还包含UI、小地图等配套模块,是Unity中少有的专业级RTS解决方案,特别适合需要深度战术玩法和大规模战斗的开发者

2403_88403568的博客 1333

ffmpeg平滑缩放图片视频、且强制更改分辨率

ffmpeg -framerate 25 -loop 1 -i 1.jpg -filter_complex "[0:v]scale=8000x4000,zoompan=z='min(zoom+0.0015,1.5)':x='iw/2-(iw/zoom/2)':y='ih/2-(ih/zoom/2)':d=125:s=800x800,trim=duration=5[v1];[v1]scale=-2:480[v]" -map "[v]" -y 放大滑动.mp4 代码: ffmpeg -framera...

异想实验室|Arduion|ESP8266|Micro Python| 2027

搬运机器人系列编程:KUKA KR QUANTEC_(2).KUKA KRL语言编程基础

定义一个函数END!调用函数PRINT "结果: ", result!定义一个过程PRINT msgEND!调用过程printMessage("欢迎使用 KUKA 机器人")!定义搬运零件的起始位置和目标位置!定义焊接路径的各个点!定义喷涂路径的各个点KUKA Robot Language (KRL) 是一种专门为工业机器人设计的编程语言,具有结构化编程、丰富的库函数、实时性以及集成性等特点。

zhubeibei168的博客 1246

linux convert 命令

convert 命令能对常用的图片格式进行转换,如果该命令无法使用需要通过安装ImageMagick $sudo apt install imagemagick #debian unbuntu可以通过该命令进行安装 在使用convert 对PDF格式图片到png格式图片转换时可能会存在以下错误 convert-im6.q16: attempt to perform an operation not allowed by the security policy `PDF' @ error/constitut

qq_38116603的博客 1371

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

FFmpeg批量图片处理:高效自动化缩放、格式转换与优化实践

在数字内容管理与工程实践中,批量图片处理是提升工作效率的关键技术。其核心原理在于通过命令行工具实现自动化操作,替代传统手动或图形界面软件的重复劳动。从技术价值看,自动化批量处理不仅大幅减少人力成本,还能确保输出结果的一致性,避免人为操作失误。这一技术广泛应用于网站图片优化、电商商品图处理、移动应用资源生成等场景,尤其适合需要统一调整图片尺寸、转换格式或压缩体积的任务。借助FFmpeg这一多媒体处理领域的瑞士军刀,开发者可以通过简单的命令实现高效的批量图片处理,例如使用scale滤镜进行智能缩放,结合glob

weixin_34075268的博客 388

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

FFmpeg 实现 MP4 转 GIF:高质量批量转换与参数调优指南

视频格式转换是多媒体处理中的基础操作,其核心原理在于解码、编码与数据压缩。GIF 作为一种广泛用于网络分享的动画格式,因其有限的 256 色调色板和无损压缩特性,在转换时面临颜色失真与文件体积过大的挑战。FFmpeg 作为开源的音视频处理库,通过其强大的滤镜系统,特别是 `palettegen` 和 `paletteuse` 滤镜,能够为特定视频生成优化调色板,从而在控制文件大小的同时显著提升输出画质。这一技术价值在于为开发者提供了本地化、可定制且免费的解决方案,有效规避了在线工具的文件限制与隐私风险。其应

weixin_34279246的博客 418

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

linux怎么生成图形,如何在Ubuntu 16.04中创建GIF动态图片

大家经常在新浪微薄、QQ、facebook、twitter 中看到有趣的 GIF 动图吧,GIF 文件比视频小、比静态 JPG图片形像生动,非常适于互联网上的搞笑帖子、产品展示和功能步骤演示,所以此小教程将教大家如何在 Ubuntu 16.04 LTS 桌面系统中制作、转换GIF 效果图片。其实并不难,只需一台安装 FFmpeg 的 Ubuntu 16.04 桌面端,再安装上 ImageMag...

weixin_29608135的博客 298

FFmpeg 入门指南:Windows 安装、核心命令与音视频处理实战

音视频处理是现代软件开发中的常见需求,其核心在于对多媒体数据的编码、解码与封装。FFmpeg 作为一套开源的音视频处理解决方案,通过其强大的命令行工具和底层库,实现了对几乎所有主流容器格式和编码格式的兼容。其技术价值在于提供了跨平台、可脚本化的处理能力,能够高效地完成格式转换、流媒体推拉流、内容编辑等任务,是自动化工作流和媒体服务后端的基石。在实际应用中,开发者常需处理视频剪辑、音频提取、分辨率调整等场景,例如使用 `-c:v libx264` 进行视频转码,或通过 `-vf scale` 调整画面尺寸。本

359

FFmpeg 入门指南:从核心概念到实战应用,掌握音视频处理利器

音视频处理是多媒体开发中的基础技术,其核心在于对容器、流、编码器等概念的理解。FFmpeg 作为一套开源的跨平台解决方案,通过其模块化设计和丰富的过滤器系统,实现了对音视频记录、转换和流化的全面支持。在技术价值上,FFmpeg 不仅提供了强大的命令行工具链(包括 ffmpeg、ffprobe 和 ffplay),还允许开发者进行深度定制和集成,从而在视频格式转换、剪辑、流媒体处理等场景中发挥关键作用。本文以 FFmpeg 为核心,结合过滤器(Filter)和流映射思想,帮助开发者快速上手并解决实际开发中的高

weixin_34026276的博客 327

FFmpeg命令行工具:多媒体格式转换与批量处理实战指南

在数字媒体处理领域,格式转换是基础且高频的需求,涉及视频、音频、图片等多种文件类型。其核心原理是通过编解码器改变文件的容器格式或编码方式,从而适应不同播放环境或减小文件体积。这项技术的价值在于提升处理效率、实现自动化流程,并广泛应用于内容创作、软件开发、数据预处理等场景。借助FFmpeg这一开源命令行工具,用户可以高效完成MP4转GIF、PNG转JPG、WAV转MP3等操作,并通过脚本实现批量处理,显著提升工作效率。

weixin_30591551的博客 326

linux将gif合并成视频,手把手教你在Ubuntu中创建GIF动态图片

原标题:手把手教你在Ubuntu中创建GIF动态图片GIf已经是当下较为流行的一种交流方式,在微薄、QQ等社交中尤为常见。因为GIf文件比视频小,而且比jpg图片生动形象。网络段子手,恶搞者的钟爱对象,也适用于产品和功能的展示。因此,小编将教大家如何在 Ubuntu 16. 其实并不难,只需一台安装 FFmpeg 的 Ubuntu 16.04 桌面端,再安装上 ImageMagick,工具就算备齐...

weixin_39727976的博客 359

免费VR视频转换终极指南:3步将3D分屏视频转为可交互2D格式

你是否收藏了大量VR视频却苦于没有VR设备?VR-Reversal这款开源工具让你在普通电脑上就能自由探索360度全景内容!这个基于MPV播放器的插件能实时将3D分屏VR视频转换为可交互的2D格式,让你用鼠标键盘就能控制视角,体验身临其境的VR观看效果。 ## 🎯 为什么选择VR-Reversal?三大核心优势 ### 1. 零成本VR体验 无需购买昂贵的VR头显设备,只要有普通电脑就能享受

gitblog_00607的博客 682

FFmpeg实战指南:从零掌握音视频处理核心工具

音视频处理是多媒体开发中的基础技术,其核心在于对媒体文件的编解码、格式转换与流处理。FFmpeg作为一套开源的音视频处理解决方案,集成了领先的编解码库libavcodec和格式处理库libavformat,能够高效完成视频转码、音频提取、流媒体转发等任务。在工程实践中,开发者常利用FFmpeg进行视频裁剪、合并、添加水印等操作,其命令行工具和库函数为各类音视频应用提供了底层支持。无论是构建流媒体服务器还是开发视频编辑工具,掌握FFmpeg的环境搭建、命令使用及编程集成,都能显著提升开发效率与系统性能。本文通

weixin_30770783的博客 351

视频打包自动化:FFmpeg批量处理与API服务搭建指南

视频处理是多媒体技术中的基础环节,其核心原理涉及编码、封装、转码等关键技术。通过自动化工具实现批量视频打包,能显著提升内容生产效率,在自媒体运营、影视资料归档等场景中具有重要价值。本文以FFmpeg为核心工具,结合Python脚本与Flask框架,详细讲解了从本地命令行操作到构建REST API服务的完整技术方案,并深入探讨了批量任务管理、GPU加速优化以及常见问题排查方法,为搭建稳定高效的视频处理流水线提供实践指导。

weixin_30883311的博客 305

开源工具链搞定图片PDF音视频转换:本地命令行指南

文件格式转换是数字工作中最常见的需求之一。无论是图片格式互转、PDF压缩与拆页,还是音视频转码,很多人习惯依赖在线服务,却忽略了本地开源工具链的可靠与高效。基于命令行工具如ImageMagick、FFmpeg、Ghostscript和LibreOffice,转换过程不依赖上传下载,避免了隐私泄露和文件大小限制,批量处理时优势尤为明显。从单一格式转换到复杂任务编排,理解编码、容器、页面对象等基本原理,再通过简单的命令组合,就能完成从图片批量处理、PDF结构重组到视频音频提取的全流程。这套方法适合高频、敏感或大

weixin_34332905的博客 429

从单点需求到通用能力:基于FFmpeg与Pandoc的格式转换Skill封装实战

在软件开发和自动化领域,命令行工具是构建高效工作流的核心组件。通过调用成熟的命令行工具,开发者可以将复杂的格式转换任务封装为标准化接口,实现从单点需求到通用能力的跃迁。FFmpeg作为音视频处理的行业标准,支持广泛的编解码器,能够处理从MP4到GIF等多种格式转换;Pandoc则作为文档转换的瑞士军刀,通过抽象文档模型实现Markdown、Word、PDF等数十种格式间的自由转换。这些工具的技术价值在于其稳定性和跨平台兼容性,为自动化脚本和系统集成提供了可靠基础。在实际应用中,通过设计统一的路由映射和处理器

weixin_30564901的博客 488
上一篇: php日常问题汇总
下一篇: PHP生成二维码和识别二维码
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值