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.
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
This policy contains information about your privacy. By posting, you are declaring that you understand this policy:
This policy is subject to change at any time and without notice.
These terms and conditions contain rules about posting comments. By submitting a comment, you are declaring that you agree with these rules:
Failure to comply with these rules may result in being banned from submitting further comments.
These terms and conditions are subject to change at any time and without notice.
Comentários (1)
Parabéns! Estava procurando por esta solução.