Лучший ответ с объяснением, включающий умные предложения от 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
.