Лучший ответ с объяснениями, включающий умные предложения от 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
выбирает первый (:0
) поток видео (v
) из второго (1:
:) входного файла.
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
.