Lepsza odpowiedź z wyjaśnieniem, zawierająca inteligentne sugestie slhck i Mulvya, pozbawiona nieistotnych parametrów.
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
narzędzie do manipulacji audio / wideo: już wybrane przez OP, jest szczególnie odpowiednie do tego zadania.
-i video.mp4
pierwszy plik wejściowy: wideo z dźwiękiem, który chcemy wyodrębnić.
-i cover.jpg
drugi plik wejściowy, obraz, który chcemy wyświetlić podczas odtwarzania wynikowego pliku audio.
-acodec libmp3lame
chcemy utworzyć plik .mp3, używając kodera LAME.
-b:a 256k
ustawia to bitrate dla ścieżki audio na stałą 256Kb / s. Mądrzejszą opcją byłoby kodowanie ze zmienną przepływnością, określając parametr jakości : -q:a 0
prosi o maksymalną jakość, a -q:a 4
często stanowi dobry kompromis między postrzeganą jakością dźwięku a przepływnością (a zatem i wielkością pliku).
-c:v copy
oznacza to, że strumienia wideo (obrazu .jpg) nie należy ponownie kodować, ale należy go skopiować. Jest to przydatne, aby uniknąć niepotrzebnego przetwarzania i potencjalnej utraty jakości podczas ponownego kodowania do formatu stratnego. W naszym przypadku bez tego parametru obraz zostałby zdekodowany z .jpg i zakodowany do .png, który najwyraźniej jest rodzimym formatem wybieranym domyślnie. Nie oznaczałoby to utraty jakości, ponieważ .png jest stratny, ale najczęściej powoduje wzrost rozmiaru pliku, z uwagi na fakt, że .jpg (stratny) ogólnie oferuje lepszy współczynnik kompresji.
-map 0:a:0
wybiera strumień, który ma być użyty z pierwszego ( 0:
) pliku wejściowego: musi to być pierwszy :0
( a
) strumień audio ( ), który zawiera.
-map 1:v:0
wybiera pierwszy strumień :0
wideo ( v
) z drugiego 1:
pliku wejściowego.
output.mp3
nazwa tego parametru została sprytnie wybrana, aby już zasugerować, że musi to być nazwa wyjściowego pliku audio (.mp3) z dołączonym obrazem, który chcemy utworzyć.
Oryginalna odpowiedź
Spowoduje to utworzenie pliku audio (.mp3) ze statycznym obrazem poprzez połączenie wideo (.mp4) i obrazu (.jpg) z mojego ślubu:
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
Zobacz dokumentację ffmpeg na temat wybierania strumieni wejściowych za pomocą -map
, która jest odpowiednią opcją tutaj.
Najpierw uruchomiłem komendę po prostu -map 0 -map 1
i otrzymałem te informacje:
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))
Tak więc wiedziałem, że chcę strumień 1
(audio AAC) z pliku, który ma numer indeksu 0
, tj. Plik wideo; dlatego musiał zostać wyraźnie wybrany za pomocą -map 0:1 -map 1
.