接到朋友的需求,朋友是做php的,让我帮忙处理php生成gif的需求。他的项目类似抖音短视频那种,就是展示出来的界面是gif动图,然后点进去是完整的视频。

我想了想,我倒是没做过php生成gif的需求啊。但是python能做啊,满打满算,核心代码几行就能搞定了。那我为何我不给他写个外挂程序呢

这里用到了moviepy 这个包。

1.安装moviepy:

  pip install moviepy

2.写程序开始。

  在他的服务器上我很快就配好了python 和 pip的环境。

  

#!usr/bin/env python
#-*- coding:utf-8 _*-
"""
@author:Hurrican
@file: gif.py
@time: 2019/06/22 21:33 """
import sys
import moviepy.editor as mpy imge_url=sys.argv[1]
if imge_url !='': '''处理路径start'''
piece = imge_url.split('/')[-2:]
path = '/'.join(piece)
path = path.replace('.mp4','.gif') dirname = '/usr/share/nginx/html/KY/data/upload/'+path
'''处理路径end'''
try:
#视频文件的本地路径
content = mpy.VideoFileClip(imge_url)
# 剪辑0分0秒到0分1秒的片段。注意:不使用resize则不会修改清晰度
c1 = content.subclip((0,0),(0,1)).resize((480,320))
c1.write_gif(dirname)
except Exception as e:
print(e) else:
print('系统错误')

  上面是我写的python 代码。

大家可能注意到了。,sys.argv[1],其实这个是我从php传过来的参数。

给你们拓展下:

引入 sys模块。sy.argv[1]就到表从php传过来的第一个参数

下面是php代码,我截取片段,

php代码

<?php

// +----------------------------------------------------------------------
// | YFCMF [ WE CAN DO IT MORE SIMPLE ]
// +----------------------------------------------------------------------
// | Copyright (c) 2015-2016 http://www.rainfer.cn All rights reserved.
// +----------------------------------------------------------------------
// | Author: rainfer <81818832@qq.com>
// +----------------------------------------------------------------------
namespace app\home\controller; use think\Cache;
use think\Db;
use think\captcha\Captcha;
class Index extends Base {
public function index() {
set_time_limit(0); $news = DB::name('news')->order("news_time asc")->field('n_id,news_title,news_time,news_content,news_hits,member_list_id,news_hits,zan_num')->select();
$data = [
'news' => $news,
];
#########################################################外挂开始##########################################################
foreach ($data['news'] as $key => $value) {
# code...
$img_url = $value['news_content']; if($img_url!=''){
$order = "python ".getcwd()."/app/home/controller/gif.py {$img_url}"; $data = shell_exec($order);
var_dump($data);
// // $result = exec('/usr/bin/python /usr/share/nginx/html/KY/app/home/controller/gif.py {$img_url}');
// #写日志文件
file_put_contents(dirname(__FILE__).'/log.txt', $data.'\r\n',FILE_APPEND);
} }

#########################################################外挂结束##########################################################

// echo '<pre>';
// print_r($data);die;
return $this->view->fetch(':index');
}


  

中间标识的外挂就是我将php与pyhon交互的代码。

这里我用到了 php的shell_exec 函数,之所以不用exec是因为它只能返回一行结果。而shell_exec可以返回全部结果。 getcwd()是php的一个函数,标识返回当前工作目录

python 双引号里面记得还要留个空格哦。然后可以打印出结果。然后在php项目里面加个日志文件就行了。

成功后,我们来看看日志文件长什么样:

下面是工作目录。本次采用YFCMF的TP框架。但是一定要注意要给777 权限(644好像不行,测试失败了),不然写不了日志文件。

视频剪辑生成gif格式(php外挂python程序)完美!的更多相关文章

  1. Python生成文本格式的excel\xlwt生成文本格式的excel\Python设置excel单元格格式为文本\Python excel xlwt 文本格式

    Python生成文本格式的excel\xlwt生成文本格式的excel\Python设置excel单元格格式为文本\Python excel xlwt 文本格式 解决: xlwt 中设置单元格样式主要 ...

  2. 一个挺好用的生成GIF格式图片的小程序

    import os import re import imageio pic_list = os.listdir() pic_type = ['png', 'jpg', 'jpeg', 'bmp'] ...

  3. Scrum立会报告+燃尽图(十二月九日总第四十次):视频剪辑与用户反馈

    此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2484 项目地址:https://git.coding.net/zhang ...

  4. Python音视频剪辑库MoviePy1.0.3中文教程导览及可执行工具下载

    ☞ ░ 前往老猿Python博文目录 ░ 一.简介 MoviePy是一个用于视频编辑的Python模块,可用于进行视频的基本操作(如剪切.拼接.标题插入).视频合成(也称非线性编辑).视频处理或创建高 ...

  5. 视频剪辑什么鬼?Python 带你高效创作短视频

    ​阅读文本大概需要 10 分钟. 近两年,抖音.快手将短视频推到风口浪尖上,要生产出高质量的视频,离不开视频剪辑这一环节:在全民剪片浪潮中,大众使用最多的剪辑软件如:Pr.FCPX.剪印.Vue 等. ...

  6. python也能玩视频剪辑!moviepy操作记录总结

    前几篇文章咱们介绍了一下图片的处理方式,今天咱们说说视频的处理.python能够支持视频的处理么?当然是肯定的,人生苦读,我用python.万物皆可python. moviepy库安装 今天咱们需要使 ...

  7. python 生成json格式文件,并存储到手机上

    上代码 #!/usr/bin/env python # -*- encoding: utf-8 -*- import json import os import random "" ...

  8. Python MoviePy中文教程导览及可执行音视频剪辑工具下载

    ☞ ░ 前往老猿Python博文目录 ░ <Python音视频剪辑库MoviePy1.0.3中文教程导览及可执行工具下载>是老猿两个关于moviepy的专栏<PyQt+moviepy ...

  9. moviepy音视频剪辑:AudioClip帧处理时报TypeError: only size-1 arrays can be converted to Python scalar错

    ☞ ░ 前往老猿Python博文目录 ░ 一.环境 操作系统:win7 64位 moviepy:1.0.3 numpy:1.19.0 Python:3.7.2 二.应用代码及报错信息 程序代码 if ...

随机推荐

  1. 【WinHec启发录】透过Windows 10技术布局,谈微软王者归来

    每一个时代都有王者,王者的成功,往往是由于恰逢其时地公布了一个成功的产品(具有里程碑意义,划时代的产品).Windows 95的成功标示着微软是PC时代的王者:WinXP的成功标示着微软是互联网时代的 ...

  2. ios18---自定义控件3改进

    控制器: // XMGViewController.h #import <UIKit/UIKit.h> @interface XMGViewController : UIViewContr ...

  3. ViewControl的size设为freeform

    freeform的用处是让你写一些不标准的view,比如说自定义一个cell,或者自己写一个小的VIEW,freeform的XIB是可以自己拖拽更改大小的

  4. MySQL-day1数据库的安装与介绍

    一.mysql的安装步骤 以5.7.20版本为例: 第1步: 第2步: 第3步: 第4步: 第5步: 第6步: 第7步: 第8步: 第9步: 第10步: 第11步: 第12步: 第13步: 第14步: ...

  5. uva1560

    In an extended version of the game Lights Out®, is a puzzle with 5 rows of 6 buttons each (the actua ...

  6. 实现grep命令

    #include <stdio.h> #include <string.h> #include <stdlib.h> // grep命令:grep match_pa ...

  7. BFS POJ 3414 Pots

    题目传送门 /* BFS:六种情况讨论一下,BFS轻松解决 起初我看有人用DFS,我写了一遍,TLE..还是用BFS,结果特判时出错,逗了好长时间 看别人的代码简直是受罪,还好自己终于发现自己代码的小 ...

  8. [转]position:fixed; 在IE9下无效果的问题

    本文转自:http://www.cnblogs.com/xinwang/archive/2013/04/06/3002384.html 平常DIV+CSS布局时,position属性一般用absoul ...

  9. RabbitMQ指南之四:路由(Routing)和直连交换机(Direct Exchange)

    在上一章中,我们构建了一个简单的日志系统,我们可以把消息广播给很多的消费者.在本章中我们将增加一个特性:我们可以订阅这些信息中的一些信息.例如,我们希望只将error级别的错误存储到硬盘中,同时可以将 ...

  10. [ CodeForces 1059 D ] Nature Reserve

    \(\\\) \(Description\) 你现在有\(N\)个分布在二维平面上的整点\((x_i,y_i)\),现在需要你找到一个圆,满足: 能够覆盖所有的给出点 与\(x\)轴相切 现在需要你确 ...