Конвертировать Mp4 в Mp3 с миниатюрой

8

Я могу конвертировать mp4 в mp3 в ffmpeg, но я не уверен, как добавить миниатюру видео.

В настоящее время есть это, чтобы преобразовать из mp4 в mp3

ffmpeg -i video.mp4 -acodec libmp3lame -metadata title=video -b:a 256 -f input.mp3

Должен ли я снова выполнить это через ffmpeg с помощью этой команды?

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

или есть ли способ использовать сложные фильтры для достижения этой цели?

Я знаю, что это работает для FLV, но, похоже, не работает для mp4

ffmpeg -i video.flv -i cover.jpg -map 0:a -map 1 -c:v copy -metadata title=video -b:a 256k out.mp3
nadermx
источник
Вы действительно хотите, чтобы преобразование автоматически установило миниатюру? Потому что в противном случае вы можете изменить это вручную, но я не уверен, что вы после этого. Если вы можете сделать это с FLV, но не с MP4, я бы просто сделал скрипт, который запускает обе команды.
RamonRobben
@RamonRobben Я пытаюсь избежать запуска ffmpeg дважды
nadermx
вы можете попробовать что-то вроде этого ffmpeg -i in.mp4 -i test.png -map 0: 0 -map 1: 0 -c copy -id3v2_version 3-метаданные: s: v title = "обложка альбома" -метаданные: s: v comment = "Cover (Front)" out.mp3 Я сам загружаю ffmpeg, чтобы начать тестирование с ним.
RamonRobben

Ответы:

3

Лучший ответ с объяснением, включающий умные предложения от slhck и Mulvya, лишенные ненужных параметров.

ffmpeg -i video.mp4 -i cover.jpg -acodec libmp3lame -b:a 256k -c:v copy -map 0:a:0 -map 1:v:0 output.mp3

ffmpeg инструмент для манипуляции аудио / видео: уже выбран OP, он особенно подходит для этой работы.

-i video.mp4 Первый входной файл: видео с аудио, которое мы хотим извлечь.

-i cover.jpg второй входной файл, изображение, которое мы хотим отобразить при воспроизведении полученного аудиофайла.

-acodec libmp3lame мы хотим создать файл .mp3, используя кодировщик LAME.

-b:a 256kэто устанавливает битрейт для звуковой дорожки равным 256 Кбит / с. Более разумным вариантом будет кодирование с переменной скоростью передачи битов с указанием параметра качества : -q:a 0запрашивается максимальное качество, при этом -q:a 4часто он представляет собой хороший компромисс между воспринимаемым качеством звука и скоростью передачи битов (и, следовательно, размером файла).

-c:v copyэто указывает на то, что видеопоток (изображение .jpg) не подлежит перекодированию, а должен быть скопирован как есть. Это полезно, чтобы избежать ненужной обработки и потенциальной потери качества при перекодировании в формат с потерями. В нашем случае без этого параметра изображение будет декодировано из .jpg и закодировано в .png, который, по-видимому, является собственным форматом, который выбирается по умолчанию. Это не будет означать потери качества, так как .png - это потери, но чаще всего это приводит к увеличению размера файла, потому что .jpg (с потерями) обычно предлагает лучшую степень сжатия.

-map 0:a:0это выбирает поток, который будет использоваться из первого ( 0:) входного файла: это должен быть первый ( :0) аудио ( a) поток, который он содержит.

-map 1:v:0это выбирает поток first ( :0) video ( v) из 1:входного файла second ( ).

output.mp3 имя этого параметра было выбрано хитро, чтобы уже предположить, что это должно быть имя, которое будет дано выходному звуковому файлу (.mp3) со встроенным изображением, которое мы хотим создать.

Оригинальный ответ

Это создает аудиофайл (.mp3) со статическим изображением, соединяя видео (.mp4) и картинку (.jpg) с моей свадьбы:

ffmpeg -i video.mp4 -i cover.jpg -acodec libmp3lame -metadata title=video -b:a 256k -map_metadata 0 -map 0:1 -map 1 output.mp3

См. Ffmpeg документацию по выбору входных потоков с помощью -map, которая является подходящей опцией здесь.

Сначала я просто запустил команду -map 0 -map 1и получил следующую информацию:

Stream mapping:
  Stream #0:0 -> #0:0 (h264 (native) -> png (native))
  Stream #0:1 -> #0:1 (aac (native) -> mp3 (libmp3lame))
  Stream #1:0 -> #0:2 (mjpeg (native) -> png (native))

Таким образом, я знал, что хочу поток 1(aac audio) из файла с индексным номером 0, т.е. видеофайла; поэтому он должен быть явно выбран с -map 0:1 -map 1.

simlev
источник
Я пробовал это, но это дает мне Stream map '0:1' matches no streams. To ignore this, add a trailing '?' to the map.
nadermx
Запустите его с ´-map 0 -map 1´ и посмотрите, какие есть доступные потоки.
simlev
Stream mapping: Stream #0:0 -> #0:0 (aac (native) -> mp3 (libmp3lame)) Stream #1:0 -> #0:1 (mjpeg (native) -> png (native))
nadermx
1
@nadermx Вы можете -map 0:a:0 -map 1:v:0выбрать первые аудио и видео потоки первого и второго файла соответственно.
Slhck
1
Избегайте кодирования ввода изображения, особенно с JPG. -c:v copy,
Gyan
2

Вы можете использовать VLC Media Player -

Шаг 1: Откройте VLC и выберите «Media». Нажмите на конвертировать / сохранить.

Шаг 2: В следующем появившемся окне выберите «Добавить» и выберите видеофайл (MP4) для преобразования.

Шаг 3: Затем нажмите стрелку вниз на «Конвертировать / Сохранить», затем нажмите «Конвертировать».

Шаг 4: В следующем появившемся окне убедитесь, что выбрана кнопка «Преобразовать». Перейдите к выбору типа аудиофайла, который вы хотите создать. В нашем случае это MP3-файл, который мы конвертируем в.

Шаг 5: Выберите выходной пункт назначения и нажмите «Старт». VLC начнет преобразование.

для добавления миниатюры вы можете обратиться по этой ссылке (объяснено очень хорошо).

AjaiVeer Сингх Сандху
источник