2015-08-21 27 views
8

Mov/MJPEG olarak kodlamak istediğim bir sürü mov/H.264 dosyası var. Ancak çok düşük kaliteli çıktı alıyorum. İşte denedim ne: -crf ve -preset bayrakları kodlayan H.264 içinffmpeg, MJPEG kodlaması için daha yüksek kaliteli görüntüler oluşturur

ffmpeg -i a.mov -an -crf 11 -preset slower -pix_fmt yuv420p -vcodec mjpeg -f mov -y b.mov 

yüksek kalite üretir. Ama bu MJPEG için işe yaramıyor.

+1

mjpeg yalnızca çerçeve içi sıkıştırma düzenidir. Bir çerçeveye bakar, jpeg özellikleriyle sıkıştırır, ardından bir sonraki kareye gider. Bunun -crf olması mantıklı değil. -crf, çerçeveler arası sıkıştırma şeması için bir protokoldür; burada algoritma, veri hızını sıkıştırmanın yolları için karelere bakıp disk alanını kaydetmeyi dener. Ben ne SO ne SU ne bir video.stackexchange.com sorulacak ffmpeg soruları öneririm. – fredsbend

cevap

17

MJPEG ffmpeg için varsayılan olarak kullan -q:v

muhtemelen -b:v 200k varsayılan kullanacaktır. Bu, 10 yıl önce varsayılan olarak ayarlandığında iyi oldu (yaşı tahmin ediyorum), ama artık değil.

Bunun yerine -q:v'u kullanabilirsiniz. MJPEG için etkili aralık, 2-31'lik bir doğrusal ölçekdir ve daha düşük bir değer, daha yüksek bir kaliteli çıktıya neden olur.

Huffman optimizasyonunu uygulamak istiyorsanız -huffman optimal'u ekleyin. Biraz daha küçük bir çıktı dosya boyutuyla sonuçlanabilir.

Örnek

ffmpeg -i input.mov -c:v mjpeg -q:v 3 -huffman optimal -an output.mov 

Özel seçenekler MJPEG kodlayıcı -crf ve -preset kullanmaz

; Bazı kodlayıcılar için bunlar "private" options. Bunun gibi özel seçenekleri görebilirsiniz: ffmpeg -h encoder=mjpeg.