Łączenie plików AVI z wieloma ścieżkami

2

Mam katalog plików AVI, który chciałbym połączyć w jeden plik AVI. Te pliki AVI pochodzą z kamery i mają dwie ścieżki wideo - przednią i tylną.

Próbowałem użyć sugestii tutaj połączyć filmy. Konkretnie:

ffmpeg -f concat -i <(for f in $PWD/*.avi;do echo "file '$f'";done) -c copy output.avi

Działa to doskonale dla pierwszej (przedniej) ścieżki wideo, ale całkowicie usuwa drugą (tylną) ścieżkę wideo.

Jak mogę połączyć te pliki i zachować obie ścieżki wideo? Alternatywnie, czy mogę określić ścieżkę wideo do połączenia?

Erik
źródło

Odpowiedzi:

1

Zasadniczo musisz zrobić demultipleksowanie każdego pliku, a następnie połączyć otrzymane pliki. Jest sposób, aby to zrobić za pomocą filtr concat , ale wymaga ponownego kodowania wszystkiego, co się dzieje.

Więc musisz wykonać dwie operacje. Po pierwsze, demultipleks. (Zauważ, że nie jest to testowane z ffmpeg, ponieważ nie mam żadnych plików wideo do przetestowania, ale teoretycznie powinno działać.)

I=0;J=1;for f in $PWD/*.avi;do ffmpeg -i "$f" -map 0:v:0 -codec copy output$I.avi -map 0:v:1 -codec copy output$J.avi && I=$(($I+1)) && J=$(($J+1));done

Następnie możesz użyć concat demuxer jak zwykle:

ffmpeg -f concat -i <(for f in $PWD/*.avi;do echo "file '$f'";done) -c copy output.avi
tubedogg
źródło
To działało świetnie. Jedyna zmiana, którą zrobiłem to: I = 0; J = 1; dla f w $ PWD / *. Avi; zrób ffmpeg -i "$ f" -map 0: v: 0 -codec kopia frontowa 0: v: 1 -codec kopia wstecz $ J.avi i amp; I = $ (($ I + 1)) i & amp; J = $ (($ J + 1)); wykonane, a następnie odpowiadająca nazwa pliku zmieniona na polecenie konkatenacji. Edytowałem, ale nie mam koniecznej reputacji. Dzięki!
Erik
1
Jeśli to zrobisz, możesz stracić J=1; i J=$(($J+1)); i zmienić back$J.avi do back$I.avi - z różnymi wyjściowymi nazwami plików, liczba może być taka sama dla obu.
tubedogg
Dobrze. Ładne uproszczenie.
Erik