ffmpeg - nasıl kopyalanır | mevcut medya dosyasından kodlama ayarlarını ayıkla?


19

Bunu şimdi defalarca yapabilmek istedim bu yüzden soruyorum.

Mevcut bir video ya da ses dosyası, varsa ffmpeg, mplayer, konteyner gibi en azından bir codec 's "propreties" bazı algılayabilir ve kullanılmış bitrate ve diğer medya oynatıcılar, muhtemelen çeşitli kalite ve kodlama özgü ayarları vs

(Doğrudan) ffmpeg ile kodlamada kullanmak için bu ayarları mevcut bir dosyadan nasıl çıkarabilirim?

Örneğin, bazı ayarlarla mkvkodlanmış bir video x264ve başka bir sıkıştırılmamış avidosya aldım . Ben aynı ayarlarla avi kodlamak için x264 mkv dosyası için kullanılan kodlama ayarlarını "kopyalamak" istiyorum .

Not: Ayarları bir kod çözücüden kodlayıcıya "çevirerek" insan işi içermeyen bir yol arıyorum. Önce ayarları ayıklayıp bir yere kaydetmem gerekiyorsa, ancak okuma seçeneklerini bir komut satırına veya ffmpeg için önceden ayarlanmış | yapılandırma dosyasına besleyebilmek istiyorum.


Eh, muhtemelen ffprobe(özellikle -show_streamsve -show_formatseçenekleri ile) çıkış sıralamak ve önemli şeyleri komut için bu bilgileri kullanabilirsiniz
kötü

1
Genellikle bit hızı (tam bit hızını kopyalamaya çalışmak kullanıcılar arasında popüler gibi görünüyor) gibi aynı ayarları kullanmak en iyi kaliteyi sağlamaz. Tabii ki tipik girdinizin neye benzediğine dair hiçbir fikrim yok, ancak x264 ile -crfseçeneğin kullanılması genellikle önerilir. Bkz. FFmpeg ve x264 Kodlama Kılavuzu .
llogan

Ffprobe çıktısında kodlama ayarları hakkında hiçbir şey bulamıyorum :(
thelolcat

Yalnızca ReFrames sayısını gösterir, ancak mediainfo gibi diğer ayarları göstermez
thelolcat

Ffmpeg ile giriş sözdizimi meta veri alanlarından farklıdır. örneğin channels:6bir video dosyasından okuyabilirsiniz , ancak kodlamak için anahtarı kullanmanız gerekir -ch:6. Bazı anahtarlar 1 harf, bazıları iki vb.
Kullanır

Yanıtlar:


10

Bunu yapmanın otomatik bir yolu yok. Orijinal dosyanın parametrelerine bakmalı ve çıktı dosyasına uygulamalısınız.

Çoğu durumda, bunlar aşağıdaki gibi olacaktır:

  • Kapsayıcı biçimi (MP4, MKV,…)
  • Video ve ses kodeki (H.264, H.265,…)
  • Ses özgü:
    • Ses kanalı sayısı
    • Ses örnekleme hızı
    • Ses bit hızı
  • Videoya özgü:
    • Profil ve Düzey (uyumluluğu sağlamak için buraya bakın )
    • Maksimum bit hızı sınırlamaları (örn . H.264 için )
    • Maksimum video çözünürlüğü, -filter:v scaleveya ile değiştirin-s:v
    • Çerçevele, değiştir -filter:v fps -r
    • Chroma alt örneklemesi, üzerinden değişiklik -pix_fmt(ör. -pix_fmt yuv420pSize en iyi uyumluluğu sağlamalıdır)
    • GOP boyutu (IDR çerçeveleri arasındaki mesafe), -g
    • Diğer özel kodlama ayarları

Ancak, her şey yolunda olsa bile, bazı cihazlar bit akışına gömülü özel, özel bilgiler gerektirebilir.


Özel kullanım görevine gelince x264, bu önemsiz olmayacaktır. Ben genellikle elle yapılan bu görevleri halledecek tek bir komut dosyası farkında değilim. Kodlama ayarları hakkında en fazla bilgi için Unix / Linux veya OS X'te mediainfobazı Bash hileleriyle kullanabilirsiniz.

Örneğin, MP4 dosyasındaki x264 kodlu bir video için:

mediainfo input.mp4 | grep "Encoding settings" | cut -d':' -f2- | tr '/' '\n' | sed 's/ //'

Bu, x264 seçeneklerinin bir listesini çıkarır:

cabac=1
ref=3
deblock=1:-1:-1
analyse=0x3:0x113
me=hex
subme=7
psy=1
…

Daha sonra bu seçenekleri manuel olarak x264 ikili dosyasına geçirebilirsiniz.

FFmpeg'den geçerseniz, bu biraz daha karmaşıktır, çünkü x264'ün tüm seçenekleri bu şekilde eşlenemeyebilir veya eşleştirilmemelidir. Çoğunlukla basit bir ön ayar, ayar ve profil spesifikasyonunun da işe yarayacağını ( x264 --fullhelpve x264 kodlama kılavuzunda görüldüğü gibi ) ve CRF seviyesini belirtmenin yeterli olduğunu unutmayın.

Ve bu ses bile düşünmüyor, neyse ki, o kadar çok seçenek yok.


Yani ffprobe veya ffmpeg ile mümkün değil mi?
thelolcat

Hayır, ffprobe / ffmpeg ile doğrudan yapmak mümkün değildir . X264 kodlu video durumunda, mediainfoçıkışı kullanır ve ffmpeg ile bu seçenekleri eşlerim -x264-params. (Ayrıca x264 kodlama kılavuzuna bakın ). Ancak, her türlü kodek / kodlayıcı veya kapsayıcı biçimi için genel bir çözüm istiyorsanız, dönüşümü yapan orta derecede karmaşık bir komut dosyası yazmanız gerekir.
slhck
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.