Eu tenho um arquivo de vídeo e quero obter o número de quadros de vídeo nele. Eu posso usar ffmpeg
para obter a duração do vídeo e do FPS. No entanto, não vejo nada óbvio para o número total de quadros.
Em teoria, deve-se conseguir multiplicar a duração (em segundos) pelo FPS para obter o número de quadros, mas, neste caso, a duração (34,43 segundos) e a taxa de quadros (29,97 fps) fornecem um não inteiro, o que me faz acho que estou fazendo algo errado.
Eu preciso ser capaz de fazer isso na linha de comando de maneira totalmente automatizada e não gráfica. Eu também preciso que isso seja bem exato, e não uma estimativa (se isso é possível com arquivos de vídeo)
Eu tentei usar tcprobe
em alguns arquivos. Para alguns arquivos AVI, ele funciona, mas para alguns arquivos VOB, a saída do tcprobe não possui o número de quadros. Eu recebo esta saída:
[tcprobe] MPEG program stream (PS)
[tcprobe] summary for myfile.vob, (*) = not default, 0 = not detected
import frame size: -g 720x480 [720x576] (*)
aspect ratio: 4:3 (*)
frame rate: -f 29.970 [25.000] frc=4 (*)
PTS=2199.3972, frame_time=33ms bitrate=7000 kbps
audio track: -a 0 [0] -e 48000,16,5 [48000,16,2] -n 0x2000 [0x2000] (*)
PTS=2199.2763, bitrate=192 kbps
-D 3 --av_fine_ms 20 (frames & ms) [0] [0]
fonte
Respostas:
Isso é horrível, estúpido e lento, mas parece funcionar:
Também funcionará corretamente em arquivos truncados e fluxos brutos (é por isso que você não obtém nada para arquivos .vob)
fonte
| tr ^M '\n'
e|tail -n 1
. Além disso, nenhum espaço depoisframes=
não falha. (Talvez alguma coisa mudou nos últimos quatro anos.)ffprobe
pode ser usado para obter informações sobre um arquivo de mídia:Você obterá detalhes sobre o fluxo:
Procure
nb_frames
comgrep
:Isso funciona para avi, mp4 e etc. Para alguns contêineres, ele não mostra um valor válido, por exemplo, mpeg.
Nesse caso, isso funciona
ffprobe -show_packets a.mpg 2>/dev/null | grep video | wc -l
fonte
Eu postei isso em outra pergunta . Usando a
tcprobe
ferramenta (dotranscode
pacote), o número de quadros é incluído nas informações. Use a-i
opção para obter um despejo de informações do arquivo:Observe o número de quadros aqui em duas linhas (2ª linha de saída e última linha de saída).
fonte
Descobri que
mediainfo --fullscan inputfile | grep "Frame count"
funciona muito bem para a maioria dos arquivos.Os sistemas Debian podem instalá-lo com
apt-get install mediainfo
Se você obtiver 2 linhas em vez de uma saída, a primeira linha é a faixa de vídeo e a segunda linha é a faixa de áudio. Parece que isso ocorre em arquivos com áudio de taxa de bits variável.
Testado em amostras .mkv, .m4v, .mp4, flv, vob e .avi na data da edição.
Fontes: Como recuperar informações de arquivos de vídeo da linha de comando no Linux? e teste sob os sabores do Ubuntu.
Você pode encontrar informações de mídia disponíveis para o seu sistema operacional aqui.
fonte
Adicione a duração. Poderia ser mais chique com sed / awk e quais não.
De nossos testes, posso dizer que, por enquanto, ele se mostrou o melhor e mais confiável. Você obtém uma contagem de quadros precisa e duração exata. Mesmo com taxa de quadros variável em que todas as outras ferramentas, como mediainfo, parecem loucas.
fonte
Descobri que o número de quadros é na verdade o dobro da duração de fps * (não faço ideia do porquê, ficaria feliz em saber).
Em um script meu, eu tenho:
E sim, por algum motivo eu tenho que pegar a parte inteira. Não faz sentido, mas esse script sempre conseguiu converter meus vídeos adequadamente até o momento.
fonte
tcprobe
saída na minha resposta fornece o número de quadros exatamente como segundos * fps (arredondado para cima). Espero que você esteja vendo uma peculiaridade do ffmpeg. você tentou analisar o arquivo com outras ferramentas para ver se elas mostram o mesmo número de quadros?seconds*fps=1001.59
etcprobe=1002
. Então, obviamente,tcprobe
me diz que não preciso multiplicar por dois. Por que, então, o ffmpeg me fornece um número duas vezes maior nos logs durante a conversão?Testado no Ubuntu.
melt
- derreter foi concebido como uma ferramenta de teste para a estrutura MLT, mas também é um poderoso editor de vídeo multitrack orientado à linha de comando. Também poderia ser usado como um media player minimalista para arquivos de áudio e vídeo.-consumer
id [: arg] [name = value] *Defina o consumidor (coletor)
xml
- Defina o consumidor (coletor) como saída formatada em xml<property name="length">nnnn</property>
- mostra o número de quadros, ondennnn
é substituído por um número inteiro igual ao número de quadrosSe você não derrete, pode instalá-lo no Ubuntu e em outros sistemas baseados no Debian com
sudo apt-get install melt
fonte
mediainfo -fullscan filename
.Diretamente com
mediainfo
, sem grep, sem espera, sem nada:Para outras informações, consulte
mediainfo --info-parameters
fonte
Você pode fazer isso adicionando e multiplicando os valores obtidos do ffprobe.
Nota: o ffprobe faz parte do libav (avconv) - a versão linux do ffmpeg.
Ao fazer isso, você obterá o número de quadros por segundo e também a duração do clipe.
Converta a duração do clipe em segundos e multiplique esse valor pelo número de quadros / segundo.
Lembre-se de arredondar o número para o mais próximo.
fonte
ffprobe
não estiver disponível, mas existe algo chamadoavprobe
emlibav-tools
(que também forneceavconv
). Mas, ao meu lado, não imprime nenhum número de quadros, pelo menos não para os formatos que tentei. Apenas imprime, o queavprobe -i
imprime também, e isso é apenas alguns pequenos detalhes sobre o formato, infelizmente. Mesmo com-v debug
isso, apenas me informa algumas propriedades agradáveis do meu hardware e software instalado, mas nenhuma informação interessante sobre o arquivo / fluxo a ser analisado. Talvez ele se esconda em algumas das inúmeras opções disponíveis. Quem sabe?ffmpeg
nos repositórios oficiais. O link que você forneceu indica corretamente: O FFmpeg retornou no Ubuntu 15.04 "Vivid Vervet". . No entanto, a situação agora mudou quando 16.04 LTS saiu.linux
rubi
fonte
Melhor método: (Direto calculando os parâmetros corretos, confirmados por ffmpeg)
Cmd ->
Resultado ->
Cálculo ->
Prova ->
Aqui
Saída
fonte