如何在 Node.js 中使用 ffmpeg2025年5月3日 | 阅读4分钟 将 FFmpeg 的功能与 Node.js 结合起来,处理音频和视频以进行各种多媒体活动,可以轻松地自动化复杂的流程。本文将引导我们了解在 Node.js 环境中安装和操作 FFmpeg 所需的步骤。 什么是 FFmpeg?它是一个用于流式传输、转换和录制音乐和视频的综合跨平台解决方案,即 FFmpeg。 Libavcodec 是音频/视频编解码器中最出色的库之一。 设置我们的 Node.js 项目首先,确保我们的计算机上安装了 npm 和 Node.js。如果没有,我们可以从官方 Node.js 页面获取它们。 为了开始一个新的 Node.js 项目,为其创建一个新目录 必须安装 fluent-ffmpeg 包,它提供了一种在 Node.js 中使用 FFmpeg 的简单方法 标准用法FFmpeg 将视频文件从一种格式转换为另一种格式的示例。 输出 ![]() 高级功能Node.js 中 ffmpeg() 函数的一些高级功能如下 1. 添加水印视频加水印是一种常见操作。下面是如何在 Node.js 中使用 FFmpeg 为视频添加水印 输出 ![]() 2. 从视频中提取音频此外,ffmpeg 也可用于从视频文件中提取音频。在此示例中,我们可以看到如何在 Node.js 中从视频中提取音频。 输出 ![]() 3. 使用元数据FFmpeg 也可用于读取和写入多媒体文件的元数据。此示例演示如何读取元数据 输出 Metadata: {
streams: [
{
index: 0,
codec_name: 'h264',
codec_long_name: 'H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10',
profile: 'High',
codec_type: 'video',
codec_time_base: '1/48',
codec_tag_string: 'avc1',
codec_tag: '0x31637661',
width: 1280,
height: 720,
coded_width: 1280,
coded_height: 720,
closed_captions: 0,
has_b_frames: 2,
sample_aspect_ratio: '1:1',
display_aspect_ratio: '16:9',
pix_fmt: 'yuv420p',
level: 31,
color_range: 'tv',
color_space: 'bt709',
color_transfer: 'bt709',
color_primaries: 'bt709',
chroma_location: 'left',
refs: 1,
is_avc: 'true',
nal_length_size: '4',
r_frame_rate: '24/1',
avg_frame_rate: '24/1',
time_base: '1/12288',
start_pts: 0,
start_time: '0.000000',
duration_ts: 588288,
duration: '47.900000',
bit_rate: '1305680',
nb_frames: '1150',
disposition: {
default: 1,
dub: 0,
original: 0,
comment: 0,
lyrics: 0,
karaoke: 0,
forced: 0,
hearing_impaired: 0,
visual_impaired: 0,
clean_effects: 0,
attached_pic: 0,
timed_thumbnails: 0
},
tags: {
creation_time: '2020-01-01T00:00:00.000000Z',
language: 'eng',
handler_name: 'VideoHandler'
}
},
{
index: 1,
codec_name: 'aac',
codec_long_name: 'AAC (Advanced Audio Codec)',
codec_type: 'audio',
codec_time_base: '1/44100',
codec_tag_string: 'mp4a',
codec_tag: '0x6134706d',
sample_fmt: 'fltp',
sample_rate: '44100',
channels: 2,
channel_layout: 'stereo',
bits_per_sample: 0,
r_frame_rate: '0/0',
avg_frame_rate: '0/0',
time_base: '1/44100',
start_pts: 0,
start_time: '0.000000',
duration_ts: 2110464,
duration: '47.861451',
bit_rate: '128000',
max_bit_rate: '128000',
nb_frames: '2087',
disposition: {
default: 1,
dub: 0,
original: 0,
comment: 0,
lyrics: 0,
karaoke: 0,
forced: 0,
hearing_impaired: 0,
visual_impaired: 0,
clean_effects: 0,
attached_pic: 0,
timed_thumbnails: 0
},
tags: {
creation_time: '2020-01-01T00:00:00.000000Z',
language: 'eng',
handler_name: 'SoundHandler'
}
}
],
format: {
filename: 'input.mp4',
nb_streams: 2,
nb_programs: 0,
format_name: 'mov,mp4,m4a,3gp,3g2,mj2',
format_long_name: 'QuickTime / MOV',
start_time: '0.000000',
duration: '47.900000',
size: '7939828',
bit_rate: '1305740',
probe_score: 100,
tags: {
major_brand: 'mp42',
minor_version: '0',
compatible_brands: 'mp42isom',
creation_time: '2020-01-01T00:00:00.000000Z',
encoder: 'HandBrake 1.3.3 2020061300'
}
}
}
写入元数据输出 ![]() 4. 错误处理任何程序都需要处理错误。我们可以监听 Fluent-ffmpeg 提供的许多事件来处理失败和其他重要状态 输出 ![]() 结论总而言之,fluent-ffmpeg 包提供了一个强大的工具包,用于处理各种媒体文件操作,使 FFmpeg 易于集成到我们的 Node.js 应用程序中。我们可以转换视频格式。它可以应用水印、提取音频流媒体或管理元数据变得简单。FFmpeg 和 Node.js 提供了一个强大的解决方案。掌握这些方法将使我们能够创建高效、高性能的程序,以优雅和适应性地处理多媒体文件。 |
我们请求您订阅我们的新闻通讯以获取最新更新。