关于ffmpeg的使用过程中遇到的点(php)

news/2025/1/8 18:12:23/

有段日子没更新,最近使用ffmepg,这里记录一下

我这边就直说一下我工作中遇到的注意事项和使用方法,就不太详细说了

首先是安装的问题,windwos的话比较简单,官网下载安装文件,解压之后。设置环境变量

系统环境变量内  path新增  你的 解压包的位置下的

我的是这样。然后运行cmd  输入ffmepeg可以看一下输出

 

这样就算是安装成功了

linux的话,我个人感觉会非常麻烦,

首先wget下载包,解压,编译,编译过程中可能出现问题,然后百度错误按照步骤走

变异之后增加环境变量

最后要注意的是,安装之后,假如使用转场 可能会报错

“fatal error: x264.h: No such file or directo

大概是这个,也就是说还需要全装这个插件,至于步骤,我记不得了,比较麻烦,安装之后中添加环境变量就算是完成了。

然后下面说下基本的命令,首先是图片转视频

ffmpeg -r 10 -f image2 -loop 1 -i (图片的路径) -s 1080x1920 -pix_fmt yuvj420p -t 3 -y -vcodec libx264 " (要生成的视频路径)

这条指令没有特别要注意的

这段话的意思  -y 确定或者说覆盖 一直确认的意思 -r 是说以一秒10帧读入文件   -loop 1  我记得是循环的意思, -s是调整分辨率的  -pix_fmt应该是指定格式, -t 是要生成的视频时间,  -vcodec 强制视频编码 

然后是拼接专场,切记,转场一定要4.2以上的版本这比较麻烦,因为大多是多文件转场,那么ffmpeg命令会很麻烦这里提供一个思路就是两个两个的拼接,最后只返回一个,这里有个缺点就是会生成多余文件,如果有更高的方法,还请指教

ffmpeg -i (第一个文件)  -i (第二个文件) -y -filter_complex [0][1]xfade=transition=(你要专场的样子,官网有Xfade – FFmpeg):duration=1:offset=1,format=yuv420p -y (要生成的文件)

这条指令的意思是

  1. -i 也就是指定文件  
  2. -filter_complex是指定视频过滤器  
  3. [0][1]xfade 是使用xfade过滤器
  4. transition是转场持续多久
  5. duration是转场从多少秒开始
  6. format指定格式

需要注意的点

  1. 如果transition 加上duration的时间大于你的原视频时间,那么你下一个转场视频直接会消失没有,我卡挺久的,所以建议大家计算出要转场的第一个视频的时长,用来就算下一次转场从多久开始

接下来就是 增加音乐

ffmpeg -i (增加音乐的文件)-f concat -safe 0 -i (指定的音乐文件) -t (视频时长) -c copy -map 0:v:0 -map 1:a:0 -y 要生成的文件

这一条命令需要注意的点

  1.  有可能你的音频时间短,视频时间长,那么你就需要 音频文件循环写入txt文件,用来读取,循环播放音乐,也有可能还有别的方法,我懒得找了文件格式如下,可以多输出几次
  2.   -t参数,如果视频短,音乐长,那么默认会 播放完音乐才会停止视频,所以我计算了视频时长,来指定播放的时间
  3. 记得先去除原视频的声音

接下来是去除原视频的声音指令

"ffmpeg -i (要去除的文件) -vcodec copy -y -an (去除后的文件存储位置)

计算时间的话,这里有个方法

    public static function getVideoTime($file): int{$duration_in_seconds = 0;$vtime = false;if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {$commond = "ffmpeg -i $file 2>&1";exec($commond, $str_res, $str_r);if (is_array($str_res)) {foreach ($str_res as $v) {if (str_contains($v, 'Duration')) {$vtime = substr($v, stripos($v, '.') - 8, 8);//' Duration: 00:24:28.14, start: 0.000000, bitrate: 486 kb/s'break;}}}} else {$vtime = exec("ffmpeg -i " . $file . " 2>&1 | grep 'Duration' | cut -d ' ' -f 4 | sed s/,//");//总长度}if ($vtime) {$duration = explode(":", $vtime);if ($duration) {$duration_in_seconds = $duration[0] * 3600 + $duration[1] * 60 + round($duration[2]);//转化为秒}}return $duration_in_seconds;}

因为我用的php所以,大家用别的语言也可以尝试写出来

就这样吧,有很多不足,不过不去深入研究了,有什么错误的地方们还请大家指正


http://www.ppmy.cn/news/51636.html

相关文章

h5逻辑_解决h5页面嵌入ios兼容性问题

安全区域 如下图所示~ 蓝色部分为安全区域。处于安全区域内的内容不受圆角、齐刘海、小黑条的影响。 若是将h5页面嵌入app中,就需要进行适配—> 让h5页面展示在安全区域内。 tips: 安全区域是在ios11之后并且是iPhoneX及以上机型才有的。 因此我们只…

《回顾活动引导:24个反模式与重构实践》读后感

《回顾活动引导:24个反模式与重构实践》读后感 前提 看过《敏捷回顾活动:团队从优秀到卓越之道》;其实我没看过 😀 最高指导原则:理解并坚信每个人对自己的工作都已全力以赴拉斯维加斯规则:在回顾会上分享…

Java基础--->集合详解

文章目录 集合CollectionListSet MapHashMapHashtableLinkedHashMapTreeMap 集合 Collection ​ Collection一般存储的是列表数据 List ​ List存储的数据是有序可重复的 ArrayList ​ ArrayList数组存储,可以动态扩容,适合大量查找,线…

Linearx配置环境

代码地址 gitssh.dev.azure.com:v3/linearx/PowerDDS/PowerDDS LinearX-5G Wifi pwd: 50186058 Windows报错可以搜索错误代码找官方给出的解决方案 最新版本cmake:ubuntu 20.04安装(升级)cmake - 知乎 (zhihu.com) gtest:gtest的安装_liuzubing的博客…

文献阅读 Meta transfer learning-based super-resolution infrared imaging

题目 Meta transfer learning-based super-resolution infrared imaging 基于元迁移学习的超分辨率红外成像 摘要 我们提出了一种具有元迁移学习和轻量级网络的红外图像超分辨率方法。我们设计了一个轻量级网络来学习低分辨率和高分辨率红外图像之间的映射。我们使用外部数据…

python-数据库-4

数据查询 分页(限制查询返回条数) limit 子句 create table test(id int primary key auto_increment,name char(5),gerden varchar(2),grade double(4 , 1) );insert into test(name , gerden , grade) values (刘水东,男,89), (曹洪清,男,95), (轻岚,男,88), (泽瑞,男,90…

【SCI征稿】IEEE旗下1区人工智能类SCI, 稳定检索22年,仅3个月左右录用~

一、期刊简介: 1区人工智能类SCI&EI (高质量) 【期刊概况】IF:6.0-7.0, JCR1区, 中科院3区; 【终审周期】走期刊部系统,3个月左右录用; 【检索情况】SCI&EI双检,正刊; 【数据库收录年份】2001…

JVM中的垃圾回收概念及其基础算法说明

文章目录 一、 垃圾回收概述1、什么是垃圾?2、为什么我们需要GC 二、垃圾回收之判别对象死活1、标记阶段:引用计数算法2、标记阶段:可达性分析算法 二、 finalization 机制三、整理和清除对象1、标记-清除算法(Mark-Sweep&#xf…