Próbuję dodać napisy tekstowe do kontenera .mp4 za pomocą ffmpeg:
ffmpeg -i input.mp4 -i input.srt -map 0.0 -map 0.1 -map 1.0 output.mp4
Kiedy próbuję uruchomić tę linię, wyświetla mi się błąd:
Liczba map strumieni musi odpowiadać liczbie strumieni wyjściowych.
Jeśli spróbuję zmienić mp4 na mkv (chociaż mp4 obsługuje napisy tekstowe), tak:
ffmpeg -i input.mp4 -i input.srt -map 0.0 -map 0.1 -map 1.0 output.mkv
Prawidłowo odwzorowuje strumienie, ale wyświetla błąd:
Nie znaleziono kodera (identyfikator kodeka 94210) dla strumienia wyjściowego # 0.2
Kiedy uruchamiam
ffmpeg -codecs
Widzę, że kodek srt jest obsługiwany jako dekoder i koder, jednak nie jestem pewien, co jest używane do kodowania mp4 i mkv subs i czy muszę go włączyć, czy skompilować osobno.
-c:s copy
nie z-c:s mov_text
.UWAGA: To rozwiązanie „wypala napisy” w wideo, dzięki czemu każdy widz filmu będzie zmuszony je zobaczyć.
Użyj
libass
biblioteki (upewnij się, że twoja instalacja ffmpeg ma bibliotekę w konfiguracji--enable-libass
).Najpierw przekonwertuj napisy do
.ass
formatu:Następnie dodaj je za pomocą filtra wideo:
źródło
libass
rozszerzenia, jeśli ich brakuje w systemach Debian za pomocą `apt update && apt install libass-dev".Próbujesz multipleksować napisy jako strumień napisów. Jest to łatwe, ale dla MP4 (lub M4V) i MKV używana jest inna składnia. W obu przypadkach musisz określić kodek wideo i audio lub po prostu skopiować strumień, jeśli chcesz tylko dodać napisy.
MP4:
MKV:
źródło
Kontener MKV obsługuje kodeki wideo i audio Praktycznie wszystko, a także obsługuje napisy i menu DVD. Możesz więc po prostu skopiować kodeki z wejściowego wideo do wyjściowego wideo za pomocą kontenera MKV z napisami. Najpierw należy przekonwertować SRT do formatu napisów ASS
i osadzaj napisy ASS w wideo
Pracował również z plikiem VMW.
zobacz stronę wiki Porównanie formatów kontenerów
źródło
ffmpeg obsługuje
mov_text
koder napisów, który jest prawie jedynym obsługiwanym w kontenerze MP4 i odtwarzanym przez iTunes, Quicktime, iOS itp.Twoja linia brzmiałaby:
ffmpeg -i input.mp4 -i input.srt -map 0:0 -map 0:1 -map 1:0 -c:s mov_text output.mp4
źródło
Próbowałem użyć MP4Box do tego zadania, ale nie poradził sobie z M4V, z którym miałem do czynienia. Udało mi się osadzić SRT jako miękkie napisy z ffmpeg za pomocą następującego wiersza poleceń:
ffmpeg -i input.m4v -i input.srt -vcodec copy -acodec copy -scodec copy -map 0:0 -map 0:1 -map 1:0 -y output.mkv
Tak jak ty musiałem użyć pliku wyjściowego MKV - nie byłem w stanie utworzyć pliku M4V.
źródło
Podam prostą i ogólną odpowiedź, która działa z dowolną liczbą plików audio i napisów srt oraz szanuje metadane, które mogą zawierać kontener mkv . Więc nawet doda obrazy, które matroska może dołączyć jako załączniki (choć nie innego typu AFAIK) i przekonwertuje je na ścieżki; nie będziesz mógł oglądać, ale będą tam (możesz je zdemultować). Ach, a jeśli mkv ma rozdziały, to też mp4 .
Jak widać, chodzi o to
-map 0
, że mówi FFmpeg, aby dodał wszystkie ścieżki, w tym metadane, rozdziały, załączniki itp. Jeśli istnieje nierozpoznana "ścieżka" ( mkv pozwala na dołączenie dowolnego typu pliku), kończą się błędem.Możesz utworzyć prostą wiązkę
mkv2mp4.bat
, jeśli zwykle to robisz, aby utworzyć mp4 o tej samej nazwie co mkv . Byłoby lepiej z kontrolą błędów, inną nazwą wyjścia itp., Ale o co chodzi.Teraz możesz po prostu biegać
I utworzy „Wideo z napisami itp. Mp4” z maksymalną zawartością informacji.
źródło
Prosty przykład:
Zastąp tylko zmienne linux
źródło
To jest powód, dla którego mkv jest tak dobrym kontenerem, zwłaszcza teraz, gdy jest dojrzały:
źródło