Scal wiele filmów za pomocą pojedynczego wiersza polecenia ffmpeg w określonym czasie, bez cięcia go jeden po drugim i scalania

5

Mam 15 plików wideo, które chcę scalić z ffmpeg. Chcę zaoszczędzić czas, łącząc wszystkie pliki wideo w jednym wierszu polecenia, a nie wycinaj jeden po drugim i scalaj. Dzięki.

Ridwan
źródło

Odpowiedzi:

9

Użyj demuxera konkat .

Najpierw utwórz plik tekstowy z nazwami plików.

file '1.mp4'
file '2.mp4'
file '3.mp4'
...
file '13.mp4'
file '14.mp4'
file '15.mp4'

Następnie uruchom polecenie concat.

ffmpeg -f concat -i textfile -c copy -fflags +genpts merged.mp4

Aby to zadziałało, wszystkie filmy powinny mieć takie same właściwości, jak kodek, rozdzielczość, liczba klatek na sekundę, częstotliwość próbkowania itp.

Jeśli nie są, możesz zakodować konkat.

ffmpeg -f concat -i textfile -fflags +genpts merged.mp4

Zobacz także FFmpeg Wiki: Concatenate .

Gyan
źródło
Proszę wyjaśnić, jak „zakodować konkat”. Podany do tego wiersz poleceń nie działa dla mnie. Czy mógłbyś podać przykład?
Arete
1
@Arete Opublikuj nowe Q z logiem wykonania polecenia ffmpeg oraz właściwościami plików wejściowych + listy.
Gyan
Drugie polecenie działa dobrze, ale brakuje dźwięku!
Jay Patel
1

Sugestia Gyana nie działała dla mnie. Wyjściowe wideo z sugerowanych poleceń miało taki sam czas trwania jak pierwsze wejście, więc brakowało treści wideo 2 i 3, a mój odtwarzacz multimedialny zawiesił się, próbując odtworzyć wyjście.

Znalazłem jednak odpowiedź w podanym przez niego źródle : http://trac.ffmpeg.org/wiki/Concatenate#filter

ffmpeg -i v1.mp4 -i v2.mp4 -i v3.mp4 -filter_complex "[0:v:0][0:a:0][1:v:0][1:a:0][2:v:0][2:a:0]concat=n=3:v=1:a=1[outv][outa]" -map "[outv]" -map "[outa]" v_out.mp4

To polecenie działało w przypadku filmów zawierających zarówno strumienie wideo, jak i audio. W przypadku jednego filmu wideo bez dźwięku modyfikuję polecenie nieco w następujący sposób:

ffmpeg -i v1_NoAudio.mp4 -i v2.mp4 -i v3.mp4 -filter_complex "[0:v:0][1:v:0][2:v:0]concat=n=3:v=1[outv]" -map "[outv]" v_out_NoAudio.mp4

W efekcie właśnie usunąłem wszystkie fragmenty polecenia dotyczące dźwięku. Spowoduje to usunięcie dźwięku z drugiego i trzeciego filmu, z reguły przy użyciu tego filtra kanały pozostają takie same we wszystkich filmach.

Benjamin Rudolph
źródło
To działało dla mnie, ponieważ pliki wejściowe różniły się metadanymi (chociaż nie mogłem powiedzieć, co było nie tak, ponieważ miały najwyraźniej taką samą rozdzielczość, kodek itp.).
FonzTech