我正在树莓派上拍摄视频,并希望将原始h264文件转换为mp4文件,或者像使用命令行/ python一样将其包装为mp4。但是,我希望在Node JS中执行此操作。似乎有许多节点JS库在npm上使用raspberry pi的mp4-box库。但是,它们都没有适当的文档或似乎符合我项目的需求。我不知道我是否缺少某些东西,或者这是否不可能。
答案 0 :(得分:3)
没有将H.264编码的文件嵌入MP4容器中的直接方法,而无需从头开始真正构建整个文件结构。这个 可行,但是要做到这一点,您需要了解mp4容器格式(很大程度上基于Quicktime MOV容器)并使用TypedArrays
进行构建,这样您可以保存作为一个MP4文件(我创建了一个paste here,描述了容器文件的结构)。
另一种方法是从Node.js生成FFmpeg(或直接使用该软件)并提供H.264作为输入并将其保存为MP4文件。非常简单。该命令将类似于:
ffmpeg -i yourH264encodedFileHere -c:v copy mp4FileContainer.mp4
要从Node运行该命令,可以使用spawn
(请参见示例)。
这种裸骨方法的替代方法是安装并使用fluent-ffmpeg NPM module来完成所有繁重的工作。
var ffmpeg = require("fluent-ffmpeg");
var inFilename = "video.h264";
var outFilename = "video.mp4";
ffmpeg(inFilename)
.outputOptions("-c:v", "copy") // this will copy the data instead or reencode it
.save(outFilename);
一些注意事项:
ffmpeg.setFfmpegPath(pathToFFmpegBin)
。答案 1 :(得分:1)
尝试在pi 0上安装ffmpeg花费了两个多小时,并以错误告终,因此这是包装mp4的另一种方法:
#include <time.h>
clock_t start, end;
double cpu_time_used;
start = clock();
std::this_thread::sleep_for (std::chrono::seconds(2));
end = clock();
cpu_time_used = ((double) (end - start)) / CLOCKS_PER_SEC;
sudo apt install -y gpac
调用exec
命令MP4Box
答案 2 :(得分:-1)
了解mp4(例如mkv)是一个容器非常重要。您可以将视频,音频,字幕“图层”添加到这些容器中。 H.264已经是压缩格式,它不是原始视频格式。