Genişliği koruyarak kare boyutunu nasıl değiştirebilirim (ffmpeg kullanarak)?


21

Bu StackExchange site ve FFmpeg kodlayıcı kullanarak yeniyim. Bir site için sahip olduğum diğer videolarla eşleşmesi için 720x406 (16: 9) olarak değiştirmek istediğim 720x480 (3: 2) bir videom var. Ben de dahil olmak üzere çeşitli komut kombinasyonları denedim:

ffmpeg -i myfile.mv4 -s 720x406 outfile.mp4
ffmpeg -i myfile.m4v -c copy -aspect 16:9 outfile.mp4

Sonuçta, belirtilen yüksekliğe kadar ölçeklendirilmiş, ancak genişliği koruyamayan bir video. 608x406 veya civarında biter. Bugün FFmpeg'in çeşitli GUI sürümleriyle oynuyorum ve aynı şeyi yapıyorlar gibi görünüyor.

İstenilen kare boyutunu elde etmek için (komut satırı üzerinden daha fazla kontrole sahip olacağımı varsayarak) geçmek için uygun seçenekler / parametreler ne olurdu?

Yanıtlar:


36

ölçek filtresini kullanmak bunu yapacaktır, ancak biraz daha var.

ffmpeg -i input.mov -vf scale=720x406 output.mov 

gerekli piksel boyutlarına sahip bir film oluşturur, ancak çıktıya bakarsanız, meta verilere, kare olmayan pikseller kullanarak orijinalle aynı en boy oranında oynatılmasını sağlayacak şekilde bilgi eklediğini görürsünüz. Filmi anamorfik olarak yeni bir en boy oranına uzatmak istiyorsanız, "Örnek En Boy Oranı" için SAR adı verilen piksel en boy oranını manuel olarak ayarlamanız gerekir, böylece kare pikseller için:

ffmpeg -i input.mov -vf scale=720x406,setsar=1:1 output.mov

Alternatif olarak, ekran en boy oranını istediğiniz gibi ayarlayabilirsiniz, böylece:

ffmpeg -i input.mov -vf scale=720x406,setdar=16:9 output.mov

-Vf komutu ve x = y, z = ile takip ettiğim ifadeler bir filtre zinciri oluşturuyor . Filtreler oldukça karmaşık olabilir, ancak en basit kullanımda formu alırlar ve effect=parameter,nexteffect=anotherparameteryazdığınız sırada işlenirler.

Kodek için ek komutlar koymak isteyebilirsiniz, örneğin -c:v libx264x264 mp4 kodlayıcıyı kullanmak -crf 20ve sabit oran faktörünü 20'ye (genellikle boyut ve kalite arasında oldukça iyi bir uzlaşma) ayarlamak gibi bir şey . Yani, oldukça eksiksiz bir komut şöyle görünecektir:

ffmpeg -i input.mov -vf scale=720x406,setdar=16:9 -c:v libx264 -preset slow -profile:v main -crf 20 output.mov

Ana profil cihaz uyumluluğu için iyidir slow, libx264 kodlayıcı için önceden ayarlanmış hız ve kalite dengesi oldukça iyidir, bu nedenle bu iyi bir genel web kodlama işgücüdür. Kullanarak fastveya veryfastdaha yavaş kullanarak daha hızlı yapabilirsiniz veryslowve çok daha fazla işlem süresi (dolayısıyla ad) pahasına placeboolduğundan biraz daha iyi hale getireceksiniz veryslow.

BTW -c kopyasını kullanmayın onlara bir şey yapmadan araçlar sadece video ve ses akışları kopyalamanız, hiç herhangi bir etkisi olmayacaktır ölçek, codec, bit hızı vb açısından yapmak hiçbir şey yüzden.


1
Eğer ffmpeg'in son sürümlerini kullanıyorsanız, artık kod çözücü olarak x264'ü belirtmeniz gerekmez, ancak yine de hangi ayarların istenebileceğine bakmaya değer olabilir.
stib

1
Bence metadata sadece DAR alanı var. Yani kullanmak setsarsadece dolaylı olarak DAR'ı mı ayarlıyor?
jiggunjer

"-C copy" kullanmak zorundayım, ama diğer tarafta ekranı yeniden boyutlandırmak istiyorum. Bunu nasıl başarabilirim?
Dr.jacky

1
@ Mr.Hyde bunu bir yorum sormak yerine yeni bir soru olarak sormalısınız
stib
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.