Como verificar quanto tempo um vídeo (mp4) está usando o shell?

13

Eu preciso fazer o upload de todos os arquivos mp4 em um diretório com tamanho > 4 minutos usando o shell. Não consigo encontrar nenhum script para verificar quanto tempo um vídeo é. Alguém tem ideia de como fazer isso?

Muito obrigado!

    
por Thomas 01.12.2012 / 14:06

6 respostas

20

Isso lhe dará a duração de um vídeo.

ffmpeg -i myvideo 2>&1 | grep Duration | cut -d ' ' -f 4 | sed s/,//
    
por per 01.12.2012 / 14:58
5

Mediainfo é uma ferramenta rápida para este propósito:

$ mediainfo --Inform="Video;%Duration%"  [inputfile]

Você pode encontrar mais opções em uma resposta mais detalhada .

Nos meus testes, ffprobe demora 0,3 segundos e mediainfo demora 0,09 segundos.

    
por qubodup 05.09.2016 / 22:02
5

Você pode tentar usar o comando avconv .

Primeiro você deve instalar:

se você digitar o comando com o sinalizador -i, você receberá informações sobre o vídeo:

avconv -i test.mp4

Na saída, há um campo chamado Duração

avconv version 0.8.4-4:0.8.4-0ubuntu0.12.04.1, Copyright (c) 2000-2012 the Libav developers
  built on Nov  6 2012 16:51:33 with gcc 4.6.3
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'test.mp4':

  Duration: 00:58:28.05, start: 0.000000, bitrate: 888 kb/s
    Stream #0.0(eng): Video: h264 (High), yuv420p, 720x404, 748 kb/s, 25 fps, 25 tbr, 20k tbn, 50 tbc
    Stream #0.1(und): Audio: aac, 48000 Hz, stereo, s16, 127 kb/s

Agora você pode usar o comando para obter apenas o valor do campo Duration

Tipo:

avconv -i file.mp4 2>&1 | grep 'Duration' | awk '{print $2}' | sed s/,//

No meu caso, o resultado é:

00:58:28.05

58 minutos e 28,05 segundos.

Espero que isso seja útil!

    
por Roman Raguet 01.12.2012 / 15:05
3

exiftool (originalmente destinado à leitura de metadados de câmera a partir de arquivos de imagem, mas depois expandido para leitura e escrever metadados de quase qualquer tipo de arquivo de mídia) é muito conveniente de usar para isso. Execute-o com:

exiftool FILE.mp4 | grep Duration

Você provavelmente precisará instalar o exiftool primeiro, mas isso é feito facilmente com o seguinte comando (no Debian e derivados como o Ubuntu etc.):

apt install libimage-exiftool-perl

Claro, essa resposta é apenas outra alternativa. Muitas das outras respostas também são boas. :)

    
por zrajm 10.09.2017 / 15:29
0

Ainda mais simples:

avprobe file.mp4 -show_format_entry duration
    
por Joan Albert Silvestre 13.04.2016 / 16:30
0

Adicionando solução pers , isso pode ser usado em um diretório inteiro:

for f in *; do ffmpeg -i "$f" 2>&1 | grep Duration | cut -d " " -f 4 | sed s/,//  | tr -d "\n" && echo " $f"; done

pode até mesmo ser estendido por | sort para que os arquivos sejam classificados por seu tamanho.

você pode adicionar isso a .bashrc ou .bash_aliases para poder fazer lsvlength | sort em um diretório

alias lsvlength='for f in *; do ffmpeg -i "$f" 2>&1 | grep Duration | cut -d " " -f 4 | sed s/,//  | tr -d "\n" && echo " $f"; done'
    
por mcnesium 14.02.2017 / 12:16