ogg vorbis dosyalarının kayıpsız birleşimi


12

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?



@JoshRumbut evet ve dosyaların bir girdi için birleştirildiği sesli boşluklar içerdiğinden muzdarip
josch

PiTiVi kullanmayı ve klipleri sırayla zaman çizelgesine yerleştirmeyi deneyebilirsiniz .
harrymc

1
OP (ve ben de), gerekli dosyaları topladıktan sonra kullanıcı etkileşimini içermeyen programlı bir çözüm istiyor.
Villermen

2
@ RalphRönnquist Sox girişi yeniden kodlar.
josch

Yanıtlar:


2

ffmpeg -i "concat:ogg1.ogg|ogg2.ogg|ogg3.ogg" -c copy out.oggsistemimde birleştirilmiş ogg dosyası oluşturur, ayrı dosyalardan biraz daha küçüktür (muhtemelen paylaşılan meta verilerden dolayı). Bana aynı geliyor, bu yüzden birleştirme kayıpsız olmalı. Ancak, bu dosyalar arasında küçük bir boşluk bırakmaz.

ffmpeg -f concat -safe 0 -i ogg1.ogg -i ogg2.ogg -c copy out.ogg çalışması gerekiyordu ama bu hatayı 3.3.2 itibariyle Homebrew (macOS) ffmpeg'imde veriyor.

[concat @ 0x7f91e8800400] Line 1: unknown keyword 'OggS'
ogg1.ogg: Invalid data found when processing input

Kaynak: https://trac.ffmpeg.org/wiki/Concatenate


Aynı hatayı alıyorum
Housemd

0

FFmpeg'e bir göz atmak isteyebilirsiniz . Tam olarak anlamadığım birçok araç var, ancak belgelerden tam olarak bunu yapmak için bir araç olduğunu hatırlıyorum . Aksi takdirde, ben kullanabilirsiniz düşünüyorum VLC Media Player 'ın Komut Satırı .


1
Cevabınızı biraz genişletebilir misiniz? Bir ürünü ve belgelerini işaret etmek, çözümü nasıl gerçekleştireceğinizi gerçekten açıklamaz. Sorunu çözmek için ürünün nasıl kullanılacağı hakkında bazı talimatlar eklemek daha iyidir. Burada yazılım önerme konusunda iyi rehberlik: meta.superuser.com/questions/5329/… . Teşekkürler.
fixer1234

Sadece kullanmak ffmpeg -f concat -i inputs.txt -c copy out.oggişe yaramıyor. Bunun ffmpeg ile nasıl çözülebileceğini merak ediyorum.
josch
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.