É possível usar ffmpeg
criar um vídeo a partir de um conjunto de seqüências, onde o número não começa do zero?
Por exemplo, tenho algumas imagens [test_100.jpg, test_101.jpg, test_102.jpg, ..., test_200.jpg] e desejo convertê-las em um vídeo. Tentei o seguinte comando, mas não funcionou (parece que o número deve começar do zero):
ffmpeg -i test_% d.jpg -vcodec mpeg4 test.avi
Algum conselho?
Respostas:
Não há necessidade de renomear arquivos se usar o
-start_number
comutador da seguinte maneira:onde
n
é o início da sequência de fotos.Observe que isso funcionará desde que a sequência seja ininterrupta quando for iniciada. Se houver lacunas e você desejar incluir todas as imagens estáticas, poderá ser necessário renumerar para preencher as lacunas.
Existem outras opções que você pode achar úteis.
Uso a seguinte linha para obter uma taxa de quadros mais lenta, compactar as imagens e obter um vídeo resultante menor:
A
-r 3
opção define a taxa de quadros do vídeo resultante como 3 quadros por segundo, para que eu possa ver cada um deles por um curto período de tempo. A-s
opção redimensiona as imagens para a resolução desejada para gerenciar o tamanho do vídeo resultante.(No shell do Windows, substitua
-i Imgp%04d.jpg
por-i "Imgp%%04d.jpg"
. Crédito para Mike Fitzpatrick https://superuser.com/a/344178/153054 )fonte
você pode usar este trecho de código abaixo:
fonte
Você pode encontrar um exemplo de script na documentação do ffmpeg :
fonte
cp
se a vinculação não funcionar, se o seu sistema de arquivos suportar,cp --reflink=auto
obterá uma velocidade / espaço muito melhores.Dos documentos de ffmpeg:
Usando um padrão glob
O ffmpeg também suporta globbing no estilo bash (* representa qualquer número de caracteres).
Isso é útil se suas imagens forem seqüenciais, mas não necessariamente em uma ordem numericamente sequencial, como nos exemplos anteriores.
Portanto, desde que seus arquivos sejam classificados, o uso do
-pattern_type glob
comutador deve funcionar para você.fonte
Até onde eu sei, você não pode iniciar a sequência em números aleatórios (não me lembro se você deve iniciá-la em 0 ou 1), além disso, ele não pode ter lacunas; caso isso ocorra, o ffmpeg assumirá que a sequência terminou e pare de adicionar mais imagens.
Além disso, conforme declarado nos comentários da minha resposta, lembre-se de que você precisa especificar a largura do seu índice. Gostar:
imagem% 03d.jpg
E se você usar um tipo de índice% 03d, precisará preencher seus nomes de arquivo com 0, como:
image001.jpg image002.jpg image003.jpg
etc.
fonte
Eu concordo com o Francisco, mas como solução alternativa, você pode simplesmente escrever um script rápido para mover ou criar links simbólicos para os arquivos com os números de sequência que o ffmpeg precisa. O script pode então chamar ffmpeg e remover os links ou mover os arquivos de volta aos seus locais originais.
fonte
olho para cima
fonte
Sei que essa é uma pergunta antiga, mas me deparei com ela no Google, procurando a mesma resposta. Nenhuma das respostas aqui me satisfez completamente, então pesquisei e li mais, e esse é um comando que eu criei para o meu próprio problema.
A razão pela qual eu usaria um comando como este é ...
fonte
-start_number
é tudo o que é necessário.Eu usei o codificador flv desde que meu vídeo estava indo em um flash player (Jwplayer)
ffmpeg -i% d.jpg -vcodec flv test.flv
fonte
A partir da documentação , parece que você pode simplesmente usar *
Como uma observação, para melhorar a qualidade, as taxas / qps podem ser importantes (por exemplo, primeiro especificando a taxa de quadros muito baixa / alta e depois passar de um segundo filtro que normalizará o vídeo em câmera lenta?)
fonte
No meu caso, foi um pouco mais complicado por causa dos números nos arquivos. Veja como minhas imagens se parecem:
e aqui está o comando que eu usei:
fonte
Você pode fazer isso com
convert -morph
:Se você quer usar
ffmpeg
, eu useionde
10*PTS
diz ao ffmpeg para abrandá-lo 10 vezes. Você também pode ter frações para acelerar.fonte
-pattern_type glob
exemplos concretos com áudioEsta opção foi mencionada em: https://superuser.com/a/782520/128124, mas aqui estão alguns exemplos concretos de seu uso, incluindo a adição de áudio ao vídeo de saída.
Vídeo de apresentação de slides com uma imagem por segundo
Adicione um pouco de música, corte quando o áudio quando as imagens terminarem:
Aqui estão duas demos no YouTube:
Seja um hippie e use o formato de vídeo livre de patente Theora :
Suas imagens devem, obviamente, ser classificadas em ordem alfabética, geralmente como:
e assim por diante.
Consulte também: http://unix.stackexchange.com/questions/68770/converting-png-frames-to-video-at-1-fps/339399#339399
Vídeo em velocidade normal com uma imagem por quadro a 30 FPS
Aqui está o que parece:
GIF gerado com: https://askubuntu.com/questions/648603/how-to-create-an-animated-gif-from-mp4-video-via-command-line/837574#837574
Adicione um pouco de áudio a ele:
Resultado: https://www.youtube.com/watch?v=HG7c7lldhM4
Converta um arquivo de música em um vídeo com uma imagem fixa para upload do YouTube
Respondida em: Como converter MP3 para o formato de vídeo permitido pelo Youtube?
Obtenha algumas imagens de entrada de teste sintéticas
Estas são as imagens de teste que eu tenho usado nesta resposta:
Imagens geradas com: https://stackoverflow.com/questions/3191978/how-to-use-glut-opengl-to-render-to-a-file/14324292#14324292
É legal observar o quanto o vídeo compacta a sequência de imagens muito melhor do que o ZIP, pois é capaz de comprimir quadros através de algoritmos especializados:
opengl-rotating-triangle.mp4
: 340Kopengl-rotating-triangle.zip
: 7.3MSobre as opções da CLI
Observe no entanto que, apesar do nome,
-glob
isso não é tão geral quanto os padrões do shell Glob, por exemplo:-i '*'
falha: https://trac.ffmpeg.org/ticket/3620 (aparentemente porque o tipo de arquivo é deduzido da extensão).-r 30
faz o-framerate 1
vídeo 30 FPS para superar bugs em players como o VLC para taxas de quadros baixas: https://stackoverflow.com/questions/19267443/playback-issues-in-vlc-with-low-fps-video-from-images-using- ffmpeg / 41797724 # 41797724 Portanto, repete cada quadro 30 vezes para manter o efeito de 1 imagem por segundo desejado.Próximos passos
Você também vai querer:
corte um pouco de áudio para corresponder à duração do vídeo: https://stackoverflow.com/questions/18444194/cutting-the-videos-based-on-start-and-end-time-using-ffmpeg
adicione o áudio cortado: Como mesclar arquivos de áudio e vídeo no ffmpeg
TODO: aprenda a cortar e concatenar vários arquivos de áudio no vídeo na linha de comando:
Testado em
ffmpeg 3.4.4, vlc 3.0.3, Ubuntu 18.04.
Bibliografia
fonte