Como usar o FFMPEG para converter vários arquivos de mídia de uma só vez no Linux

Como usar o FFMPEG para converter vários arquivos de mídia de uma só vez no Linux

Objetivo

Escreva um script bash simples para conversão de arquivo em lote ffmpeg.

Distribuições

Isso funcionará em todas as distribuições Linux.

Requisitos

Uma instalação do Linux funcionando com o FFMPEG instalado.

Convenções

  • # - requer que os comandos Linux sejam executados com privilégios root diretamente como usuário root ou por uso de sudo comando
  • $ - Requer que os comandos do Linux sejam executados como um usuário não privilegiado regular

Introdução

FFMPEG imensamente poderoso quando se trata de manipular e converter arquivos de mídia, mas não possui um recurso importante. O FFMPEG não tem a capacidade de lidar com vários arquivos de uma só vez. Então, o que você pode fazer sobre isso? Você é um usuário Linux. Você não vai sentar lá e digitar manualmente no mesmo comando repetidamente, você está?

FFMPEG é totalmente escritor. Portanto, você pode escrever um script simples e bash para fazer um loop através do conteúdo de um diretório especificado e executar a conversão que você deseja em cada arquivo. Embora isso possa parecer muito, realmente não é. O script será inferior a 20 linhas de festa.

Configure o arquivo

Comece configurando seu arquivo. Faça isso em qualquer lugar que você goste.

$ touch ffmpeg lote.sh

Então, faça isso executável.

$ chmod +x ffmpeg lote.sh

Abra o arquivo e configure -o para começar a escrever.

#! /BIN/BASH

Planeje suas variáveis

Você precisará passar vários argumentos para o seu script, se quiser que seja flexível o suficiente para lidar com a maioria dos cenários para os quais você usaria o FFMPEG. Por causa disso, você precisará de algumas variáveis. Claro, você pode usar as entradas brutas, mas será muito mais difícil acompanhar.

srCext = $ 1 Destext = $ 2 srcdir = $ 3 Destdir = $ 4 Opts = $ 5

Você tem cinco variáveis ​​no total; Uma extensão de origem, um destino ou extensão resultante, um diretório de origem, um diretório de destino e suas opções. As opções são as opções que você deseja no seu comando ffmpeg. Existem outras maneiras de fazer isso, mas apenas transmiti -las como uma corda funciona, e é super simples.

O laço

Este script se concentra em torno de um para loop para iterar sobre o conteúdo do diretório especificado. Você precisa criar esse loop a seguir. Comece apenas configurando a ideia.

para o nome do arquivo na pasta; feito

Claro, PASTA é nada. Você precisa configurar o loop para iterar sobre o conteúdo de um diretório, e esse diretório é armazenado em srcdir. Você também precisa dizer que ele precisa apenas atravessar os arquivos com uma extensão específica, srcext. Então, a combinação que você está procurando é assim:

"$ srcdir"/*.$ srcext

O curinga (*) diz isso a todos os arquivos, então o .$ srcext dá a extensão completa para procurar. As citações são necessárias em torno $ srcdir para impedir que isso trate tudo como uma corda e não funcionando corretamente.

A coisa toda juntos se parece com a seguinte:

para o nome do arquivo em "$ srcdir"/*.$ srcext; feito

Seu comando ffmpeg

Você conhece a sintaxe básica do FFMPEG, mas isso não vai muito longe aqui. A coisa toda é composta de variáveis. Falando em variáveis, você precisará de mais alguns. Para obter peças corretas para a pasta e arquivos de destino, os nomes de arquivos originais precisam ser cortados e reorganizados.

Primeiro, crie uma nova variável, Basepath e defina -o igual a esta expressão regular: $ nome do arquivo%.*.

Basepath = $ FileName%.*

A expressão retira tudo depois do . do caminho, significando a extensão.

Agora, você precisa se livrar do próprio caminho. Para fazer isso, defina nome de base igual a $ BASEPATH ##*/.

Basename = $ BASEPATH ##*/

Isso cuida de tudo o mais, até o próprio nome do arquivo.

Você pode montar as peças para formar a chamada para FFMPEG agora.

ffmpeg -i "$ filename" $ ​​opts "$ destdir"/"$ basename"."$ Destext"

Como você pode ver, é o mesmo que uma chamada normal para o FFMPEG, mas usando as variáveis. A peça mais complicada é o destino, mas combina apenas as peças individuais do destino para formar um caminho inteiro com o nome do arquivo e a extensão.

Empacotando

Se quiser, você pode abordar uma mensagem de sucesso para quando a conversão estiver concluída. Jogue -o no final do seu script após o para laço.

eco "Conversão de $ srcext para $ Destext Complete!"

A coisa toda deve parecer algo assim:

#! /bin/bash srcext = $ 1 Destext = $ 2 srcdir = $ 3 Destdir = $ 4 Opts = $ 5 para o nome do arquivo em "$ srcdir"/*.$ srcext; Faça Basepath = $ FileName%.* nome Basen = $ Basepath ##*/ ffmpeg -i "$ filename" $ ​​opts "$ destdir"/"$ basename".Conversão "$ Destext" Echo "de $ srcext para $ Destext Complete!"

Execute seu script

Finalmente, agora você pode executar seu script para executar conversões de arquivo em lote. Dê uma olhada neste exemplo para ver como é a sintaxe.

$ ffmpeg lote.SH FLAC MP3/PATH/TO/FILES/PATH/TO/DEST '-AB 320K'

Não é muito mais do que o normal. Só agora, você está convertendo um diretório inteiro no valor de arquivos, em vez de apenas um.

Pensamentos finais

Este script deve ser flexível o suficiente para a maioria das situações, e isso inclui vídeo. Você pode adicionar o script a um local ou sistema BIN caminho para torná -lo mais facilmente acessível de fora de seu diretório.

Tutoriais do Linux relacionados:

  • Coisas para instalar no Ubuntu 20.04
  • Ubuntu 20.04 Instalação do FFMPEG
  • Coisas para fazer depois de instalar o Ubuntu 20.04 fossa focal linux
  • Comandos Linux: os 20 comandos mais importantes que você precisa para…
  • Como converter em lote arquivos de música com ffmpeg
  • Download do Linux
  • Uma introdução à automação, ferramentas e técnicas do Linux
  • Melhor distro Linux para desenvolvedores
  • Comandos básicos do Linux
  • Arquivos de configuração do Linux: os 30 primeiros mais importantes