Konwertuj MP4 na MP3 z miniaturą

8

Jestem w stanie przekonwertować mp4 na mp3 w ffmpeg, ale nie jestem pewien, jak dodałbym miniaturę wideo.

Obecnie mają to do konwersji z MP4 na MP3

ffmpeg -i video.mp4 -acodec libmp3lame -metadata title=video -b:a 256 -f input.mp3

Czy musiałbym wtedy uruchomić to polecenie ffmpeg za pomocą tego polecenia?

ffmpeg -i input.mp3 -i cover.jpg -map_metadata 0 -map 0 -map 1 output.mp3

czy jest jakiś sposób na użycie złożonych filtrów, aby osiągnąć ten jeden przebieg?

Wiem, że to działa na FLV, ale wydaje się, że nie działa na mp4

ffmpeg -i video.flv -i cover.jpg -map 0:a -map 1 -c:v copy -metadata title=video -b:a 256k out.mp3
nadermx
źródło
Czy naprawdę chcesz, aby konwersja automatycznie ustawiała miniaturę? Bo inaczej możesz to zmienić ręcznie, ale nie jestem pewien, czy później. Jeśli możesz to zrobić za pomocą FLV, ale nie MP4, po prostu stworzę skrypt, który uruchamia obie komendy.
RamonRobben
@RamonRobben Staram się unikać konieczności dwukrotnego uruchamiania ffmpeg
nadermx
możesz spróbować czegoś takiego: ffmpeg -i in.mp4 -i test.png -map 0: 0 -map 1: 0 -c copy -id3v2_version 3 -metadata: s: v title = "Cover album" -metadata: s: v comment = „Cover (Front)” out.mp3 Sam ściągam ffmpeg, aby rozpocząć testowanie.
RamonRobben

Odpowiedzi:

3

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 256kustawia 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 0prosi o maksymalną jakość, a -q:a 4często stanowi dobry kompromis między postrzeganą jakością dźwięku a przepływnością (a zatem i wielkością pliku).

-c:v copyoznacza 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:0wybiera 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:0wybiera pierwszy strumień :0wideo ( 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 1i 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.

simlev
źródło
Próbowałem tego, ale daje mi to Stream map '0:1' matches no streams. To ignore this, add a trailing '?' to the map.
nadermx
Uruchom go z ´-map 0 -map 1´ i zobacz, jakie są dostępne strumienie.
simlev
Stream mapping: Stream #0:0 -> #0:0 (aac (native) -> mp3 (libmp3lame)) Stream #1:0 -> #0:1 (mjpeg (native) -> png (native))
nadermx
1
@nadermx Możesz zrobić, -map 0:a:0 -map 1:v:0aby wybrać pierwszy strumień audio i wideo odpowiednio pierwszego i drugiego pliku.
slhck
1
Unikaj kodowania obrazu wejściowego, szczególnie w JPG. -c:v copy.
Gyan
2

możesz skorzystać z odtwarzacza multimedialnego VLC -

Krok 1: Otwórz VLC i wybierz „Media”. Kliknij konwertuj / zapisz.

Krok 2: W następnym oknie, które się pojawi, wybierz „dodaj” i wybierz plik wideo (MP4) do konwersji.

Krok 3: Następnie kliknij strzałkę w dół na „Konwertuj / Zapisz”, a następnie kliknij „Konwertuj”.

Krok 4: W następnym oknie, które się pojawi, upewnij się, że jest wybrany przycisk „Konwertuj”. Kontynuuj, aby wybrać typ pliku audio, który chcesz utworzyć. W naszym przypadku konwertujemy plik MP3.

Krok 5: Wybierz miejsce docelowe wydruku, a następnie naciśnij „Start”. VLC rozpocznie konwersję.

w celu dodania miniatury możesz skorzystać z tego linku (bardzo dobrze wyjaśnione).

AjaiVeer Singh Sandhu
źródło