ffmpeg mp3 + jpg = mp4 практическое руководство делает видео меньшим

Привет я использую ffmpeg для добавления a.jpg к an.mp3 для создания mp4

Как существует только одно изображение, добавленное к видео. Я задаюсь вопросом, существует ли способ уменьшить размер видео, например, вызвать скорость передачи / второй = 1 вместо 28?

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

Обновленный:

a.jpg = 26.7K (image not so clear)
a.mp3 = 64.6M (54 minutes)
a.mp4 = 80.6M (video result is not so clear, music still good)

И вот cmd строка:

$ ffmpeg -loop 1 -i a.jpg -i a.mp3 -shortest -acodec copy a.mp4

И я сделал другой тест с разумным размером изображения приемлемого качества видео:

a.jpg = 151K
a.mp3 = 5.1M (5 minutes)
a.mp4 = 9.2M

И вот выходной результат:

enter image description here

Действительно ли это - разумный размер для mp4? Размер изображения имеет большое значение? Я должен изменить размер jpg к 1 080 * 720 и установить дополнительные настройки в ffmpeg для вывода как 720 пунктов (что ffmpeg устанавливает затем :)?

20
задан 5 January 2017 в 15:37

2 ответа

Для загрузки на YouTube

H.264: файлы наименьшего размера

Этот метод использует libx264 для кодирования видео H.264. Он медленнее, чем метод потокового копирования ниже, но потенциально может выводить файл меньшего размера.

ffmpeg -loop 1 -framerate 1 -i image.jpg -i music.mp3 \
-c:v libx264 -preset veryslow -crf 0 -c:a copy -shortest output.mkv

Копирование потока: самый быстрый процесс

Этот метод просто поток копирует (без кодирования) изображение в MKV контейнер. Это очень быстро, но если размер важен, то указанный выше метод может привести к уменьшению файла.

ffmpeg -loop 1 -framerate 1 -i image.jpg -i music.mp3 -c copy -shortest output.mkv
  • YouTube принимает практически все, поэтому эти команды используют несколько приемов, чтобы ускорить кодирование или уменьшить размер файла и сохранить качество высокий, потому что YouTube перекодирует все, что вы ему дадите. Вашему плееру это, вероятно, не понравится, но YouTube понравится.

  • В этих примерах используется очень низкая частота кадров, которая должна обрабатываться быстрее, чем значение по умолчанию 25 кадров в секунду.


Самая широкая совместимость для любого плеера

ffmpeg -loop 1 -i image.png -i music.mp3 -vf "scale='min(1280,iw)':-2,format=yuv420p" \
-c:v libx264 -preset medium -profile:v main -c:a aac -shortest -movflags +faststart output.mp4
  • Это должно воспроизводиться практически на чем угодно, кроме очень старых устройств (измените -profile: v main на -profile: v baseline , если это так).

  • Если ваш аудиовход уже имеет формат AAC затем измените -c: a aac на -c: a copy , чтобы избежать ненужного перекодирования.

  • Время кодирования будет больше, а размер файла будет больше, чем у команд YouTube выше.

  • См. FFmpeg Wiki: H.264 для получения дополнительной информации.

25
ответ дан 23 November 2019 в 04:26

Я могу придумать только ту информацию, которую вы предоставили.

Давайте разберемся по частям:

Поскольку к видео добавлено только одно изображение. Мне интересно, есть ли способ уменьшить размер видео, например, принудительно установить битрейт в секунду = 1 вместо 28?

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

То, о чем вы говорите, это кадров в секунду (fps) , а не битрейт. И вы правы в концепции. Сделайте всего одно неподвижное изображение 1 кадр / с - не проблема.

Это разумный размер для mp4? Имеет ли значение размер изображения?

В этом случае размер изображения не будет иметь большого веса, потому что мы имеем дело только с одним неподвижным изображением. Если бы это было высококачественное видео, то это была бы другая проблема.

Следует ли мне изменить размер jpg до 1080 * 720 и сделать дополнительные настройки в ffmpeg для вывода в формате 720p (тогда каковы настройки ffmpeg :)?

Разрешение вы говорите, что это 1280x720.

Я не вижу здесь смысла в параметре -loop 1 , это только замедлит процесс. Вы использовали -shortest , потому что у файла более 1 входного потока? Если нет, то нет причин использовать его. Поскольку вы использовали -acodec copy , я должен предположить, что вы не хотите его перекодировать.

Для вывода 720p 1 кадр / с без перекодирования и без изменения битрейта:

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

См .: Ограничить выходной битрейт

-c: a copy = Копировать входной аудиопоток, чтобы мы не перекодировали его.

-b: v = Указанный битрейт (не совсем) постоянный.

- bufsize = Это интервал, в котором вычисляется средний битрейт. Означает самое низкое изображение с большим количеством потерь, но более точное битрейт согласно указанному в -b: v .

-s = Фактический размер видеовыхода.

-framerate = Входная частота кадров, которую мы хотим, чтобы вывод будет использовать.

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

Судя по тому, что вы говорите, информацию, которую вы предоставляете, и то, что вы пытаетесь сделать, я думаю, ваша цель - встроить обложку альбома в mp3. Если это ваша цель, это лучше соответствует вашим требованиям:

ffmpeg -i input.mp3 -i cover.jpg -map_metadata 0 -map 0 -map 1 output.mp3

-map_metadata = Спецификатор метаданных ffmpeg для вывода файла из файла. В этом случае ( ноль ) глобальные метаданные.

-map 0 = Входной поток 1 (аудио).

-map 1 = Входной поток 2 (изображение).

Если здесь ничего не подходит для ваших запросов, дайте дополнительную информацию.

4
ответ дан 23 November 2019 в 04:26

Другие вопросы по тегам:

Похожие вопросы: