Я пытаюсь преобразовать .ogv
файлы в .mp4
, используя слой ffmpeg
на AWS Лямбда .
Я следовал учебник от людей в Serverless Framework для преобразования .mp4
в GIF
, и это сработало замечательно. Используя те же ffmpeg stati c build , (ffmpeg- git -amd64-stati c .tar.xz), я решил преобразовать файлы .ogv
в .mp4
файлы.
До сих пор я успешно загружал видео в S3 Bucket, получал лямбду для извлечения этого видео, делал что-то с видео с помощью двоичного файла ffmpeg
и копировал новый файл в S3.
Проблема:
Видео, которые создаются, не будут воспроизводиться.
точка данных 1: результирующие файлы от функции слишком малы.
Входной видеофайл имеет размер 1,3 МБ, а выходной - всего 256,0 КБ
точка данных 2: атом moov не найден .
После копирования результирующего видео с S3 на мой локальный компьютер, я пытаюсь воспроизвести, используя ffplay
, и получаю эту ошибку:
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x7fd613093400] moov atom not found
frank.mp4: Invalid data found when processing input
Насколько я могу я мог сказать, что атом moov должен содержать важные метаданные о .mp4
файлах.
Реализация:
Я использовал инфраструктуру Serverless для настройки инфраструктуры AWS .
Вот несколько разных ffmpeg
команд, которые я пробовал:
1-я попытка:
// convert to mp4!
spawnSync(
"/opt/ffmpeg/ffmpeg",
[
"-i",
`/tmp/${record.s3.object.key}`,
"-vcodec",
"libx264",
"-acodec",
"aac",
`/tmp/${record.s3.object.key}.mp4`
],
{ stdio: "inherit" }
);
2-я попытка:
// convert to mp4!
spawnSync(
"/opt/ffmpeg/ffmpeg",
[
"-i",
`/tmp/${record.s3.object.key}`,
`/tmp/${record.s3.object.key}.mp4`
],
{ stdio: "inherit" }
);
3-я попытка:
Я нашел этот подход в переполнении стека вопрос , и на плакате говорилось, что он работает для него.
// convert to mp4!
spawnSync(
"/opt/ffmpeg/ffmpeg",
[
'-i',
`/tmp/${record.s3.object.key}`,
'-codec:v',
'libx264',
'-profile:v',
'main',
'-preset',
'slow',
'-b:v',
'400k',
'-maxrate',
'400k',
'-bufsize',
'800k',
'-threads',
'0',
'-b:a',
'128k',
`/tmp/${record.s3.object.key}.mp4`
],
{ stdio: "inherit" }
);
Каждая из этих работ набухает моя локальная машина.
Если бинарный файл ffmpeg, который я использую, не был популярным (я видел его на нескольких сайтах, занимающихся связь с транскодированием на Lambda), я думаю, что это проблема со слоем ... Возможно.
Любое понимание будет с благодарностью. Спасибо.