Ffmpeg. Разделите 1ГБ на суммарную продолжительность всех видео и получите требуемый битрейт. Оставьте место для аудио, задайте получившийся битрейт в параметрах кодирования и должно всё получиться.
Спасибо, а вот, например, у меня есть видео размером 1.37 гб (video_size), длиною 1 час 30 минут (video_duration), его битрейт (video_bitrate) у меня тоже есть. Нужно уменьшить его размер до 1 гб (new_video_size). Аудио битрейт(audio_bitrate) и, исходя из длины видео, длина аудио дорожки тоже есть(video_duration). Можете, пожалуйста, набросать формулу, а то я сколько не делал - не получается, и пример уменьшение битрейта ffmpeg'ом. Я использовал ключ -b но не совсем корректно работало.
Моя формула:
узнаём размер аудио дорожки:
(video_duration) = 1 час 30 минут = 90 минут = 5400 секунд
(audio_size) = (video_duration)*(audio_bitrate)
узнаём какой будет размер видео дорожки без аудио дорожки:
(result_video_size) = (new_video_size)-(audio_size)
узнаём какой битрейт будет у финального видео:
(result_video_bitrate) = (result_video_size)/(video_duration)
Тоесть нам надо уменьшить битрейт видео с (video_bitrate) до (result_video_bitrate).
Пробовал так ffmpeg -y -i "video.flv" -b (result_video_bitrate) "video.flv"
Но как-то не задалось.
Sergey Lerg: получаю битрейт с помощью getVideoBitrate метода. В документации написано:
$movie->getVideoBitRate()
Вернёт скорость потока(битрейт) видео в битах в секунду.
Замечание : Работает только с файлами у которых постоянный битрейт
Результат есть - значит битрейт постоянный.
Sergey Lerg: как-то не задалось, при маленьком трейлере уменьшение произвело обрезку видео, что недопустимо, уменьшение качества или разрешения допустимо, обрезка - нет. А при большом файле размером 1.45 ГБ - ошибка:
[mpeg4 @ 04980920] timebase 104271/2500000 not supported by MPEG 4 standard, the maximum admitted value for the timebase denominator is 65535
Andrew_Lays: значит он тупо останавливает кодирование, когда лимит исчерпан. Тогда остаётся только экспериментировать с битрейтом. На сколько фактический битрейт отличается от заданного? Какая погрешность?
Sergey Lerg: короче, я понял, правильно будет так:
ffmpeg -i 1.flv -acodec copy -b:v 1000k -vcodec libx264 -y 2.flv
осталось высчитать какой битрейт выставлять, с чем собственно и проблема осталась.