Como usar o FFMPEG para converter vários arquivos de mídia de uma só vez no Linux
- 3829
- 1150
- Ms. Travis Schumm
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
- « Instale e jogue Overwatch no Linux com vinho
- Ouça sua estação de rádio favorita com um único comando no Linux »