Tüm tek bir dosyaya birleştirmek istiyorum aynı özellikleri ile kodlanmış ogg vorbis dosyaları bir çift var.
Ogg vorbis biçiminin birden fazla dosyanın düz bir şekilde birleştirilmesini desteklediğini biliyorum:
$ cat file1.ogg file2.ogg > output.ogg
Ancak ne yazık ki tüm oyuncular bu şekilde oluşturulan dosyaları anlayamıyor, örneğin mobil müzik çalarım ve yeni bir tane satın almaktan kaçınırım. Anlamayan diğer programlar gstreamer'dır. Giriş ogg dosyaları aynı akış kimliğine sahipse bu yöntem de çalışmaz.
Buna ek olarak, orijinal dosyaları atmak ve yalnızca birleştirilmiş sürümü saklamak istediğimden, birleştirme gibi kayıpsız bir şekilde yapılmasını istiyorum cat
.
Ayrıca gereksiz yere dosya boyutunu havaya uçurmak gibi dosyaları flac gibi kayıpsız bir biçimde birleştirmek önlemek istiyorum. Bu iyi olurdu, o zaman orijinal ogg dosyaları tutabilir ve daha az yer kullanır.
Görünüşe göre ffmpeg bazen concat demuxer kullanarak yapabilir :
$ cat inputs.txt
file 'in1.ogg'
file 'in2.ogg'
$ ffmpeg -f concat -i inputs.txt -c copy out.ogg
Giriş dosyalarımın ham hexdump'ına bakarsam, çıktı dosyasında tam olarak temsil edilen vorbis paketlerini bulabilirim. Bu yüzden sanırım gerçekten yeniden kodlama olmaz.
Ancak bu, tüm girdi dosyalarında çalışmıyor gibi görünüyor. Bazen (bunu neyin tetiklediğinden emin değilim), ffmpeg uyarı verir:
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.
Ve sonra iki dosya arasında çok zayıf bir "boşluk" duyacağım. Dolayısıyla bu kesinlikle küresel bir çözüm değildir.
Bir tane bulamadığım için bu yığın akışı sorusuna kendi aracımı yazmaya çalıştım .
Birden fazla ogg vorbis dosyasını birleştirin, ancak bunları yeniden kodlamadan ve çıktı başına yalnızca tek bir akışla mı? Hangi araç bu işi yapabilir?