「这是我参与11月更文挑战的第3天,活动详情查看:2021最后一次更文挑战」
ffmpeg 是强大的媒体文件转换工具,常用于转码,可选命令非常多,编码器、视频时长、帧率、分辨率、像素格式、采样格式、码率、裁剪选项、声道数等等。 更详细的请看雷神
想法
使用nodejs推流视频到本地服务器。
步骤
1.需要安装依赖node-media-server,fluent-ffmpeg ,node-media-server是一个node的流媒体服务,fluent-ffmpeg是可以在nodejs中使用ffmpeg命令的一个库。
2.引入模块并创建配置
const NodeMediaServer = require("node-media-server");
const ffmpeg = require('fluent-ffmpeg');
let command = ffmpeg();
const config = {
rtmp: {
port: 1935,
chunk_size: 60000,
gop_cache: true,
ping: 60,
ping_timeout: 30,
},
http: {
port: 8900,
allow_origin: "*",
},
};
3.创建服务并启动
let nms = new NodeMediaServer(config);
nms.run();
4.创建ffmpeg配置
let options = [
"-re",
"-i",
url,
"-vcodec",
"copy",
"-codec",
"copy",
"-f",
"flv",
]
let url = './2.mp4';//视频地址
//需要ffmpeg.exe包
command.outputOptions(options)
.setFfmpegPath("./ffmpeg.exe")
.save(url)
.on("start", function (e) {
console.log("stream is start: " + e);
})
.on("end", function (e) {
console.log("ffmpeg is end");
})
.on("error", function (err) {
console.log("ffmpeg is error! " + err);
});
5.使用node或者nodemon运行这个js文件就可以在播放器观看了可以使用阿里在线播放器播放http://127.0.0.1:8900/live/stream.flv也可以下载vlc播放器直接播放rtmp流,
推荐个相关工具:obs。
ffmpeg还可以直接推当前摄像头和麦克风的流更多请参考网上的帖子,用fluent-ffmpeg可以实现一个视频截图小工具。
saveThumbnail() {
ffmpeg(./2.mp4)
.setFfmpegPath("./ffmpeg.exe")
.noAudio()
.setStartTime(1)
.frames(1)
.save("./img.png");
}
fluent-ffmpeg与ffmpeg的参数相差不大详细的请去官网查看。 用ffmpeg可以直接在命令行加参数查看和更改视频的编码、格式,它是一个非常强大的工具。可以实现如:
1.获取视频的信息
ffmpeg -i video.avi
2.将图片序列合成视频
ffmpeg -f image2 -i image%d.jpg video.mpg
上面的命令会把当前目录下的图片(名字如:image1.jpg. image2.jpg. 等...)合并成video.mpg
3.将视频分解成图片序列
ffmpeg -i video.mpg image%d.jpg
上面的命令会生成image1.jpg. image2.jpg. ...
支持的图片格式有:PGM. PPM. PAM. PGMYUV. JPEG. GIF. PNG. TIFF. SGI
能实现太多太多的处理视频、音频的功能,更详细的请参考雷神的帖子。
结语
这只是初尝ffmpeg目前只会用一点皮毛。