Конвертировать или обернуть файл h264 в mp4 с помощью Node JS - PullRequest
0 голосов
/ 03 сентября 2018

Я снимаю видео на Raspberry Pi и собираюсь преобразовать необработанный файл h264 в файл mp4 или, возможно, обернуть его в mp4, как это делается с помощью командной строки / Python. Я, однако, ищу это в NodeJS. Кажется, есть много библиотек JS для узлов, которые используют библиотеку mp4-box Raspberry Pi на npm. Тем не менее, ни один из них не имеет надлежащей документации или кажется, чтобы соответствовать потребностям моего проекта. Я не знаю, упускаю ли я что-то или это невозможно.

Ответы [ 2 ]

0 голосов
/ 03 сентября 2018

Нет прямого способа встроить файл в кодировке H.264 в контейнер MP4 без фактического построения всей файловой структуры с нуля. Это выполнимо , но для этого вам нужно понять формат контейнера mp4 (который в значительной степени основан на контейнере Quicktime MOV) и построить его, используя TypedArrays, в результате чего вы можете сохранить его как Файл MP4 (я создал вставку здесь , описывающую структуру файла контейнера).

Альтернативный подход состоит в том, чтобы порождать FFmpeg из Node.js (или просто использовать это программное обеспечение напрямую) и предоставлять H.264 в качестве входных данных и сохранять его в виде файла MP4. Это довольно просто. Команда будет выглядеть примерно так:

ffmpeg -i yourH264encodedFileHere -c:v copy mp4FileContainer.mp4

Для запуска этого из узла можно использовать spawn (см. Пример).

Альтернативой этому голому подходу является установка и использование модуля fluent-ffmpeg NPM , который выполняет всю тяжелую работу.

* * Пример тысяча двадцать-одина * * тысяча двадцать-дв
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 должен быть предварительно установлен и доступен в глобальном пути. Если вы этого не хотите, вместо этого вы можете использовать ffmpeg.setFfmpegPath(pathToFFmpegBin).
  • Чтобы установить FFmpeg на RPI, этот ресурс может быть полезен.
0 голосов
/ 03 сентября 2018

Очень важно знать, что mp4 (например, mkv) является контейнером. Вы можете добавить видео, аудио, субтитры «слой» в эти контейнеры. И H.264 - это уже сжатый формат, а не формат необработанного видео.

...