Como obter comprimento do arquivo de vídeo do console?

21

Suponha que tenhamos um arquivo de vídeo, some_video.

Como obter o tamanho de um script de shell (com o mplayer / transcode / gstreamer / vlc / ffmpeg / whatever)?

VIDEO_LENGTH_IN_SECONDS='ffmpeg .... -i some_video ... | grep -o .....'
    
por Vi. 25.11.2011 / 13:13

2 respostas

24
ffprobe -i some_video -show_entries format=duration -v quiet -of csv="p=0"

retornará a duração do vídeo em segundos.

    
por 02.07.2014 / 19:43
19

Algo parecido com:

ffmpeg -i input 2>&1 | grep "Duration"| cut -d ' ' -f 4 | sed s/,//

Isso entregará: HH:MM:SS.ms . Você também pode usar ffprobe , que é fornecido com a maioria das instalações do FFmpeg:

ffprobe -show_format input | sed -n '/duration/s/.*=//p'

… ou:

ffprobe -show_format input | grep duration | sed 's/.*=//')

Para converter em segundos (e reter os milissegundos), canalize para:

awk '{ split($1, A, ":"); print 3600*A[1] + 60*A[2] + A[3] }'

Para convertê-lo em milissegundos, canalize para:

awk '{ split($1, A, ":"); print 3600000*A[1] + 60000*A[2] + 1000*A[3] }'

Se você quiser apenas os segundos sem os milissegundos, canalize para:

awk '{ split($1, A, ":"); split(A[3], B, "."); print 3600*A[1] + 60*A[2] + B[1] }'

Exemplo:

    
por 25.11.2011 / 13:26