M4a dosyalarının birleştirilmesi çok uzun veya çok kısa


0

İki tane birleştirmek istiyorum m4a dosyalar biri 20:49, diğeri 10:23. Takip etme bu sayfa , ilk seçenek:

ffmpeg -i 'concat:file1.m4a|file2.m4a' -c copy output.m4a

Yalnızca ilk dosyayı işler, örn. standart çıktı gösterir:

size=   10921kB time=00:20:48.69

ve çıktı dosyası ilk dosya gibi 20 dakikadır.

İkinci seçenek:

ffmpeg -f concat -safe 0 -i mylist.txt -c copy output.m4a

nerede mylist.txt geçerli:

file 'file1.m4a'
file 'file2.m4a'

Bu komut standart çıktının gösterdiği gibi her iki dosyayı da kullanır:

size=   16339kB time=00:33:56.73

ancak süre yanlış, 31:42 olması gerektiği gibi. Ayrıca, işletim sisteminden (macOS) oynatıldığında çıktı dosyasının süresi 32:06'dır.

FFMPEG'in sürelerine göre iki dosyayı bir araya getirmesini nasıl sağlayabilirim?


kullanma -c copy itibaren m4a için mp3 saçmalık üretmek zorundadır.
Eugen Rieck

Haklısın, komutları kopyalamak benim hatamdı. Soruyu değiştirdim. Libmp3lame ile mp3'e dönüştürmede sorun yaşadım, sonra basitlik için komutları sadece m4a olarak değiştirdim. Aslında, bahsettiğiniz o komut benim ffmpeg ile Could not write header for output file #0 (incorrect codec parameters ?): Invalid argument.
mmorin

Hepsi m4a ise, o zaman sorun biraz daha karmaşıktır: m4a sıfırdan başlayıp başlayamayacak zaman kodları içerir. concat Demuxer bunu göz ardı etmediği için ün salınıyor. Yayında her zaman ham PCM'ye (ya da zaman damgası olmayan başka bir şeye) dönüştürür, sonra concat ve son çıktı formatını yaratırız. Çizgileri boyunca ffmpeg -i file1,m4a -c:a pcm_s16le -f s16le file1.pcm ; ffmpeg -i file2,m4a -c:a pcm_s16le -f s16le file2.pcm ; cat file2.pcm >> file1.pcm ; ffmpeg -f s16le -i file1.pcm -c:a aac -b:a whatever -ac whatever output.m4a
Eugen Rieck

PCM'ye dönüşüm yapabilirim ve inanıyorum cat sadece iki dosyayı ekliyor. Son komutla hata alıyorum ve bulamıyorum -b kılavuzda. Örnek verebilir misiniz whatever Son satırda mı?
mmorin

-b:a ses bant genişliğini ayarlar. Gibi bir şey -b:a 96k (veya 192k) iyi bir başlangıç ​​noktası olabilir, -ac ses kanallarının sayısını tanımlar, -ac 2 stereo için çalışıyor. Haklısın, bu cat sadece dosyayı ekler - bu ham PCM'nin (.wav'ın aksine) büyük bir avantajıdır.
Eugen Rieck

Yanıtlar:


1

Dosyaların birleştirilmesi bazen çok sezgisel değildir - bunun nedeni, pek çok formatın, o dosyanın oluşturulmasına ve düzenlenmesine bağlı olarak, sıfırdan başlayabilen veya başlayamayan zaman damgaları içermesidir.

Bu, yayın dünyası biçimlerinin kurallarında, sadece bir araya getirilebilecek nedenlerden biridir: MPEGTS (süreklilik sayaçlarına göz atması gereken) veya RAW (ham PCM ve hammaddesi h.264).

Eğer yeniden kodlama bir seçenekse, orijinal dosyalarınızı satır boyunca ham PCM'ye dönüştürmenizi öneririm.

ffmpeg -i file1.m4a -c:a pcm_s16le -ac 2 -ar 48000 -f s16le file1.pcm
ffmpeg -i file2.m4a -c:a pcm_s16le -ac 2 -ar 48000 -f s16le file2.pcm

Bu 2 kanallı 2 ham PCM dosyası yaratacaktır (Stereo, -ac 2 ) her biri ve 48KHz örnekleme hızı ( -ar 48000 )

Şimdi bu dosyaları birleştirebilirsiniz; üzerinden cat file2.pcm >> file1.pcm - bu, sadece düz ses örnekleri olan dosyanın zaman damgası olmadan yeni bir ham temsili oluşturur.

Sonucu AAC'ye yeniden kodlamak için satırları boyunca gitmek

ffmpeg -f s16le -ac 2 -ar 48000 -i file1.pcm -c:a aac -b:a 192K -ac 2 output.m4a

Bunu yıkalım:

  • İlk önce ffmpeg'e ham PCM (16bit low endian imzalı) bir dosya açma talimatı verdim -f s16le ) 2 ses kanalı içeren ( -ac 2 ) 48KHz örnekleme hızı ( -ar 48000 ) ve file1.pcm dosyasında saklanır (her zamanki gibi ffmpeg ile parametrelerin sırası önemlidir)
  • sonra AAC ile tekrar kodlamak için ( -c:a ) ve 192Kbit / s bant genişliği ( -ba:a ) yine stereo olarak ( -ac 2 )
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.