avconv'da görüntülenen imagemagick resim dönüştürme başarısız


3

Her türlü görüntüyü (format, boyut ...) çekmesi gereken bir komut dosyası yazmaya ve avconv ile bir video oluşturmaya çalışıyorum. Bir dizi jpg ile çalışmasını sağladım (aynı boyutta olsa da) ve şimdi tüm görüntüleri boyut ve formatta benzer yaparak videoyu oluşturacağından emin olmak için convert kullanmaya çalışıyorum. İşte nasıl yaparım:

(for J in $(ls "$1/"* 2> /dev/null); do
     convert "$J" -resize 640x480 -gravity center \
             -size "$FORMAT" -fill black -extent 640x480 jpg jpeg:-
done) | avconv -f image2pipe -r 1/5 -c:v mjpeg -i - \
               -vcodec libx264 -r 20 -f mpegts video.mpeg

Avconv'un döndürdüğü bir dizi resim buldum:

Input stream #0:0 frame changed from size:640x480 fmt:yuvj420p to size:160x120 fmt:yuvj422p
Input stream #0:0 frame changed from size:160x120 fmt:yuvj422p to size:320x240 fmt:yuvj422p
Input stream #0:0 frame changed from size:320x240 fmt:yuvj422p to size:88x128 fmt:yuvj420p
[mjpeg @ 0x101838800] only 8 bits/component accepted
 Error while decoding stream #0:0
 Input stream #0:0 frame changed from size:88x128 fmt:yuvj420p to size:120x160 fmt:yuvj420p

Kontrol ettim ve sadece convert kullandığımda görüntü iyi görünüyor. Görüntüyü avconv'un çalışması için mükemmel bir şekilde aynı yapmak için dönüştürecek bir şeyim yok sanırım. Ama gerçekten bulamıyorum

Yardımınız için teşekkürler!

DÜZENLE

Bu yüzden araştırmadan sonra, bunun aynı çözünürlük ve / veya örnekleme oranına sahip olmayan çıktı görüntülerinden kaynaklandığı görülmektedir. Bu yüzden bunu denedim:

(for J in $(ls "$1/"* 2> /dev/null); do
    convert "$J" -background '#000000' -resize "640x480" 
                 -gravity center -extent "640x480" -sampling-factor '4:2:2' 
                 -resample '72x72' jpeg:-
done) | 
avconv -f image2pipe -r 1/5 -c:v mjpeg -i - 
       -vcodec libx264 -r 30 "foo.mpeg"

Yine de başarılı olamadım ...

Input stream #0:0 frame changed from size:640x480 fmt:yuvj422p to size:160x120 fmt:yuvj422p
Input stream #0:0 frame changed from size:160x120 fmt:yuvj422p to size:320x240 fmt:yuvj422p
Input stream #0:0 frame changed from size:320x240 fmt:yuvj422p to size:88x128 fmt:yuvj420p
[mjpeg @ 0x101838800] only 8 bits/component accepted
Error while decoding stream #0:0
Input stream #0:0 frame changed from size:88x128 fmt:yuvj420p to size:120x160 fmt:yuvj420p

boru :: Giriş /

İşte kullandığım resim:

Bu yardımcı olur umarım...

Yanıtlar:


3

Çok fazla arama yaptıktan sonra nihayet çalışan bir şey buldum (en azından birkaç test dosyamla):

convert "$J" -background '#000000' -resize "$FORMAT" \
        -gravity center -extent "$FORMAT" -strip \
        -sampling-factor '4:2:2' -type TrueColor jpeg:- | \
avconv -f image2pipe -r 1/"$DURATION" -c:v mjpeg -i - \
       -vcodec libx264 -r 20 -f mpegts "$RESULT_FILE"

Önemli seçenekler:

  • -strip girişten tüm ekstra bilgileri siler (örneğin, Renk profilim veya bazı EXIF ​​verilerim vardı).
  • -sampling-factor '4:2:2' Bu, jpeg örnekleme faktörünü 4: 2: 2 olarak düzeltir (4: 2: 2'den daha akıllıca bir seçim olduğunu düşünüyorsanız lütfen söyleyin)
  • -type TrueColor bu test edilmemiştir, ancak gri skalalı bir görüntü, bu seçeneklerin tümünde aynı renk kodlamasını kullanması için TrueColors'a dönüştürmeye zorlayan jpeg'de tutulacak farklı bir formata sahip olacaktır.

Bu benim sorunlarımı çözdü ftm. Lütfen başka bir şey görürseniz söyleyin ... Thx

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.