Краще відповідь , з поясненням, включаючи розумні пропозиції від 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 інструмент для виробництва аудіо / відео: вже обраний ОП, він особливо підходить для цієї роботи.
-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 - lossles, але частіше за все це призведе до збільшення розміру файлу через те, що .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 аудіо) з файлу, який має індексний номер 0, тобто відеофайл; тому його потрібно було чітко вибрати -map 0:1 -map 1.