你好,FFMPEG 可视化

给大家看看我现在的玩具:

它有哪些功能呢?如你所见,不止于此

1. 视频录制

暂时只能录制视频,音频无法录制

FFMPEG.exe 暂时只支持视频,音频录制需要下载额外的工具

2. 视频处理

支持简单的分割,裁剪,以及压缩

简单实用

3. 视频转Gif

支持高清模式,生成文件会更大

下载与使用

1. 安装WebView2 RunTime

Webview2 - Microsoft Edge Developer



点击 下载,然后安装

2. 下载TidyView

这是WebView2的封装

百度网盘 TidyVew 密码:Tidy

TidyView不提供任何功能,具体功能需要以App形式存在

3. 下载FFMPEG Visual

这是一个 TidyView 的App

百度网盘 FFMPEG Visual 密码:Tidy

上述是 FFMPEG Visual 的目录结构

其中 main.edge 便是入口程序

4. 打开FFMPEG Visual

右键 main.edge 打开方式 选择其他应用

更多应用 在这台电脑上选择其他应用 找到TidyView.exe 打开

下次打开,勾选 始终使用此应用打开.edge文件即可

5. 第一次使用

第一次使用时,程序会自动下载ffmpeg.exe

下载完成后,会进入主页面

枯燥环节

下面便是技术环节了

1. 啥是main.edge?

其实就是一个脚本文件,TidyScript,TidyScript小组

有C#的语法,也有JavaScript的一些特征

运行速度慢,但是灵活性高

log.clear();

var Url;
var JS; void download(string url)
{
var path=Environment["ScriptDir"]+"\\ffmpeg.zip";
var downitem={};
downitem.url=url;
downitem.path=path;
downitem.file="FFMPEG.exe";
downitem.dest="用于视频操作的核心程序";
var params={};
params.download=[];
params.download.Add(downitem);
Launch("Download/download.edge",params);
} void OnLoad()
{
EvalJS($"_tool_bar_ini({file.read(locate("plugins.json"))})");
} void LoadPage(string Page)
{
Launch("frame",Page);
} if(file.exists(locate("ffmpeg.exe")))
{
Url="main.html";
JS="main.js";
}
else if(file.exists(locate("ffmpeg.zip")))
{
Url="main.html";
JS="main.js";
zip.uncompress(locate("ffmpeg.zip"),Environment["ScriptDir"] as string);
thread.sleep(1000);
file.delete(locate("ffmpeg.zip"));
}
else
{
Url="https://shareyun.lanzous.com/iyuEeok4p6j";
JS="main_download_ffmpeg.js";
}

2. 工作框架

从打包的角度,有两个东西,一个是TidyView,另一个是TidyScript写的脚本

往下面探一层,有四个东西:

  1. WebView2提供浏览器功能
  2. C#写的dll提供本地化功能
  3. Html+JS提供页面UI功能
  4. TidyScript写的脚本提供业务功能

如果把WebView2作为基础件,忽略掉,就是下面这个结构。

3. 工作流程



4. 交互方案

每个页面都会注入基本JS

var edge = window.chrome.webview.hostObjects.edge;
var _id = (id) => { return document.getElementById(id); };
var _attr = (id, name) => { return document.getElementById(id).getAttribute(name) };
var call = (name, ...args) => { edge.CallApp(app_frame_path, name, ...args) };
var _frame = (frame_path) =>
{
var paths = frame_path.split(".");
var last = null;
for (var i in paths) {
if (last == null) {
last = document.getElementById(paths[i]);
}
else {
last = last.contentDocument.getElementById(paths[i]);
}
}
return last;
};

假设一个TidyScript脚本如下

void Hello()
{
EvalJS("console.log('hello world')");
}
void Hello(string Name)
{
EvalJS($"console.log('hello world {Name}')");
}

JS中调用TidyScript中的函数就很简单

直接在JS中这样写:call("Hello")

或者这样写:call("Hello","TidyScript")

那么TidyScript如何调用JS呢?

其实上面的代码已经告诉我们答案:EvalJS("console.log('hello world')")

其核心功能是WebView2提供的

ExecuteScriptAsync(string Script)

namespace Microsoft.Web.WebView2.WinForms
{
public class WebView2 : Control, ISupportInitialize
{
public WebView2();
//....
public Uri Source { get; set; }
public CoreWebView2 CoreWebView2 { get; }
public CoreWebView2CreationProperties CreationProperties { get; set; }
protected override CreateParams CreateParams { get; }
//下面这个方法提供运行JS脚本功能
public Task<string> ExecuteScriptAsync(string script);
public void GoBack();
//.....
}
}

FFMPEG Visual 结构

最后

这个玩具很不错,既能我自己玩,也能给大家玩。

但是它还是有点简陋,下面会把它慢慢完善

下一个玩具呢?

暂时还不知道,确定好了,再说。

你好,FFMPEG 可视化的更多相关文章

  1. [译]学习IPython进行交互式计算和数据可视化(五)

    第四章:交互式绘图接口 本章我们将展示Python的绘图功能以及如何在IPython中交互式地使用它们. NumPy为处理大量的多维数组结构的数据提供了高效的方法.但是看行行列列的数字总不如直接看曲线 ...

  2. FFMpeg ver 20160219-git-98a0053 滤镜中英文对照 2016.02.21 by 1CM

    FFMpeg ver 20160219-git-98a0053 滤镜中英文对照 2016.02.21 by 1CM T.. = Timeline support 支持时间轴 .S. = Slice t ...

  3. FFMpeg ver 20160213-git-588e2e3 滤镜中英文对照

    1 FFMpeg ver 20160213-git-588e2e3 滤镜中英文对照 2016.02.18 by 1CM 2 T.. = Timeline support 3 支持时间轴 4 .S. = ...

  4. FFMpeg 滤镜中英文对照

    FFMpeg ver 20160213-git-588e2e3 滤镜中英文对照 2016.02.17 by 1CM T.. = Timeline support 支持时间轴 .S. = Slice t ...

  5. pytorch visdom可视化工具学习—1—详细使用-1—基本使用函数

    使用教程,参考: https://github.com/facebookresearch/visdom https://www.pytorchtutorial.com/using-visdom-for ...

  6. Bootstrap 可视化HTML编辑器,summernote

    Bootstrap 可视化HTML编辑器之summernote,用其官网上的介绍就是"Super Simple WYSIWYG editor",不过在我看来,与bootstrap中 ...

  7. 第二章 FFmpeg常用命令

    2.1 FFmpeg常见的命令大概分为6个部分 ffmpeg信息查询部分 公共操作参数部分 文件主要操作参数部分 视频操作参数部分 字幕操作参数部分 2.1.1 FFmpeg的封装转换 FFmpeg ...

  8. Gource 方便的软件版本可视化录制工具

    Gource 是一个特别棒的软件变更可视化录制工具,我们可以使用此工具,方便的将软件的版本变动,录制 为视频 安装 brew install gource brew install ffmpeg   ...

  9. python可视化基础

    常用的python可视化工具包是matplotlib,seaborn是在matplotlib基础上做的进一步封装.入坑python可视化,对有些人来说如同望山跑死马,心气上早输了一节.其实学习一门新知 ...

随机推荐

  1. 基于SaaS平台的iHRM项目的前端项目介绍

    1.下载安装node.js 访问https://nodejs.org/en/,然后下载安装即可 2. 查看是否安装成功 打开cmd命令行,输入node -v 如果出现对应的版本号,即为安装成功 3.从 ...

  2. Java获取微信公众号新增用户事件

    一.新建项目工程 新建一个spring项目 填写 Group 和 Artifact 信息 这步可以直接跳过,后面再按需导入 选择工程地址 二.配置 pom.xml <dependencies&g ...

  3. 看完我的笔记不懂也会懂----ECMAscript 567

    目录 ECMAscript 567 严格模式 字符串扩展 数值的扩展 Object对象方法扩展 数组的扩展 数组方法的扩展 bind.call.apply用法详解 let const 变量的解构赋值 ...

  4. Python基础之:Python中的流程控制

    目录 简介 while语句 if 语句 for语句 Break Continue pass 简介 流程控制无非就是if else之类的控制语句,今天我们来看一下Python中的流程控制会有什么不太一样 ...

  5. docker swarm模式跨主机连接

    一.前言 当我们开发好微服务之后,考虑到灵活快速持续部署的需要,通常会考虑将其Docker镜像化并在Docker环境下运行.由于微服务个数通常会较多,把所有微服务部署在一台docker主机上是不现实的 ...

  6. WPF 基础 - Binding 对数据的转换和校验

    1. Binding 对数据的转换和校验 Binding 中,有检验和转换关卡. 1.1 数据校验 源码: namespace System.Windows.Data { public class B ...

  7. 如何在 C# 中使用 ArrayPool 和 MemoryPool

    对资源的可复用是提升应用程序性能的一个非常重要的手段,比如本篇要分享的 ArrayPool 和 MemoryPool,它们就有效的减少了内存使用和对GC的压力,从而提升应用程序性能. 什么是 Arra ...

  8. P1047_校门外的树(JAVA语言)

    题目描述 某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米. 我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置: 数轴上的每个整数点,即0,1,2,-,L都种 ...

  9. OpenCV图像处理中的“机器学习"技术的使用

    注意,本文中所指"机器学习"(ML)技术,特指SVM.随机森林等"传统"技术. 一.应用场景        相比较当下发展迅速的各路"端到端" ...

  10. 力扣 - 剑指 Offer 37. 序列化二叉树

    目录 题目 思路 代码 复杂度分析 题目 剑指 Offer 37. 序列化二叉树 思路 序列化其实就是层序遍历 但是,要能反序列化的话,前.中.后.层序遍历是不够的,必须在序列化时候保存所有信息,这样 ...