Como posso obter a duração do vídeo em segundos?
O que eu tentei:
ffmpeg -i file.flv 2>&1 | grep "Duration"
Duration: 00:39:43.08, start: 0.040000, bitrate: 386 kb/s
mediainfo file.flv | grep Duration
Duration : 39mn 43s
É isso que fecha, mas não é tão preciso, 2383 é 39,71 minutos
ffmpeg -i file.flv 2>&1 | grep "Duration"| cut -d ' ' -f 4 | sed s/,// | sed 's@\..*@@g' | awk '{ split($1, A, ":"); split(A[3], B, "."); print 3600*A[1] + 60*A[2] + B[1] }'
2383
Respostas:
Para obter minutos, é necessário dividir 2383 segundos por 60.
e multiplique a parte fracionária 0,7167 por 60 para obter os segundos restantes.
Então são 39 minutos, 43 segundos. O aplicativo parece estar fornecendo um valor exato.
fonte
Basta usar
ffprobe
diretamente. Não há necessidade desed
,grep
etc. Existem várias "durações" que você pode adquirir (dependendo da sua entrada).Duração do formato (contêiner)
A adição da
-sexagesimal
opção utilizará o formato da unidade de tempo HOURS: MM: SS.MICROSECONDS:Duração do fluxo de vídeo
Os comandos acima são do FFmpeg Wiki: Dicas do FFprobe .
Com
ffmpeg
Pode ser necessário decodificar completamente a entrada se você achar que a duração do contêiner ou do fluxo está ausente ou imprecisa (possivelmente devido a um arquivo danificado ou truncado).
Neste exemplo
time=00:01:03.48
é a duração:Quanto tempo isso levará, é claro, dependerá da complexidade e duração da decodificação de sua entrada e dos recursos do seu computador.
fonte
ffmpeg
seção " Com ".Se você tiver
ffmpeg
, você também deve terffprobe
:Isso também fornecerá frações de segundos, se for um problema, você poderá processar isso com o sed.
fonte
printf
, como| xargs printf %.0f
- isso retornará um valor inteiro.Para o meu ffmpeg-0.6.5-1.el6.rf.x86_64, para obter apenas o segundo, o formato do comando ffprobe é:
fonte
Solução com mplayer que fornece segundos diretamente:
fonte
Isso gera a duração em milissegundos como um único valor inteiro. Não há necessidade de grep / cut / sed / ...
fonte
brew install mediainfo
Me deparei com a questão de obter alguns metadados estranhos e incorretos de alguns arquivos de vídeo com os quais estava trabalhando e não consegui encontrar um padrão ou qualquer tipo de manipulação usando código e ferramentas como ffmpeg, mp4box, ffprobe, mediainfo, mplayer, para obter a duração real do vídeo.
Identificar a duração real do vídeo era um requisito para um projeto em que eu estava trabalhando, e a única maneira de encontrar o caminho certo era recodificar o arquivo de vídeo usando o ffmpeg e forçando os arquivos codificados a ignorar os metadados do arquivo original, como:
(Isso pode correr mais rápido do que o esperado. Fiquei surpreso, pelo tipo de conteúdo e pelo ambiente que estava usando, o tempo médio foi de 2 segundos)
... e obtenha duração usando uma ferramenta de sua escolha. Eu gosto do mediainfo, btw: - "mediainfo FILE --Inform =" Video;% Duration% "fornece a duração em milissegundos.
fonte
Se você precisar apenas consultar metadados:
[...]
[...]
Então você pode analisá-lo:
Mas se você deseja obter a duração efetiva do contêiner, é necessário decodificá-lo:
Levará algum tempo de CPU para decodificá-lo, até:
[...]
Em seguida, você pode analisá-lo:
fonte
Se você quer uma duração PRECISA, esqueça o FFmpeg. Ele fornece apenas uma estimativa com base no tamanho do arquivo e na taxa de bits média. Descobri, em alguns casos, o tempo estimado de duração em 2x!
No Linux, se o arquivo for criado e modificado apenas durante a gravação de vídeo, uma solução alternativa seria usar o tempo de criação e última modificação para calcular a duração, como em:
fonte