Próbowałem usunąć niepotrzebne strumienie audio z pliku MKV (Matroska). Powodem, dla którego chcę to zrobić, jest uniknięcie konieczności ręcznego wybierania żądanego strumienia w programie Windows Media Player.
Plik wejściowy zawiera następujące informacje o ffmpeg:
Stream #0.0: Video: mpeg4, yuv420p, 704x396 [PAR 1:1 DAR 16:9], 29.98 tbr, 1k tbn, 29.98 tbc
Stream #0.1(eng): Audio: aac, 24000 Hz, 5.1, s16
Stream #0.2(jpn): Audio: aac, 24000 Hz, 5.1, s16
Stream #0.3(eng): Subtitle: 0x0000
Stream #0.4(eng): Subtitle: 0x0000
Stream #0.5: Attachment: 0x0000
Stream #0.6: Attachment: 0x0000
Ponieważ chcę strumieni 0, 1 i 3 (sub), moje polecenie ffmpeg wygląda następująco:
ffmpeg -i input.mkv -map 0:0 -map 0:1 -map 0:3 -vcodec copy -acodec libmp3lame -newsubtitle test.mkv
co dziwnie daje błąd:
At least one output file must be specified
Usuwanie napisów:
ffmpeg -i input.mkv -map 0:0 -map 0:1 -vcodec copy -acodec libmp3lame test.mkv
daje mi to:
Number of stream maps must match number of output streams
Wygląda na to, że tak naprawdę nie rozumiem, jak działa opcja „mapa”. Czy ktoś pomoże mi to rozgryźć?
--atracks
opcja już nie istnieje, a nie należy stosować albo--audio-tracks
albo--video-tracks
.Spróbuj
-f
wymusić określony format:źródło
Są tu naprawdę dwie osobne kwestie:
W pierwszym wierszu poleceń kolejność parametrów może być niepoprawna. Myślę, że
-newaudio
przełącznik musi znajdować się na końcu, po nazwie pliku wyjściowego.Drugi wiersz poleceń, „Usuwanie napisów”, ponieważ plik wejściowy zawiera napisy, musisz użyć
-sn
przełącznika, aby je usunąć. W przeciwnym razie wydaje się, że FFmpeg chce co najmniej jednego określonego na-map
liście.źródło
W pierwszym poleceniu nie określono, że test.mkv jest plikiem wyjściowym. Wygląda na to, że musisz zmienić tę część, aby była podobna
... -c copy test.mkv
lub określić kodek... -c:s copy test.mkv
.I nie jestem pewien, co
-newsubtitle
tam robi ta flaga. Ale jeśli masz plik z napisami, który chcesz dodać, powinieneś być w stanie zrobić kolejną flagę wejściową-i input.srt
. Zobacz ten link do tego.W drugim poleceniu wydaje mi się, że próbujesz zmapować strumień wideo i próbujesz go skopiować. Możesz więc spróbować usunąć
-vcodec copy
instrukcję i powinna ona po prostu działać. :)źródło
l
specyfikatora strumienia .