【NodeJs】使用ffmpeg将视频webm转换为mp4
创始人
2024-06-01 18:56:12
0

使用Chrome浏览器录制视频文件是webm格式,但是很多媒体播放器是不支持的,不利于分享,需要转换为mp4格式才行,接下来给大家讲

ffmpeg

ffmpeg是什么呢,

  • 一个免费开源的视频转换工具,
  • 一款音视频编解码工具,
  • 一组音视频编解码开发套件,

可点此ffmpeg官方网站前往下载,按照自己的操作系统选择下载,

  • 这里给一个下载点🔗传送门

如下载的是一个压缩包ffmpeg-6.0-essentials_build.zip文件,解压后,打开btn文件夹,如下图
在这里插入图片描述

主要是ffmpeg.exe文件

CMD

在对应的文件夹下,鼠标右键选择打开CMD终端,然后执行以下命令

.\ffmpeg -version

输出版本信息,如下表示正常
在这里插入图片描述

转换视频

接下来,开始转换视频,

例如,把文件名为111.webm转换为111.mp4,就输入以下命令执行,

.\ffmpeg -i 111.webm 111.mp4

输出如下,看到在持续打印中,需要等待,打印到最后就算处理完成
在这里插入图片描述

处理完成,就查看文件夹有多了一个111.mp4文件,打开看看是否播放正常

更多ffmpeg命令,可参考这里的文章 使用ffmpeg将webm转换为mp4

遇到错误

如果输出错误,情况可能如下

[libx264 @ 00000212a6ea0700] height not divisible by 2 (1080x951)
[vost#0:0/libx264 @ 000001cb76fa1000] Error initializing output stream: Error while opening encoder for output stream #0:0 - maybe incorrect parameters such as bit_rate, rate, width or height
Conversion failed!

问题参考来源:FFMPEG (libx264) “height not divisible by 2”

导致错误原因是,原视频尺寸(分辨率)必须是偶数,否则会出错,

估计是,用于裁剪缩放尺寸,精度不容有差错,是比较严格,

这样做,中间加上配置参数pad,命令如下,自动纠正分辨率,即可解决

.\ffmpeg -i 111.webm -vf "pad=ceil(iw/2)*2:ceil(ih/2)*2" 111.mp4

还可以,加上配置参数scale=2:720,试试按比例改分辨率

Node

电脑有安装Node才能用,

如果不想一直手动输入,处理业务比较多的话,试试写个Node应用方式执行,可以批处理转换,

例如,实现一键自动处理,写一个文件webm_to_mp4.js,关键代码如下

//导入一些模块...
const cp = require('child_process');
//调用的exe文件名...
const ExeName = 'ffmpeg.exe';
const Label = '转换耗时';
//执行exe
function execCommand(source,target,callback){let args = ['-i', source, '-vf','"pad=ceil(iw/2)*2:ceil(ih/2)*2"', target];let command = `.${PATH_DIV}lib${PATH_DIV+ExeName} ${args.join(' ')}`;cp.exec(command,callback)
}//在终端输入
rl.createInterface({input:process.stdin,output:process.stdout
}).question('输入(粘贴)要处理的webm视频文件地址',(answer)=>{if(answer.length<1) return;console.time(Label);let index = answer.lastIndexOf(PATH_DIV);if (index<1) throw new Error('input error'+answer);let path = answer.substring(0,index);let source = answer;let target = path+PATH_DIV+answer.substring(index+1).replace(/\.webm$/,'.mp4');//检查文件是否存在checkFileExists(source);checkFileExists(target,true);console.log('请等待...');execCommand(source, target,(error,stdout,stderr)=>{if (error) {console.log('遇到错误!',{ error, stdout, stderr });}else {console.log('生成成功!',{ stdout, stderr });}console.timeEnd(Label);})
});
console.log('正在执行...')

转换视频

打开CMD终端,执行node命令如下,运行正确会提示只粘贴一个要转换的视频文件地址即可,等待处理完成

node webm_to_mp4

到此结束,觉得文章有帮助,记得点个赞哦。

相关内容

热门资讯

【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
AWSECS:访问外部网络时出... 如果您在AWS ECS中部署了应用程序,并且该应用程序需要访问外部网络,但是无法正常访问,可能是因为...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
北信源内网安全管理卸载 北信源内网安全管理是一款网络安全管理软件,主要用于保护内网安全。在日常使用过程中,卸载该软件是一种常...
AWSElasticBeans... 在Dockerfile中手动配置nginx反向代理。例如,在Dockerfile中添加以下代码:FR...
AsusVivobook无法开... 首先,我们可以尝试重置BIOS(Basic Input/Output System)来解决这个问题。...
ASM贪吃蛇游戏-解决错误的问... 要解决ASM贪吃蛇游戏中的错误问题,你可以按照以下步骤进行:首先,确定错误的具体表现和问题所在。在贪...
月入8000+的steam搬砖... 大家好,我是阿阳 今天要给大家介绍的是 steam 游戏搬砖项目,目前...