ffmpeg编译成wasm

news2025/1/12 1:37:07

最近在看ffmpeg的源码
https://ffmpeg.xianwaizhiyin.net/ffplay/
https://crifan.github.io/media_process_ffmpeg/website/audio_process/

做个可运行的例子
代码在找了一堆,可用的版本放在这
https://github.com/killinux/ffmpeg_wasm_demo

  1. 先把ffmpeg 编译成 wasm的可依赖库
  2. em++ src/extract.cpp 和这些依赖库 编译成extract.js 和 extract.wasm 暴露出"_extract_image",“_extract_audio” 两个函数
  3. 用js调用cpp的函数运行ffmpeg的能力
    做一个 ffmpeg抽帧和提取音频的例子

安装emscripten:

git clone https://github.com/emscripten-core/emsdk.git   
./emsdk install latest  
./emsdk activate latest  
source ./emsdk_env.sh  
emcc --version
emcc (Emscripten gcc/clang-like replacement + linker emulating GNU ld) 3.1.39  

安装编译 ffmpeg to wasm

git clone --depth 1 --branch n4.3.1 https://github.com/FFmpeg/FFmpeg  

参考
https://blog.csdn.net/fengfan_tracking/article/details/110129951

FFmpeg/libswscale/yuv2rgb.c
注释掉3行,否则编译报错

//    av_log(c, AV_LOG_WARNING,
//           "No accelerated colorspace conversion found from %s to %s.\n",
//          av_get_pix_fmt_name(c->srcFormat), av_get_pix_fmt_name(c->dstFormat));
emconfigure ./configure --cc="emcc" --cxx="em++"  --ar="emar" --ranlib=emranlib --prefix=$(pwd)/dist --cpu=generic \--target-os=none --arch=x86_32  --enable-cross-compile --disable-stripping --disable-programs --disable-doc --disable-devices --disable-postproc --disable-hwaccels --disable-parsers --disable-bsfs --disable-protocols --disable-indevs --disable-outdevs --disable-network --disable-asm --disable-debug  --enable-protocol=file

emmake make -j8
make install 


生成dist 下面的 include 和lib

cd dist
cp -r include lib /opt/mycode/ffmpeg/ffmpeg_wasm_demo/example-ffmpeg-extract

生成:ffmpeg_wasm_demo/example-ffmpeg-extract/dist/extract.js 和 ffmpeg_wasm_demo/example-ffmpeg-extract/dist/extract.wasm

cd /opt/mycode/ffmpeg/ffmpeg_wasm_demo/example-ffmpeg-extract
em++  -O3 src/extract.cpp  -I ./include lib/libavformat.a lib/libavcodec.a lib/libswscale.a lib/libswresample.a lib/libavutil.a -lworkerfs.js --pre-js src/worker.js -s WASM=1 -o dist/extract.js -s EXTRA_EXPORTED_RUNTIME_METHODS='["ccall", "cwrap"]' -s EXPORTED_FUNCTIONS='["_main", "_destroy", "_extract_image","_extract_audio","_malloc"]' -s ALLOW_MEMORY_GROWTH=1  -s TOTAL_MEMORY=33554432

最终类似这样,上传任意视频,抽取图频和音频
http://localhost/ffmpeg/ffmpeg_wasm_demo/example-ffmpeg-extract/demo/
请添加图片描述

if something wrong:

extract.js:1 Uncaught TypeError: Module._malloc is not a function
    at WebExtract.extractAudio (extract.js:1:3696)
    at self.onmessage (extract.js:1:4089)

EXPORTED_FUNCTIONS  add "_malloc"

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

50 Projects 50 Days - Scroll Animation 学习记录

项目地址 Scroll Animation 展示效果 Scroll Animation 实现思路 HTML结构比较简单,就是10个盒子元素。当鼠标滚动时,盒子分别从左右移动过来。 思路上最开始想到的是给每一个盒子标记一个序号,滚动屏幕后,计算已经划动屏幕的…

C++ - 非类型模版参数和模版的特化

目录 非类型模版参数 模版的特化 函数模版特化 类模版特化 全特化 半特化(偏特化) 参数更进一步的限制 非类型模版参数 在之前学过的例子来看,我们使用模版,它们的参数都是类型模版,根据类型来决定实例化 而模版其实还有一种参数&…

通过Python的pdfplumber库提取pdf中表格数据

文章目录 前言一、pdfplumber库是什么?二、安装pdfplumber库三、查看pdfplumber库版本四、提取pdf中表格数据1.引入库2.定义pdf文件路径3.打开pdf文件4.获取pdf文件中的页数5.遍历每一页6.获取当前页内容7.提取表格数据8.输出表格数据9.效果 总结 前言 大家好&#…

聊聊美剧202306

刚把《黄石》系列看完,决定写点最近看的美剧,总共十一部,小评一下,写点东西~ 《黄石》 《黄石》已经到第五季了,看样子还得继续拍。刚开始看《黄石》的时候,确实有种陷进去的感觉,很美很宏伟的电…

leetcode 264.丑数

题目描述跳转去leetcode 给你一个整数 n ,请你找出并返回第 n 个 丑数 。 丑数 就是只包含质因数 2、3 和/或 5 的正整数。 来源:leecode:https://leetcode.cn/problems/ugly-number-ii/ 解法1, 动态规划 定义一个数组用来记录前…

VMware Workstation 安装 AlmaLinux 9.2

VMware Workstation 安装 AlmaLinux 9.2 AlmaLinux 9.2 镜像下载AlmaLinux 9.2 安装创建新用户配置免密 sudo 到 root 用户配置 ssh key 登录挂载新磁盘 AlmaLinux 9.2 镜像下载 访问 https://mirrors.almalinux.org/isos.html 下载安装镜像, AlmaLinux 9.2 安装 …

K8s进阶7——Sysdig、Falco、审计日志

文章目录 一、分析容器系统调用:Sysdig1.1. 安装1.2 常用参数1.3 采集分析1.4 示例1.4.1 查看某进程系统调用事件1.4.2 查看建立TCP连接事件1.4.3 查看某目录下打开的文件描述符1.4.4 查看容器的系统调用 1.5 Chisels工具1.5.1 网络类1.5.2 硬盘类1.5.3 cpu类1.5.4 …

新型智慧园区解决方案之园区通行管理设计

智慧园区作为现代化城市化建设的重要组成部分,已经成为未来城市的重要发展方向。在智慧园区的建设中,通行管理是一个十分重要的问题。为了解决这一问题,我们需要进行一系列的设计和方案的制定。 一、园区交通规划设计 园区交通规划设计是通…

IIS总线介绍

IIS是飞利浦在1986年定义(1996年修订)的数字音频传输标准,用于数字音频数据在系统内器件之间传输,例如编解码器CODEC、DSP、数字输入/输出接口、ADC、DAC和数字滤波器等。其与IC无关联。 IIS总线的信号: BCLK,串行时钟也叫位时钟…

以太坊 – 部署智能合约到Ganache

目录 1. Ganache本地区块链 1.1 主界面 1.2 设置 2. 开发智能合约 2.1 初始化项目 2.2 添加package.json文件 2.3 添加智能合约源文件 2.4 编译项目 3. 部署智能合约到Ganache 3.1 更新配置文件 3.2 创建迁移脚本 3.3 执行迁移命令 1. Ganache本地区块链 首先启动…

springboot配置Swagger3.0

springboot配置Swagger3.0 1、pom加入依赖 我们创建一个SpringBoot项目&#xff0c;引入 swagger3 依赖 <dependency><groupId>io.springfox</groupId><artifactId>springfox-boot-starter</artifactId><version>3.0.0</version>…

任正非:ChatGPT对我们的机会是什么,内部讲话实录!

ChatGPT狂飙160天&#xff0c;世界已经不是之前的样子。 我新建了人工智能中文站https://ai.weoknow.com 每天给大家更新可用的国内可用chatGPT资源 为感谢全国火花奖获奖者对于产业界及科学界做出的重大贡献&#xff0c;华为组织了与部分获奖老师与专家的座谈会。座谈会上&…

LeetCode.46. 全排列(回溯法入门)

写在前面&#xff1a; 题目链接&#xff1a;LeetCode.46. 全排列 编程语言&#xff1a;C 题目难度&#xff1a;中等 一、题目描述 给定一个不含重复数字的数组 nums &#xff0c;返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 示例 1&#xff1a; 输入&#xff1a…

【震撼GPT-4崛起!年薪60万工作被GPT-4取代,成本仅2千多,引发轰动!】

目录 福利&#xff1a;文末纯分享中文版CHAT GPT镜像&#xff0c;不存在魔法&#xff0c;纯分享免费使用 一、前言 1、GPT-4的表现&#xff0c;与一位6年工作经验的人类相当 2、GPT-4完成所有类型的任务都要比人类快得多&#xff01; 二、GPT-4当数据分析师&#xff0c;都…

聊一聊影响LCD屏背光效率的几个重要因素

前阶段&#xff0c;小白的一个朋友参加了一个面试。面试完和小白说到其技术面过程惨不忍睹。被提及原因时&#xff0c;主要还是因为面试者提出的问题&#xff0c;小白的朋友答复的可能不是很让面试官满意。出于好奇&#xff0c;小白问了问都存在哪些问题&#xff0c;其中一道便…

论文笔记:Graph neural networks: A review of methods and applications

1 GNN的设计pipeline 1.1 获取图结构 结构化场景 图结构在应用问题中是已知的 比如分子结构、物理系统非结构化场景 图结构在应用问题中是未知的 需要根据任务人为地建图 1.2 判断图的类型 & 尺寸 图的类型 有向图/无向图//异构图/同构图 图中的点和边类型是不是一样的…

Prometheus 简单介绍,部署

目录 Prometheus 介绍 功能介绍 Prometheus安装 安装介绍 prometheus.yml 文件介绍 prometheus实施安装 Prometheus常用命令参数有哪些 设置Prometheus-server开机自动启动 &#xff08;解释&#xff09; Prometheus简单启动页面介绍 node_exporte 是做什么的 安装n…

【个人笔记】真寻bot部署记录+远程postgreSQL访问+源码食用记录

安装 0. 系统配置 Centos v8.2 1. 安装 使用真寻bot https://github.com/zhenxun-org/zhenxun_bot-deploy bash <(curl -s -L https://raw.githubusercontent.com/zhenxun-org/zhenxun_bot-deploy/master/install.sh)选择1&#xff0c;安装go-cqhttp和zhenxun_bot&…

java boot项目读取yml配置信息

之前 我们讲过 boot的配置文件格式主要有三种 application.properties application.yml application.yaml 我们说推荐用 application.yml 其实从 xml 到 yml 都是要系统去读取他的配置信息 今天 我们就来写一下 在java中读取 yml的配置 这里 我在 yml中多加两个配置 代码如下…

LabView中顺序结构的使用

LabView中的顺序结构能够保证程序按照一定的顺序运行。LabView中的顺序结构分为平铺式顺序结构和层叠式顺序结构两种。 1 平铺式顺序结构 平铺式顺序结构包括一个或多个顺序执行的子程序框图&#xff0c;这种框图也被成为“帧”&#xff0c;程序按照帧为单位&#xff0c;以从…