De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.


ffmpeg - obter a duração de um vídeo

Colaboração: Rubens Queiroz de Almeida

Data de Publicação: 03 de julho de 2020

Recentemente eu tive que gravar diversos vídeos para um curso. Para obter o tempo total de todos os vídeos, eu precisei descobrir qual a duração de cada um dos vídeos. Eu poderia fazer isto abrindo cada um dos vídeos para ver sua duração.

Mas com a linha de comandos tudo fica muito mais fácil. O comando ffmpeg pode ser usado para esta finalidade.

Veja só:

$ ffmpeg -i video.mp4
ffmpeg version 3.4.6-0ubuntu0.18.04.1 Copyright (c) 2000-2019 the FFmpeg developers
  built with gcc 7 (Ubuntu 7.3.0-16ubuntu3)
    encoder         : Lavf58.29.100

... Dezenas de linhas removidas ...

  Duration: 00:00:06.17, start: 0.000000, bitrate: 3281 kb/s

... mais linhas removidas ...      

É muita informação, o que eu preciso é apenas a informação que está em vermelho. Então vamos melhorar um pouco mais o meu comando:

$ ffmpeg -i video.mp4 2>&1 | grep "Duration"
 Duration: 00:00:06.17, start: 0.000000, bitrate: 3281 kb/s 

Ficou melhor, mas ainda tem informação que não me interessa. Então vamos melhorar ainda mais um pouquinho:

$ ffmpeg -i video.mp4 2>&1 | grep "Duration"| cut -d ' ' -f 4 | sed s/,//
00:00:06.17

Maravilha, agora só tenho a duração do vídeo, 6 segundos. O comando

cut -d ' ' -f 4

utiliza como delimitador o espaço em branco (-d ' ') e manda imprimir o quarto campo (-f 4). Importante, a linha que contém a palavra Duration: é precedida por dois espaços em branco. É fundamental entender isto para que você possa selecionar o campo correto com o comando cut.

E finalmente, o comando sed remove a vírgula após a duração do vídeo (00:00:06.17,).

E se você quiser gerar um relatório com a duração de vários vídeos, pode fazer algo como:

$ cat duration.sh
#!/bin/bash

:> lista.txt

for video in *.mp4
do
  echo -n "$video: "  >> lista.txt
  ffmpeg -i $video 2>&1 | grep "Duration"| cut -d ' ' -f 4 | sed s/,// >> lista.txt
done

Adicionar comentário

* Campos obrigatórios
5000
Powered by Commentics

Comentários (1)

Avatar
Novo

Parabéns! Estava procurando por esta solução.



Veja a relação completa dos artigos de Rubens Queiroz de Almeida