Eu tentei usar o FFMPEG para converter uma única imagem de 640x480 (no meu caso, uma imagem PNG de 8bpp, embora eu provavelmente tenha que fazer isso com outros tipos e qualidades de imagem) para um arquivo XVID AVI de 10 segundos sem trilha de áudio. Eu estou executando isso em um looper de vídeo de propósito especial mais antigo que requer o XVID AVI. Ele afirma ter uma profundidade de cor de 16bpp em sua tela VGA (640 x 480). Sim, não estamos falando de alta ou nova tecnologia. Este é um "oh, você sabe sobre computadores?" projeto para um amigo.
Não sou especialista em FFMPEG ou mesmo usuário comum. Eu desmembramento a cada 6-9 meses para atacar algum problema estranho como este que vem do meu jeito.
Idealmente, estou criando uma apresentação de slides em vídeo. Mas as várias tentativas que eu tentei resultam em arquivos AVI que são "blocky" na reprodução, ou acabam com seções "piscando" onde algumas pequenas seções mudam de cor conforme o vídeo é reproduzido.
Eu tentei converter para arquivos de saída de 1 fps, e tentei criar 10 cópias do arquivo de entrada com nomes sequenciais e criar um 1 fps (e tentar de 3 a 5 fps como um experimento) da lista de seqüenciais arquivos.
Eu tentei aumentar a taxa de dados de vídeo -b: v 1000K e isso ajuda. Eu tentei -b: v 2000k e isso ajuda alguns, mas não muito.
Eu tento restringir a taxa de quadros de saída porque, uma vez que a imagem é mostrada, ela realmente não deve mudar muito. Se eu deixar o FFMPEG usar seus padrões, recebo um vídeo de 25 fps que é muito grande e, honestamente, a qualidade não é muito melhor - ainda recebo as seções "piscando".
Eu tentei codificações de uma e duas passagens com base em alguns exemplos que encontrei no Google e neste site. O two-pass parece um pouco melhor, mas é subjetivo.
Existe alguma maneira de fazer com que o FFMPEG faça uma cópia de alta qualidade da imagem de entrada inicialmente e depois classifique de "costa" porque ela não muda?
Por pedido de linhas de comando tentadas:
Para converter uma imagem JPG 640x480 73KB (por Irfanview, 24bpp, 34849 cores exclusivas)
ffmpeg.exe -f image2 -loop 1 -t 10 -i lion3.jpg -s 640x480 -aspect 4:3 -r 1 -vcodec libxvid -b:v 1000k lion3_jpg_dr1000k_r01.avi
A qualidade é muito boa nisso e o tamanho do arquivo termina em 100 KB.
Se eu salvar o arquivo como um GIF (8bpp, 254 cores exclusivas, tamanho de arquivo de 214 KB) e apenas um quadro, tentei a seguinte conversão:
ffmpeg.exe -r 1/10 -i lion3.gif -s 640x480 -aspect 4:3 -r 1 -vcodec libxvid -b:v 1000k -vsync cfr lion3_gif_dr1000k_r01.avi
O comando JPG não funcionou no GIF (acho que não é uma surpresa), e os parâmetros acima foram reunidos a partir de vários exemplos encontrados on-line.
O AVI resultante da conversão GIF tem um monte de blocos "cintilantes" em partes do plano de fundo - há mudanças óbvias acontecendo durante os 10 segundos que o vídeo é exibido na tela.
Eu então encontrei exemplos de juntar várias imagens para criar um vídeo, então fiz dez cópias da imagem, com 01 a 10 adicionadas, e executei este
ffmpeg.exe -f image2 -framerate 1 -i image_%02d.png -c:v libxvid -vtag xvid -bf 0 -pix_fmt yuv420p -vf "fps=1" -b:v 2000K image_img_fps01_2000k_yuv420p_img2_bf0.avi
O resultado disso foram algumas áreas que eram inicialmente muito blocky e elas meio que resolveram um pouco ao longo do tempo. Mas na imagem original, a mesma área é um conjunto de pequenas áreas cinzas pretas e pretas, talvez 2x2 pixels. O AVI resultante tem blocos parecidos com 8x8 ou maiores.
Espero que ajude a entender o que eu estava tentando.