Краще відповідь , з поясненням, включаючи розумні пропозиції від 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
.