Como copiar, cortar e colar trechos de um vídeo no Linux com o ffmpeg

O Linux tem ótimos editores de vídeo gráficos (GUI) e que podem ser usados para copiar trechos de um vídeo.
Neste tutorial, vou mostrar como realizar uma operação de edição — copiar/cortar um trecho de um vídeo e colar em um novo arquivo — usando a linha de comando (CLI).

O objetivo deste tipo de procedimento é criar um outro arquivo de vídeo, contendo apenas o trecho que você selecionou.

No meu exemplo, vou usar o arquivo de vídeo ‘video_original.mp4’, com 1 hora de duração.
Vamos supor que eu esteja interessado apenas em um trecho de 15 minutos, que desejo postar nas redes sociais.
Se o trecho começa aos 34 minutos e 14 segundos, o meu comando ficaria assim:


ffmpeg -i video_original.mp4 -vcodec copy -acodec copy -ss 00:34:14 -t 00:15:00 trecho001.mp4

Entenda melhor o comando:

  • -i — opção input onde é indicado o nome do vídeo (video_original) sobre o qual o procedimento será realizado (ele não sofrerá alterações).
  • -vcodec copy‘ e ‘-acodec copy‘ — indica que os codecs originais de vídeo e áudio serão copiados e mantidos sem alterações.
  • -ss 00:34:14 — indica para iniciar a copia às 00h:34m:14s.
  • -t 00:15:00 — indica a duração da cópia.
  • por fim, fica especificado o arquivo de saída trecho001.mp4.

Se quiser extrair outros trechos, basta repetir o procedimento, alterando os números referentes ao ínicio e à duração.
Depois, se quiser, pode juntar os trechos retirados do arquivo original em um novo arquivo. Veja como:


cat trecho001.mp4 trecho002.mp4 > novo_arquivo.mp4

O procedimento acima costuma funcionar para mim, mas não é muito confiável para ser realizado com todo tipo de arquivo.
Mas, neste caso, sugiro usar um editor GUI, por que ele permite fazer a junção com algum efeito, o que evitaria obter um resultado “cru” e mau acabado.

Qual a vantagem de fazer a edição de vídeo na CLI, se tem tantos ótimos editores gráficos?

Se você executou os procedimentos acima, talvez tenha percebido o quanto foram rápidos e, melhor ainda, quase não consumiram os recursos do seu hardware.
Ferramentas CLI, como o ffmpeg e o avconv (entre outras) são muito convenientes quando temos procedimentos simples para realizar — neste caso, fazer cortes “secos” no vídeo, sem qualquer transição.
Deixe as ferramentas GUI para realizar tarefas mais complexas ou que exijam que você seja mais minucioso.
Sugiro, ainda, guardar esta página no seu menu Favoritos (Ctrl + D). Quando precisar cortar vídeos de novo, basta voltar aqui, copiar, colar o comando e editar seus parâmetros e opções.


Não esqueça de dar uma olhada no tutorial como girar um vídeo com o ffmpeg.

Como criar scripts a partir do histórico de comandos do MySQL

As queries ou consultas feitas no cliente interativo MySQL, que funcionam bem, podem ser facilmente convertidas em scripts para automatizar suas tarefas ou adiantar o seu trabalho como desenvolvedor — seja qual for a sua linguagem de programação.
Logo MySQL sobre um fundo com um lago e um barco
A solução relatada neste artigo permite reusar as queries, de uma sessão anterior do MySQL, que estão funcionando para você, em um script.

Use um arquivo tee ou o histórico do MySQL

Uma das formas de reusar as queries MySQL, dentro de um script, é buscá-las a partir de um arquivo tee.
No artigo, Como guardar o histórico dos comandos no MySQL em um arquivo externo, eu explico o procedimento em detalhes.
Outra forma, é buscar as queries no arquivo de histórico padrão do MySQL, importar o texto e ir retirando tudo o que não serve ao seu script.
Neste caso, comece por digitar suas queries no cliente MySQL, normalmente — se certificando de que estejam funcionando sintaticamente e entregando os resultados desejados.
Em seguida, saia do MySQL, com o comando quit e liste o arquivo do histórico da sua sessão, da linha de comando:

cat .mysql_history

No Linux, o arquivo do histórico costuma ficar armazenado no seu diretório home.
Experimente combinar o comando cat com o comando grep, para obter resultados mais precisos em relação ao que te interessa:

cat .mysql_history grep -e select

Exemplo de execução do comando cat com o comando grep
Clique, para ver detalhes.

O arquivo do histórico, bem como aquele criado pelo comando tee, pode ser aberto no seu editor de scripts favorito, de onde você pode extrair as queries que deseja e editá-las como bem entender.
captura de tela komodo editor

Como guardar o histórico dos comandos no MySQL

Você pode armazenar o histórico de todos os comandos fornecidos no cliente MySQL, bem como seus resultados, em um arquivo, para uso posterior.
A dica é útil para programadores, que desejem montar scripts em PHP, Perl, Python etc. posteriormente, com o uso das informações obtidas em uma seção de conexão ao servidor do MySQL.
Captura de tela da saída do histórico do MySQL
Ao usar o cliente MySQL, é possível ver o resultado imediato de seus comandos — o que te permite saber o que funciona ou não.
Se você está aprendendo MySQL, pode ser interessante ter uma relação de comandos referentes à sua lição — que pode ser enviado, por email ou qualquer outra forma, para ser analisado por alguém mais experiente e que possa te ajudar com alguma dificuldade.

Execute o MySQL com a opção –tee para gravar seu histórico

O MySQL, por padrão, já grava o histórico dos seus comandos. O que queremos é ter acesso a este histórico, de fora do MySQL — para ter a liberdade de fazer o que quisermos com esta informação.
Para isto, execute o MySQL com a opção --tee, conforme o exemplo abaixo:

mysql -u root -p --tee=MySQL-historico.txt

Destrinchando o comando:

  • mysql -u root -p — rotina tradicional de conexão ao banco de dados.
  • --tee=MySQL-historico.txt — indica ao tee para enviar a saída (log) para o arquivo MySQL-historico.txt. Você pode usar qualquer outro nome que quiser para este artigo.

O log gerado pelo tee descarta uma série de lixo desnecessário, deixando apenas o que interessa gravado no arquivo.

No Unix (e também no Linux), o comando tee lê da entrada padrão e envia para uma saída à sua escolha — que pode ser um arquivo.

Como ligar o logging externo de dentro do MySQL

Se você se esqueceu de desligar o logging em um arquivo externo, é possível fazer isto de dentro do próprio MySQL.
Use os comandos \T e \t para ligar e desligar, respectivamente, o logging em arquivo externo.
No exemplo, abaixo, o logging será feito no arquivo hist.txt:

mysql> \T hist.txt
Logging to file 'hist.txt'
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| tutorial           |
+--------------------+
4 rows in set (0.00 sec)

mysql> \t
Outfile disabled.
mysql> 

Para ver o log, na linha de comando (fora do cliente MySQL), eu posso usar o comando cat:

cat hist.txt 
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| tutorial           |
+--------------------+
4 rows in set (0.00 sec)

mysql> \t

Ou, então, posso abrir o arquivo hist.txt com o meu editor favorito.

Captura de tela do editor mousepad com o log do mysql
Clique, para ampliar.

O MySQL acrescenta os novos logs aos já existentes. Ele não sobrescreve o log anterior.
Você precisa apagar o arquivo anterior ou criar um novo, se não quiser que o próximo log seja acrescentado a alguma preexistente.
A capacidade de criar arquivos tee, foi introduzida no MySQL 3.23.28.