ffmpeg конвертирует любой пользовательский видеофайл для запуска на мобильных устройствах h264 mp4

Итак, я вроде принял это задание на работе, но я действительно не уверен, возможно ли это.

Мы собираемся создать веб-сайт, где пользователи смогут загружать видео со своих компьютеров и браузеров мобильных телефонов. Видеофайлы могут иметь широкий диапазон форматов изображения, ширину, высоту, кодекс и форматы файлов.

У меня будет доступ к ffmpeg из команды php exec на веб-сервере.

Можно ли использовать это для преобразования пользовательских файлов в один формат файла, который работает на компьютерах, Android и Iphone.

Требование заключается в том, что мы можем установить максимальную ширину, чтобы видео масштабировалось динамически, чтобы соответствовать высоте.

Кто-нибудь знает, можно ли это сделать, и сделать это в разумные сроки. Сделаем проект на 2 дня. И если так, то некоторые указатели в правильном направлении были бы хорошими.

1

Решение

Была та же проблема, но решена с помощью HandBrake с транскодером видео с открытым исходным кодом

https://handbrake.fr/

0

Другие решения

Если вашей целью может быть только один формат файла, то я бы выбрал mp4 baseline. (Однако некоторые браузеры не воспроизводят его, поэтому тег html предлагает несколько флагов источника, которые обычно включают в себя видео webm и ogg …)

С помощью ffprobe -show_streams $uploadedFile Вы можете получить размеры (и пропорции) файла. Используя математику, вы можете получить новые измерения в зависимости от ваших потребностей.

$newDim=$new_width.":".$new_height;
$output  = shell_exec("/usr/bin/ffmpeg -i $uploadedFile -f mp4 \
-c:a libfdk_aac -b:a 128k -c:v libx264 -vprofile baseline \
-movflags faststart -vf scale=$newDim $output");```

Вот разбивка:

f mp4              > format mp4
c:a libfdk_aac     > audio codec
c:v libx264        > video codec
vprofile baseline  > minimal codec usage for mobile
movflags faststart > put the moov atom at the beginning of file
$output            > should have '.mp4' as a file ending

Конечно, дьявол кроется в деталях (и количестве процессорных ядер, которые вы можете добавить в онлайн-конвертере), но, по крайней мере, это заставит вас работать.

Изменить: На самом деле ответил на вопрос. 🙂

Кстати, ffmpeg предлагает флаг vf: -vf scale=320,-1, но иногда это дает вам измерение, не делимое на 2, что приводит к ошибке в кодировке x264. Лучше сделать математику самостоятельно.

0

По вопросам рекламы [email protected]