Mogę z powodzeniem połączyć wiele plików za pomocą następującego polecenia:
ffmpeg -f concat -i input.txt -codec copy output.mp4
Jedynym problemem związanym z tym poleceniem jest to, że musisz odczytać ścieżki plików z pliku tekstowego o nazwie input.txt o następującej treści:
file 'C:\Users\fabio\Downloads\Super\Sharks\01.mp4'
file 'C:\Users\fabio\Downloads\Super\Sharks\02.mp4'
file 'C:\Users\fabio\Downloads\Super\Sharks\03.mp4'
Czy istnieje sposób na osiągnięcie tego samego celu bez konieczności odczytywania ścieżek plików z pliku? Próbowałem następujących bez powodzenia:
ffmpeg -f concat -i file "C:\a\b\01.mp4" file "C:\a\b\02.mp4" -codec copy output.mp4
ffmpeg -f concat -i "C:\a\b\01.mp4" "C:\a\b\02.mp4" -codec copy output.mp4
Czy muszę użyć innego polecenia?
command-line
ffmpeg
Fabio Delarias
źródło
źródło
Odpowiedzi:
Aktualizacja 2019:
Jak wspomniano w komentarzach, przepełnienie stosu zawiera doskonały opis dostępnych opcji konkatenacji, a także omówienie używanej metody w zależności od typów używanych plików:
Jak połączyć dwa pliki MP4 za pomocą FFmpeg?
Oryginalna odpowiedź 2016:
Powinieneś być w stanie użyć metody protokołu konkat do łączenia plików:
Ponadto instrukcja FFmpeg omawia metodę specjalnie dla plików MP4, aby bezstratnie połączyć je, ale wymaga utworzenia plików tymczasowych (lub nazwanych potoków):
źródło
output.mp4
.Możesz zamienić plik na listę, wysyłając listę do
stdout
i czytając listęstdin
przez ffmpeg:źródło
Nie, wydaje się, że nie ma możliwości użycia demultipera konkatacji ffmpeg w jednym wierszu poleceń bez włamania. Musisz utworzyć wejściowy plik tekstowy z listą plików. Myślałem, że to dziwne, może ktoś doda to do FFMpeg w późniejszym terminie.
Akceptowana odpowiedź na to pytanie wykorzystuje protokół konkat, a nie demuxer konkat, o co poprosił OP.
źródło
Nadal możesz to zrobić w skrypcie bez zmiany polecenia. Coś jak:
$$ rozwija się do pid powłoki wykonującej polecenie, więc nazwa pliku będzie inna przy każdym uruchomieniu. więc możesz użyć $$. txt, jeśli wolisz. Albo coś innego...
Możesz także użyć tutaj plików, aby dodać do pliku wiązkę danych:
bash Podstawianie zmiennych działa, więc możesz programowo określić zawartość pliku, nie trzeba go naprawiać. Cały czas osadzam tego rodzaju rzeczy w pętlach. Wreszcie przekierowanie działa tak samo jak powyżej, więc> $$. Tmp zostaje obcięte, a następnie zapisuje, >> $$ .tmp dodaje.
źródło