Ffmpeg ile h.264 profil seviyesini nasıl ayarlayabilirim?


16

Mac'imde iyi oynayan bir filmim (m4v / h.264 / AAC) var ama son zamanlarda Apple TV3'ümde oynatmayacağını keşfettim. Bu film dosyasının özelliklerine baktıktan sonra bir profili High@4.1 olduğunu görüyorum ama Apple TV3 sadece High@4.0'a kadar destekliyor. Bu videoyu uyumsuz hale getiren tek özellik maksimum video bit hızı, diğer tüm özelliklerin High@4.0'da desteklendiği gibi görünüyor.

Bu videoyu High@4.0 sürümüne düşürmek için ffmpeg'i nasıl kullanabilirim?

Yoksa bunun yerine 4.0 yerine bu video 4.1 yapan gerçek özelliği (maksimum bit hızı) değiştirmek zorunda mıyım? Sadece bit hızını değiştirirsem dosyanın High@4.0 ile uyumlu olmasına rağmen hala High@4.1 olarak etiketleneceğinden ve bu yüzden hala Apple TV3'ümde çalmayacağından endişeliyim.

Yanıtlar:


22

İle kodlarken libx264, H.264 profilini ve seviyesini aşağıdakilerle ayarlayabilirsiniz:

  • -profile:v- biri high, mainya da baseline(ve diğerleri, ama bu burada alakasız)
  • -level:v- H.264 standardının Ek A'da tanımlandığı gibi, ör 4.0.

Örneğin:

ffmpeg -i input.mp4 -c:v libx264 -profile:v high -level:v 4.0 -c:a copy output.mp4

Burada, etkilenmeyeceğinden ses akışını kopyaladık.

Çıktının meta verilerinde doğru profil ve seviye ayarlanmış olacaktır. Kodlama sırasında bunu kontrol edebilirsiniz, burada x264şöyle bir şey söyler:

[libx264 @ 0x7fb26103a000] profile High, level 4.0

MediaInfo ayrıca kapsayıcı ve kodek ayrıntılarını analiz etmenize yardımcı olabilir.

Elbette, tekrar kayıplı bir dönüşüm uyguladığınız göz önüne alındığında, videonun yeniden kodlanması kalitesini bir ölçüde düşürecektir. -crfSabit kalite parametresini etkileme seçeneğini ayarlamayı deneyin . Buradaki varsayılan değer 23'tür ve 18 ile 28 arasındaki değerler aklı başında sayılır. Düşük, daha iyi kalite demektir. Girişinizin bit hızı 65.000 kBit / sn'ye kadar ise, dönüşümden sonra yine de oldukça iyi görünme olasılığı vardır.


1
İyi çalıştı. Maalesef bazı meta verileri kaybetti, ancak gerçek videoda belirgin bir değişiklik olmadı. İlgilenmedikçe, aşağıdaki komut aynı şeyi başarır mı? ffmpeg -i input.mp4 -vcodec x264 -vprofile high -vlevel 4.0 -acodec copy output.mp4
Sam

Evet, -vseçenekler bunların takma :vadlarıdır. Hangi meta verileri kaybettiniz?
Mart'ta

Sanırım sadece kaybolan sanat eseri olabilirdi. Bu teknik olarak meta veri olarak kabul edilir mi bilmiyorum ... Sanat aslında dosya içinde yer alıyor mu? Bütün tekrar ekledi önce ben her şeyi kontrol etmedi.
Sam

Şimdi benzer bir problemle farklı bir dosyam var. Yanlış profil düzeyidir, ancak diğer özellikler gerekli düzeyimle (4.0) uyumlu görünüyor. Yukarıda verdiğiniz komutları kullanırsam, girilen profil düzeyiyle uyumlu olmadığı sürece verilere dokunulmaz mı? Temel olarak, ffmpeg'in hangi profil ve seviyenin olduğunu belirten etiket dışındaki verilere dokunmasını istemiyorum. Bu mümkün mü yoksa tüm değerleri (nitrat, kare hızı vb.) Önceden ayarlanmış değerlere ayarlayacak mı?
Sam

2
Bunu başarmak için bir yol buldum. Subler'ın, video akışını seçtiğinizde, profili ve düzeyi belirli cihazlarla uyumlu hale getirmek için değiştirme seçeneği vardır. Videonun ayarladığınız profille uyumlu olduğundan emin olmanızı söyler, böylece herhangi bir yeniden kodlama yaptığını düşünmüyorum, sadece meta verileri değiştirmesi gerekiyor.
Sam

1

Sizin referans olarak açıklama , bu komutu deneyin:

ffmpeg -i input.mp4 -map 1 -c:v libx264 -profile:v high -level:v 4.0 -c:a copy \
# copies all global metadata from input.mp4 to output.mp4
-map_metadata 0 \
# copies video stream metadata from input.mp4 to output.mp4
-map_metadata:s:v 0:s:v \
# copies audio stream metadata from input.mp4 to output.mp4
-map_metadata:s:a 0:s:a \
output.mp4

Şerefe


0

Ben başka türlü okudum rağmen (yani farklı giriş formatları) x265 x264 reencoding yaparken "-movflags use_metadata_flag" kullandım ve çalıştı!

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.