Câu trả lời tốt hơn , với lời giải thích, kết hợp các đề xuất thông minh từ slhck và Mulvya, tước bỏ các tham số không cần thiết.
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
công cụ quản lý âm thanh / video: đã được OP chọn, nó đặc biệt phù hợp với công việc này.
-i video.mp4
tập tin đầu vào đầu tiên: một video với một số âm thanh mà chúng tôi muốn trích xuất.
-i cover.jpg
tệp đầu vào thứ hai, một hình ảnh mà chúng tôi muốn hiển thị khi chúng tôi phát tệp âm thanh kết quả.
-acodec libmp3lame
chúng tôi muốn tạo tệp .mp3, sử dụng bộ mã hóa LAME.
-b:a 256k
cái này đặt bitrate cho rãnh âm thanh thành 256Kb / s không đổi. Tùy chọn thông minh hơn sẽ là mã hóa với tốc độ bit thay đổi, chỉ định tham số chất lượng : -q:a 0
yêu cầu chất lượng tối đa, trong khi -q:a 4
thường thể hiện sự thỏa hiệp tốt giữa chất lượng âm thanh và bitrate nhận biết (và do đó, kích thước tệp).
-c:v copy
điều này chỉ ra rằng luồng video (hình ảnh .jpg) không được mã hóa lại mà phải được sao chép như hiện tại. Điều này rất hữu ích để tránh xử lý không cần thiết và mất chất lượng tiềm năng khi mã hóa lại thành định dạng mất dữ liệu. Trong trường hợp của chúng tôi, nếu không có tham số này, hình ảnh sẽ được giải mã từ .jpg và được mã hóa thành .png, rõ ràng là định dạng gốc được chọn theo mặc định. Điều này sẽ không thể hiện sự mất chất lượng vì .png là sự mất mát, nhưng thường xuyên hơn sẽ không làm cho kích thước tệp tăng lên, do thực tế là .jpg (bị mất) thường cung cấp tốc độ nén tốt hơn.
-map 0:a:0
cái này chọn luồng được sử dụng từ 0:
tệp đầu vào ( ) đầu tiên : nó phải là luồng :0
âm thanh ( a
) đầu tiên mà nó chứa.
-map 1:v:0
cái này chọn luồng :0
video ( v
) đầu tiên ( ) từ 1:
tệp đầu vào thứ hai ( ).
output.mp3
tên của tham số này đã được chọn một cách khéo léo để đề xuất rằng đây phải là tên được đặt cho tệp âm thanh đầu ra (.mp3) với hình ảnh kết hợp mà chúng tôi muốn tạo.
Câu trả lời gốc
Điều này tạo ra một tệp âm thanh (.mp3) với một hình ảnh tĩnh bằng cách ghép một video (.mp4) và một hình ảnh (.jpg) từ đám cưới của tôi:
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
Xem tài liệu ffmpeg về cách chọn luồng đầu vào -map
, đây là tùy chọn có liên quan ở đây.
Lần đầu tiên tôi chạy lệnh đơn giản -map 0 -map 1
và nhận được thông tin này:
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))
Vì vậy, tôi biết tôi muốn truyền phát 1
(âm thanh aac) từ tệp có số chỉ mục là 0
, tức là tệp video; do đó nó phải được chọn rõ ràng với -map 0:1 -map 1
.