2013-02-24 10 views
6

Próbuję zautomatyzować FFmpeg do remux wszystkie pliki wideo w danym katalogu do MKV. Obecnie używamRemux do MKV, ale dodaje wszystkie strumienie za pomocą FFmpeg

ffmpeg -i $INPUT -c copy $OUTPUT.mkv 

Jednak niektóre strumienie są pomijane w ten sposób - na przykład, jeśli istnieją 2 strumienie audio tylko 1 idzie do pliku wyjściowego.

Jak określić, że strumienie wszystkie z wejścia muszą być skopiowane na wyjście?

Ponieważ próbuję zautomatyzować FFmpeg, najlepiej byłoby, gdyby polecenie nie zmieniło się dla każdego pliku, tj. Ręczne określenie wszystkich strumieni przy pomocy -map wymagałoby ode mnie najpierw sparsowania każdego pliku. Zrobiłbym to, gdybym tego potrzebował, ale jeśli istnieje lepsze rozwiązanie, wolałbym to.

+0

Zgodnie z porozumieniem dotyczącym [własnej dyskusji w Meta] (http://meta.stackexchange.com/q/168740/159624), to pytanie powinno trafić do Superużytkownika. Głosowałem za migracją. – slhck

+0

Od http://meta.stackexchange.com/a/168743/170007 - * Rozwijanie aplikacji za pomocą FFmpeg.exe i pisanie skryptów w celu zautomatyzowania ich użycia → temat dla obu, ale więcej tematów dla SU *. Próbuję zautomatyzować ffmpeg, więc jest on tutaj dostępny, prawda? Aha, i dziękuję za odpowiedź :) – sashoalm

+0

Tak jak lubisz - myślę, że jest to granica, ponieważ nie ma w tym języku programowania, a jeśli to '$ INPUT' lub' input.mp4' nie robi tak naprawdę różnicy. Po prostu widziałem, że wiele z tych pytań zostało tutaj zamkniętych z niewłaściwych powodów, więc raczej je zmigruj, zanim zostaną usunięte w pewnym momencie :) Nie ma za co. – slhck

Odpowiedz

15

Jak określić, że wszystkie strumienie z wejścia muszą być skopiowane na wyjście?

Opcja -map może to zrobić, korzystając ze skrótu -map 0.

Na przykład

ffmpeg -i input.mkv -c copy -map 0:0 -map 0:2 output.mkv 

skopiować strumieniowi 0: 0 i 0: 2 do output.mkv.

ffmpeg -i input.mkv -c copy -map 0 output.mkv 

skopiować wszystko strumienie wejściowe od wejścia 0 (input.mkv) do wyjścia (nawet jeśli istnieje wiele wideo, audio lub strumieni napisów).

Wartość -map odpowiada liczbie wejściowego (0 jest pierwsze wejście, 1 jest drugie wejście, etc): Jeśli dodać dodatkowe wejście (-> input 1), a także do skopiowania całej zawartości , musisz dodać -map 1.

Możesz użyć ffprobe do analizy plików i zobacz, który strumień jest mapowany gdzie. Wypróbuj -fflags +genpts, jeśli pojawi się błąd unknown timestamp. Szczegółowy samouczek znajduje się pod adresem the FFmpeg Wiki page on the -map option.

+5

A jeśli pojawi się błąd "Nie można zapisać pakietu z nieznanym znacznikiem czasu", musisz dodać '-fflags + genpt' po poleceniu ffmpeg. Zobacz [ten błąd] (https://trac.ffmpeg.org/ticket/1979) i obejście tego problemu http://askubuntu.com/a/413968/135671 – erik

+0

Jeśli ktoś znajdzie tę odpowiedź, ale nie może znaleźć 'ffmpeg'; 'ffmpeg' nie jest już obecny w repozytoriach Ubuntu 14.04, ale jego' avconv' widelca robi to samo ('sudo apt-get install libav-tools'). – JeroenHoek

+0

@JeroenHoek Ponadto, kompilacje ffmpeg można pobrać z http://ffmpeg.org/download.html – slhck

Powiązane problemy