Use apenas ffprobe
diretamente. Não há necessidade de sed
, grep
, etc. Existem várias "durações" que você pode adquirir (dependendo da sua entrada).
Duração do formato (contêiner)
$ ffprobe -v error -show_entries format=duration \
-of default=noprint_wrappers=1:nokey=1 input.mp4
30.024000
Adicionar a opção -sexagesimal
usará o formato de unidade de tempo HOURS: MM: SS.MICROSECONDS:
0:00:30.024000
Duração do fluxo de vídeo
$ ffprobe -v error -select_streams v:0 -show_entries stream=duration \
-of default=noprint_wrappers=1:nokey=1 input.mp4
30.000000
Os comandos acima são de Wiki do FFmpeg: Dicas do FFprobe .
com ffmpeg
Você pode precisar decodificar completamente a entrada se achar que a duração do contêiner ou do fluxo está ausente ou imprecisa (possivelmente devido a um arquivo danificado ou truncado).
$ ffmpeg -i input.mp4 -f null -
…
frame= 1587 fps=0.0 q=0.0 Lsize=N/A time=00:01:03.48 bitrate=N/A
Neste exemplo, time=00:01:03.48
é a duração:
O tempo que isso levará dependerá, é claro, da complexidade e duração da decodificação de sua entrada e das capacidades do seu computador.