Mam kilka plików ogg vorbis, wszystkie zakodowane z dokładnie tymi samymi właściwościami, które chcę połączyć w jeden plik.
Wiem, że format ogg vorbis obsługuje prostą łączenie wielu plików, takich jak:
$ cat file1.ogg file2.ogg > output.ogg
Ale niestety nie wszystkie odtwarzacze są w stanie zrozumieć pliki utworzone w ten sposób, na przykład mój mobilny odtwarzacz audio i unikałbym zakupu nowego. Inne programy, które tego nie rozumieją, to gstreamer. Ta metoda również nie działa, jeśli wszystkie wejściowe pliki ogg mają ten sam identyfikator strumienia.
Dodatkowo, ponieważ chciałbym wyrzucić oryginalne pliki i zachować tylko skonkatenowaną wersję, chciałbym, aby konkatenacja została wykonana bezstratnie, podobnie jak cat
rozwiązanie.
Chcę również uniknąć łączenia plików w bezstratny format, taki jak flac, ponieważ niepotrzebnie zwiększyłoby to rozmiar pliku. Gdyby to było w porządku, mógłbym zachować oryginalne pliki ogg i zająłbym mniej miejsca.
Wygląda na to, że ffmpeg czasami potrafi to zrobić za pomocą demuxera concat :
$ cat inputs.txt
file 'in1.ogg'
file 'in2.ogg'
$ ffmpeg -f concat -i inputs.txt -c copy out.ogg
Jeśli spojrzę na surowy zrzut heksowy moich plików wejściowych, to mogę znaleźć pakiety vorbis dokładnie reprezentowane w pliku wyjściowym. Myślę, że tak naprawdę nie dzieje się ponowne kodowanie.
Ale to nie wydaje się działać na wszystkich plikach wejściowych. Czasami (nie jestem pewien, co to powoduje) ffmpeg ostrzega:
Non-monotonous DTS in output stream 0:0; previous: 5011328, current: 5011200; changing to 5011329. This may result in incorrect timestamps in the output file.
I wtedy usłyszałbym bardzo słabą „przerwę” między dwoma plikami. Dlatego z pewnością nie jest to rozwiązanie globalne.
Ponieważ nie mogłem go znaleźć, próbowałem napisać własne narzędzie w tym pytaniu dotyczącym przepełnienia stosu .
Czy istnieje sposób na połączenie wielu plików ogg vorbis, ale bez ich ponownego kodowania i tylko z jednym strumieniem na wyjście? Które narzędzie jest w stanie wykonać tę pracę?
Odpowiedzi:
ffmpeg -i "concat:ogg1.ogg|ogg2.ogg|ogg3.ogg" -c copy out.ogg
tworzy w moim systemie skonkatowany plik ogg, tylko trochę mniejszy niż oddzielne pliki razem (prawdopodobnie z powodu udostępnionych metadanych). Brzmi dla mnie tak samo, więc konkatenacja powinna być bezstratna. Nie powoduje to jednak niewielkiej luki między plikami.ffmpeg -f concat -safe 0 -i ogg1.ogg -i ogg2.ogg -c copy out.ogg
ma działać, ale daje ten błąd na moim Homebrew (macOS) ffmpeg od 3.3.2.Źródło: https://trac.ffmpeg.org/wiki/Concatenate
źródło
Możesz rzucić okiem na FFmpeg . Ma wiele narzędzi, których nie do końca rozumiem, ale pamiętam z dokumentacji, że istnieje narzędzie do tego dokładnie. W przeciwnym razie, myślę, że można użyć VLC Media Player „s wiersza poleceń .
źródło
ffmpeg -f concat -i inputs.txt -c copy out.ogg
nie działa. Jestem ciekawy, jak myślisz, że można to rozwiązać za pomocą ffmpeg.