Jawaban yang lebih baik , dengan penjelasan, memasukkan saran cerdas dari slhck dan Mulvya, tanpa parameter penting.
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 alat manupulasi audio / video: sudah dipilih oleh OP, sangat cocok untuk pekerjaan ini.
-i video.mp4 File input pertama: video dengan beberapa audio yang ingin kami ekstrak.
-i cover.jpg file input kedua, gambar yang ingin kami tampilkan ketika kami memutar file audio yang dihasilkan.
-acodec libmp3lame kami ingin membuat file .mp3, menggunakan pengode LAME.
-b:a 256kini mengatur bitrate untuk trek audio ke 256Kb / s konstan. Opsi yang lebih cerdas adalah mengkodekan dengan bitrate variabel, menentukan parameter kualitas : -q:a 0meminta kualitas maksimum, sementara -q:a 4seringkali merupakan kompromi yang baik antara kualitas audio yang dirasakan dan bitrate (dan karenanya, ukuran file).
-c:v copyini menunjukkan bahwa aliran video (gambar .jpg) tidak akan dideteksi ulang tetapi harus disalin sebagaimana adanya. Ini berguna untuk menghindari pemrosesan yang tidak perlu dan potensi kehilangan kualitas ketika memasukkan kembali ke format lossy. Dalam kasus kami, tanpa parameter ini gambar akan diterjemahkan dari .jpg dan disandikan ke .png, yang tampaknya adalah format asli yang dipilih secara default. Ini tidak akan mewakili penurunan kualitas karena .png adalah kerugian, tetapi lebih sering daripada tidak akan menyebabkan ukuran file meningkat, karena fakta bahwa .jpg (menjadi lossy) umumnya menawarkan tingkat kompresi yang lebih baik.
-map 0:a:0ini memilih aliran yang akan digunakan dari 0:file input pertama ( ): itu harus stream pertama ( :0) audio ( a) yang dikandungnya.
-map 1:v:0ini memilih streaming pertama ( :0) video ( v) dari 1:file input kedua ( ).
output.mp3 nama parameter ini dipilih secara licik agar sudah menyarankan bahwa ini harus menjadi nama yang akan diberikan ke file audio output (.mp3) dengan gambar yang dimasukkan yang ingin kita buat.
Jawaban asli
Ini membuat file audio (.mp3) dengan gambar statis dengan menyusun video (.mp4) dan gambar (.jpg) dari pernikahan saya:
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
Lihat dokumentasi ffmpeg tentang memilih stream input -map, yang merupakan opsi yang relevan di sini.
Saya pertama kali menjalankan perintah dengan sederhana -map 0 -map 1dan mendapat info ini:
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))
Jadi saya tahu saya ingin streaming 1(aac audio) dari file yang memiliki nomor indeks 0, yaitu file video; oleh karena itu harus dipilih secara eksplisit dengan -map 0:1 -map 1.