Я использую ffmpeg, чтобы добавить JPG в MP4, чтобы сделать MP4.
Поскольку для создания видео используется только одно изображение, мне интересно, есть ли способ уменьшить размер видео?
Команда:
$ ffmpeg -loop 1 -i image.jpg -i audio.mp3 -shortest -c:a copy output.mp4
Результаты:
image.jpg
= 26,7 КБ (изображение не очень четкое)audio.mp3
= 64,6 млн (54 минуты)output.mp4
= 80.6M (результат видео не очень четкий, музыка все еще хорошая)
Это разумный размер для MP4?
Ответы:
Для загрузки на YouTube
H.264: самые маленькие файлы
Этот метод использует libx264 для кодирования видео H.264. Это медленнее, чем метод потокового копирования ниже, но потенциально выдает файл меньшего размера.
Потоковое копирование: самый быстрый процесс
Этот метод просто потоковое копирование (без кодирования) изображения в контейнер MKV. Это очень быстро, но если размер важен, чем приведенный выше метод может создать файл меньшего размера.
YouTube принимает практически все, поэтому эти команды используют несколько приемов для ускорения кодирования или уменьшения размера файла и поддержания высокого качества, поскольку YouTube перекодирует все, что вы ему дадите. Возможно, вашему плееру это не понравится, но YouTube это понравится.
В этих примерах используется очень низкая частота кадров, которая должна обрабатываться быстрее, чем по умолчанию 25 кадров в секунду.
Самая широкая совместимость для любого игрока
Это должно играть практически на всем, кроме очень древних устройств (измените
-profile:v main
на,-profile:v baseline
если это так).Если ваш аудиовход уже AAC, измените
-c:a aac
на,-c:a copy
чтобы избежать ненужного перекодирования.Время кодирования будет больше, а размер файла будет больше, чем приведенные выше команды YouTube.
См. FFmpeg Wiki: H.264 для получения дополнительной информации.
источник
Unrecognized option 'preset'. Error splitting the argument list: Option not found
ffmpeg
команду и полный вывод консоли из команды, а затем укажите ссылку в комментарии.Только с той информацией, которую вы предоставили, я могу придумать.
Пойдем по частям:
То, о чем вы говорите, это кадры в секунду (fps), а не битрейт. И ты прав в концепции. Бининг только одного неподвижного изображения 1 кадр / с не будет проблемой.
В этом случае размер изображения не будет иметь значительного веса, потому что мы имеем дело только с одним неподвижным изображением. Если бы это было видео высокого качества, то это другая проблема.
Разрешение, которое вы говорите, это 1280x720.
Я не вижу смысла в
-loop 1
опции здесь, это только замедлит процесс. Вы использовали,-shortest
потому что файл имеет более 1 входного потока? Если нет, то нет причин использовать его. Поскольку вы использовали,-acodec copy
я должен предположить, что вы не хотите перекодировать его.Для вывода 720p 1fps без перекодирования и не касаясь битрейта:
ffmpeg -framerate 1 -i input.mp3 -i cover.jpg -c:a copy -s 1280x720 output.mp4
Запишите случай, когда у него более одного входного потока, и вы хотите, чтобы ffmpeg завершил кодирование на самом коротком потоке:
ffmpeg -framerate 1 -i input.mp3 -i cover.jpg -c:a copy -s 1280x720 -shortest output.mp4
Теперь, если вам нужно изменить битрейт (скажем, 1024k в качестве примера);
ffmpeg -framerate 1 -i input.mp3 -i cover.jpg -c:a copy -b:v 1024k -bufsize 1024k -s 1280x720 output.mp4
Смотрите: Ограничить выходной битрейт
Обратите внимание, что если вам все равно нужно видео меньшего размера, вам придется пожертвовать качеством, чтобы достичь этого. И другие способы сделать это включают перекодирование со сжатием с потерями.
Исходя из того, что вы говорите, информации, которую вы предоставляете, и того, что вы пытаетесь сделать, я думаю, что ваша цель - встроить обложку альбома в mp3. Если это ваша цель, это будет лучше соответствовать вашим требованиям:
ffmpeg -i input.mp3 -i cover.jpg -map_metadata 0 -map 0 -map 1 output.mp3
Если здесь ничего не соответствует вашим запросам, пожалуйста, дайте больше информации.
источник
-framerate
в качестве параметра ввода и об удалении вывода-r
: в противном случае будет использоваться стандартная частота кадров ввода 25, а затемffmpeg
будут пропущены кадры-r 1
. Если вы просто объявите входную частоту кадров, то на выходе будет использоваться та же частота кадров.