Estou tentando escrever um script que deve pegar todo tipo de imagem (formato, tamanho ...) e criar um vídeo com o avconv. Eu consegui fazer funcionar com uma série de jpg (todos do mesmo tamanho) e agora estou tentando usar o convert para ter certeza de que ele irá criar o vídeo, tornando todas as imagens similares em tamanho e formato. Aqui está como eu faço:
(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
Eu tenho uma série de imagens em que o avconv retorna:
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
Eu verifiquei e a imagem parece ok quando estou usando apenas convert. Eu acho que estou faltando algo em converter para tornar a imagem perfeitamente idêntica para avconv para o trabalho. Mas eu não consigo encontrá-lo
Thx pela sua ajuda!
EDITAR
Então, depois de investigar isso, parece que as imagens de saída não têm a mesma resolução e / ou taxa de amostragem. Então eu tentei isso:
(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"
Ainda não há sucesso ...
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
pipe :: Entrada /
Aqui está a imagem que eu uso:
Espero que isso ajude ...