Avi'den mp4'e kadar ses parçalarını etkili bir şekilde birleştirin


1

İki kez yaklaşık 100 video (bir dizinin bölümleri) var.

  1. [avi] 720p video çözünürlüğümü tercih ettiğim ses parçalarıyla
  2. [mp4] 1080p ama yanlış dil

Açıkçası, tercih ettiğim dil ile iyi bir video çekmek istiyorum . Ancak mümkünse her iki ses seçeneğini de korumak isterim.

Onları bir mp4 marangozla (mp4box için GUI) el ile birleştirmeyi denedim ama bu çok uzun sürüyor. Bu işlemi otomatikleştirmek ve optimize etmek için bazı öneriler görmeyi çok isterim.


Yanıtlar:


1

Bunu, ffmpeg (statik bir yapı indirme) ile çok kolay bir şekilde yapabilirsiniz:

ffmpeg -i input.mp4 -i input.avi -c copy -map 0:v:0 -map 1:a output.mp4

Bu olacak map çıktı dosyasına aşağıdaki akışları:

  • ilk girişin ilk video kanalı ( 0:v:0)
  • ikinci girişin ses kanalları ( 1:a) - yalnızca ilkini istiyorsanız, kullanın 1:a:0, vb.

Video ve ses akışları kopyalandı, bu yüzden bu işlem hızlı.

Uyumsuz ses

AVI dosyasının ses akışları için MP3 kullanması durumunda, bir MP4 dosyasıyla eşleştirilemezler. Bu durumda, şunları kullanın:

ffmpeg -i input.mp4 -i input.avi -c:v copy -c:a aac -b:a 192k -map 0:v:0 -map 1:a output.mp4

Bu, 192 kBit / s'de AAC kullanarak ses akışlarını yeniden kodlar; bu, herhangi bir artifakı yeniden kodlamadan fark etmemeniz için yeterince yüksek kalitede olmalıdır.

Veya, MKV'yi hemen hemen tüm kodekleri destekleyen bir çıktı kabı olarak kullanabilirsiniz:

ffmpeg -i input.mp4 -i input.avi -c copy -map 0:v:0 -map 1:a output.mkv

Toplu olarak nasıl çalıştırılır

MP4 ve AVI dosyalarının aynı temel adlara sahip olduğunu ve yalnızca bir kez çalıştırdığınızı varsayarak, bu komutu tüm dosyalarda (örneğin, Bash ile Linux altında) çalıştırmak için, açık bir şekilde bir döngüde kullanabilirsiniz. çıktı dosyalarını da dönüştürmek için):

for f in *.mp4; do
    aviFile="${f%%.mp4}.avi" # replace the extension
    outputFile="${f%%.mp4}-output.mp4" # create output filename
    ffmpeg -i "$f" -i "$aviFile" -c copy -map 0:v:0 -map 1:a "$outputFile"
done

Windows Batch dosya döngüsünde bir komutu nasıl çalıştıracağınıza dair pek çok örnek çevrimiçi olarak bulacaksınız.


Ses parçasını yeniden
kodlamak

Sesi ve videoyu senkronize etmeniz gerekirse, gecikme filtresi kullanabilirsiniz. İşte 10 saniyelik gecikmeyle stereo ses için örnek: -filter:a:0 "adelay=10000^|10000". ( ^Windows komut satırı için kaçış karakteridir)
Vlastimil Ovčáčík

@ VlastimilOvčáčík Evet, ancak, eğer bu filtreyi kullanırsanız, yeniden kodlamanız gerekir; bu durumda akışı kopyalayamazsınız. -itsoffsetParametresi de bir filtre gerektirmeden giriş sinyallerini kaydırmak için kullanılabilir.
slhck

Yanılıyor olabilirim, fakat -itsoffsetistediği zaman yarattığı boşluğa sessizlik katmıyor adelay. Benim MPC-HC oyuncu bu konuda karıştı ve katma sessizlik ile hiçbir sorun oluştu.
Vlastimil Ovčáčík,
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.