Saya punya beberapa file ogg vorbis, semua dikodekan dengan properti yang sama persis yang ingin saya gabungkan menjadi satu file.
Saya tahu bahwa format ogg vorbis mendukung penggabungan beberapa file seperti:
$ cat file1.ogg file2.ogg > output.ogg
Tetapi sayangnya tidak semua pemain dapat memahami file yang dibuat seperti itu, misalnya pemutar audio ponsel saya dan saya akan menghindari untuk membeli yang baru. Program lain yang tidak memahaminya adalah gstreamer. Metode itu juga tidak berfungsi jika file ogg input kebetulan semua memiliki id aliran yang sama.
Selain itu, karena saya ingin membuang file asli dan hanya menyimpan versi yang disatukan, saya ingin penggabungan dilakukan tanpa kehilangan, seperti cat
solusinya.
Saya juga ingin menghindari menyatukan file ke dalam format lossless seperti flac karena ini tidak perlu meledakkan ukuran file. Jika itu akan baik-baik saja, maka saya bisa menyimpan file ogg asli dan akan menggunakan lebih sedikit ruang.
Tampaknya ffmpeg kadang-kadang dapat melakukannya dengan menggunakan concat demuxer :
$ cat inputs.txt
file 'in1.ogg'
file 'in2.ogg'
$ ffmpeg -f concat -i inputs.txt -c copy out.ogg
Jika saya melihat hexdump mentah dari file input saya, maka saya dapat menemukan paket vorbis persis diwakili dalam file output. Jadi saya kira benar-benar tidak ada pengkodean ulang yang terjadi.
Tapi ini sepertinya tidak berfungsi pada semua file input. Terkadang (tidak yakin apa yang memicu ini), ffmpeg akan memberikan peringatan:
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.
Dan kemudian saya akan mendengar "celah" yang sangat samar antara dua file. Jadi ini tentu bukan solusi global.
Karena saya tidak dapat menemukannya, saya mencoba menulis alat saya sendiri di pertanyaan stackoverflow ini .
Apakah ada cara untuk menggabungkan beberapa file ogg vorbis tetapi tanpa melakukan encoding ulang dan hanya dengan satu aliran per output? Alat mana yang bisa melakukan pekerjaan itu?
Jawaban:
ffmpeg -i "concat:ogg1.ogg|ogg2.ogg|ogg3.ogg" -c copy out.ogg
membuat file ogg gabungan pada sistem saya, hanya sedikit lebih kecil dari gabungan file yang terpisah (mungkin karena metadata bersama). Kedengarannya sama bagi saya, jadi penggabungan harus tanpa kerugian. Namun, ini tidak menambah celah kecil di antara file.ffmpeg -f concat -safe 0 -i ogg1.ogg -i ogg2.ogg -c copy out.ogg
seharusnya berfungsi tetapi memberikan kesalahan ini pada ffmpeg Homebrew (macOS) saya pada 3.3.2.Sumber: https://trac.ffmpeg.org/wiki/Concatenate
sumber
Anda mungkin ingin melihat FFmpeg . Ini memiliki banyak alat yang saya tidak begitu mengerti, tetapi saya ingat dari dokumentasi bahwa ada alat untuk melakukan hal ini. Jika tidak, saya berpikir bahwa Anda dapat menggunakan VLC Media Player 's Command Line .
sumber
ffmpeg -f concat -i inputs.txt -c copy out.ogg
tidak berhasil. Saya ingin tahu bagaimana Anda berpikir ini bisa diselesaikan dengan ffmpeg.