Kayıpsız evrensel video formatı


14

1280x720 25fps video için en uygun kayıpsız video formatını bulmaya çalışıyorum . Videoda 4 dakika var. Ses 320 kbps mp3 olacak, bu çok önemli değil. İdeal koşullar:

  • Kayıpsız (kayıpsız olabilir)
  • Container + codec bileşeni çoğu platformda oynatılabilir
  • Container + codec bileşeni modern DVD oynatıcılarda oynatılabilir (DVD dışındaki formatları destekler)
  • Boyut 700 MB'den az

Bu mümkün mü? Zaten üç gün mücadele, tatmin edici sonuçlar olmadan, hatta 12 GB dosya (3 GB / dakika gibi görünüyor) almak bile.



4
Üzgünüm ama pratik olarak 700 MB daha az sıkıştırılmış (görsel olarak) kayıpsız 720p video alamazsınız (Megabyte burada, "bit" anlamına gelir "mb" değil kabul). Neden böyle bir kısıtlamanız var? Video h.264 olarak kodlanamıyor mu?
slhck

evet, MB, karışıklık için üzgünüm. Ben cca 5 video x 4 dakika 4 GB (orta sınırlamalar) sığdırmak gerekir.
mrkva

2
12GiB dosyaları aldığınız için 24Bit renk derinliği kullandığınızı varsayıyorum. Sıkıştırılmamış video veri akışı dakikada yaklaşık 4GiB'dir. Bu çok büyük miktarda veri. İstediğiniz şey dakikada 170MiB civarında. Seçtiğiniz kodek ne olursa olsun, bunu ancak çok fazla hareket etmeden durağan bir sahne ile gerçekleştirebilirsiniz. Korkarım, kayıpsız olmak için kontrendikasyonu gevşetmek, kare hızını azaltmak veya daha büyük bir dosya boyutunu tolere etmek zorundasınız.
Marco

"Container + codec bileşeni modern DVD oynatıcılarda oynatılabilir (DVD dışındaki formatları destekler)" diye açıklayabilir misiniz?
llogan

Yanıtlar:


24

Bildiğim en iyi gerçek, matematiksel olarak kayıpsız biçim huffyuv, ama bu çok büyük dosyalar üretecek ve çok fazla uyumlu olmayacak. Kayıt için, ffmpeg bunu yapabilir:

ffmpeg -i input -c:v huffyuv -c:a libmp3lame -b:a 320k output.avi

Açık kaynaklı h.264 kodlayıcı olan X264, kayıpsız bir moda sahiptir. Bu bir MP4 kabının içine girebilir ve son birkaç yıl içinde üretilen çoğu donanımla uyumlu olmalıdır. İlk komut hızlı bir kodlama hızı, ancak büyük bir dosya verecektir; ikinci komut çok daha uzun sürecek, ancak dosya hızlı kodlanmış olanın yaklaşık yarısı kadar olmalıdır (yine de oldukça büyük olacaktır):

ffmpeg -i input -c:v libx264 -crf 0 -preset ultrafast -c:a libmp3lame -b:a 320k output.mp4

ffmpeg -i input -c:v libx264 -crf 0 -preset veryslow -c:a libmp3lame -b:a 320k output.mp4

Bu size yeterince küçük bir dosya vermezse, 18'lik bir crf genellikle 'görsel olarak kayıpsız' olarak kabul edilir:

ffmpeg -i input -c:v libx264 -crf 18 -preset veryfast -c:a libmp3lame -b:a 320k output.mp4

Genelde x264 ile kodlama için çok hızlı ön ayarı öneriyorum, tecrübelerime göre en iyi hız / boyut dengesini sunuyor (süper hızlı ve çok hızlı arasında dosya boyutunda büyük bir düşüş var, bundan daha yavaş ve daha kademeli). Genel tavsiye, işleyebileceğiniz en yavaş ön ayarı kullanmaktır, ön ayarlar şunlardır: ultra hızlı, süper hızlı, çok hızlı, daha hızlı, hızlı, orta, yavaş, yavaş, veryslow.

X264 kodlaması hakkında daha ayrıntılı bir kılavuz için buraya bakın .


2
veryfastKayıplı x264 için iyi bir varsayılan olarak önermeyin . mediumiyi bir orta yoldur, ancak genellikle veryslowher şeyin son kodlaması için kullanırım . Ayrıca huffyuvçok hızlı değil, uyumluluk dışında bir şey için tavsiye etmem.
Peter Cordes

ffmpeg'de [FFv1 akla geliyor] denemeye değer birkaç kayıpsız kodek daha vardır. GL!
rogerdpack

Libx264, 0 renk CRF kullansanız bile, iki renk kanalını (YUV UV'de) her iki yönde yarıya indirmez, böylece gerçekten kayıpsız olmaz. Ayrıca, yuvarlama hatalarıyla, verilerin bir x264 sıkıştırma turundan sonra bit-bit girintili olması garanti edilmez.
Adisak

1
Ffmpeg 3.4.1 ile yaptığım deneylerde, libx264 yuv444 piksel formatını kullandı; burada "444", U, V parçasını altörneklemeyin "anlamına gelir. Ve OP açıkça yuvarlama hatalarını umursamıyor: "ciddi ölçüde kayıpsız olabilir". Yani @Adisak, endişeleriniz makul, ancak bu cevap için geçerli değil.
Jim DeLaHunt

YUV modunda ffmpeg ve libx264, girdiye bağlı olarak bir YUV piksel formatı üzerinde anlaşır. Giriş YUV 4: 2: 0 ise çıkış piksel formatı da öyle olur. Giriş YUV 4: 4: 4 veya RGB ise, çıkış YUV 4: 4: 4'tür.
Gyan

2

Bugünlerde webm'i seviyorum :

ffmpeg -i input.avi -c:v libvpx-vp9 -lossless 1 output.webm

Daha hızlı dönüştürmek için, çok çekirdekli işlemcilerle, gerçek çekirdeklerden daha az iplik kullanmanız önerilir. Yani, 8 çekirdekli bu gibi 7 iplik belirtebilirsiniz:

ffmpeg -i input.avi -c:v libvpx-vp9 -threads 7 -lossless 1 output.webm

1
Kullanılacak iş parçacığı sayısını belirlemek için% NUMBER_OF_PROCESSORS% ortam değişkenini kullanmayı seviyorum. Sayı 1 veya 2 ise, tüm işlemcileri kullandım. Sayı 3 veya 4 ise, bir işlemci dışında tümünü kullanıyorum. Ve sayım daha yüksekse, iş parçacığı sayısı için iki işlemcinin dışında tümünü kullanıyorum.
Adisak

1
Bir DOS ifadesi olarak şu şekilde görünür: eğer "% ADJUSTED_CPUCOUNT%" EQU "" (% NUMBER_OF_PROCESSORS% EQU 2 ise (ADJUSTED_CPUCOUNT = 1 olarak ayarlanırsa% ADBER_OF_PROCESSORS% EQU 2 ise (ADJUSTED_CPUCOUNT = 1 olarak ayarlayın) EQU 3 (% NUMBER_OF_PROCESSORS% EQU 4 ise ADJUSTED_CPUCOUNT = 2 olarak ayarlayın)
ADJUSTED_CPUCOUNT

1
superuser.com/questions/155305/… ffmpeg'in zaten en iyi iş parçacığı sayısını seçtiğini söylüyor
Boris

Webm'den (bugünlerde) daha iyi bir seçim belki de av1 biçimidir.
LonnieBest

-1
# KONTEYNER

DVD oynatıcılarla tam uyumluluk için MPEG-2 formatı, kapsayıcı, kısıtlamalar, kodekler kullanmanız gerekir. Sanırım, "modern oyuncular" temelde ve çoğunlukla bir mp4 dosya oynatıcısı olan "mp4" uyumluluğu anlamına gelir - H.264, MPEG-4, AVC => libx264
daha fazla bilgi edinin: https://de.wikipedia.org/wiki /H.264

# VIDEO

Göz at https://trac.ffmpeg.org/wiki/Encode/H.264 o uyumluluk için, "profil" ve "düzeyinde" hakkındadır, özellikle kısmını
kullanarak -profile:v high -level 4.0yapmalı

# SES

Ses parçalarını kayıplı kodeklerle yeniden kodlamaktan kaçının - herhangi bir mp3 formatı 320kbps bile kayıplıdır. Bunun yerine
kullanın -c:a copy.

Şimdiye kadar benim için oldukça iyi bir iş çıkardı. senkronizasyon sorunu yok.
Ses akışları ana karelere bağlı değildir. Doğru kesimler mümkündür.
Ses parçanız 44kHz örnekleme hızında kaydedilmişse, maks. 256kbps

Belirli önkoşulları yerine getirmeniz gerekiyorsa, yalnızca videonuzun son kodlaması için kayıplı codec bileşenleri kullanın.

Bazı ses senkronizasyonu sorunlarını duydum, ancak ana sorun var gibi görünüyor, korunan malzeme (!).

# En sonunda

Böyle bir şeyi tercih ederim:
ffmpeg -i input -c:v libx264 -crf 5 -preset faster -profile:v high -level 4.0 -c:a copy output.mp4


"-Level 4.0" seçeneği gerekli değildir. X264'teki seviye çözünürlük ve FPS'ye göre belirlenir, bu yüzden genellikle manuel olarak ayarlamanın bir anlamı yoktur, bu hiçbir şeyi geliştirmez. Bildiğim kadarıyla ffmpeg otomatik olarak doğru seviyeyi ayarlayabilir, bu yüzden zorlamak için çok iyi bir nedeniniz yoksa ve FPS ve çözünürlüğe dayalı olarak seviyeyi nasıl seçeceğinizi tam olarak anlamadığınız sürece, "seviye" seçeneğini kullanmamalısınız. En yüksek uyumluluğu önemsiyorsanız, "yüksek" yerine "taban çizgisi" profilini kullanın.
Lissanro Rayen
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.