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ę?