Итак, я вроде принял это задание на работе, но я действительно не уверен, возможно ли это.
Мы собираемся создать веб-сайт, где пользователи смогут загружать видео со своих компьютеров и браузеров мобильных телефонов. Видеофайлы могут иметь широкий диапазон форматов изображения, ширину, высоту, кодекс и форматы файлов.
У меня будет доступ к ffmpeg из команды php exec на веб-сервере.
Можно ли использовать это для преобразования пользовательских файлов в один формат файла, который работает на компьютерах, Android и Iphone.
Требование заключается в том, что мы можем установить максимальную ширину, чтобы видео масштабировалось динамически, чтобы соответствовать высоте.
Кто-нибудь знает, можно ли это сделать, и сделать это в разумные сроки. Сделаем проект на 2 дня. И если так, то некоторые указатели в правильном направлении были бы хорошими.
Была та же проблема, но решена с помощью HandBrake с транскодером видео с открытым исходным кодом
Если вашей целью может быть только один формат файла, то я бы выбрал 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. Лучше сделать математику самостоятельно.