Solução Python
from sh import ffmpeg
from os import listdir
from os.path import split
from sys import argv
[ffmpeg("-i '{0}' -acodec libmp3lame 'Converted\{0}'".format(_file))
for _file in sum([listdir(split(arg)[0]) for arg in argv], [])]
Dado um vídeo encapsulado em AVI com áudio WMA2 e vídeo MP4, como faço para passar o vídeo, converta o áudio para MP3; então reencapsule o arquivo inteiro em um AVI?
ffmpeg -i "foo bar.avi" -acodec libmp3lame "Converted\foo bar.avi"
Agora, como faço o mesmo comando para cada arquivo .avi
nesse diretório?
(precisa de uma solução usando o bash ou o Windows CLI [ for
?])
from sh import ffmpeg
from os import listdir
from os.path import split
from sys import argv
[ffmpeg("-i '{0}' -acodec libmp3lame 'Converted\{0}'".format(_file))
for _file in sum([listdir(split(arg)[0]) for arg in argv], [])]
Isso não funciona simplesmente?
for file in *.avi;do ffmpeg -i "$file" -acodec libmp3lame "Converted\$file";done
Editar :
Parece haver um problema de barra invertida ...
Tente isto:
for file in *.avi;do ffmpeg -i "$file" -acodec libmp3lame 'Converted\'"$file";done
ou isto:
for file in *.avi;do ffmpeg -i "$file" -acodec libmp3lame 'Converted\'"$file";done
Em bash
, o seguinte fará o que você deseja, se você executá-lo no diretório que possui os arquivos .avi
:
#!/bin/bash
for file in *.avi; do
ffmpeg -i "$file" -c:a libmp3lame "Converted\$file";
done;
Após um teste & conversa de erro com os comandos envolvidos, descobri que isso funciona em um shell bash
for i in *.ts; do ffmpeg -i "$i" -threads 6 -f mpegts -vcodec libx264 -preset slow -bufsize 8000 -async 48000 -acodec ac3 -ab 384k -n subdir/"${i%}"; done
isso cria uma versão compactada de alta qualidade de arquivos .ts de entrada com o mesmo nome, mas em um subdiretório. Eu estou supondo que não vai escrever um subdir se ele não existir, então você teria que especificar um que substitui o que estou chamando de "subdir". Também usei -n para evitar que sobrescrevesse arquivos que eu processei individualmente antes de descobrir a sintaxe adequada para esse processo em lote (tenho um processador de 6 núcleos, então "-threads" devem ser ajustados também para o seu hardware)
Tags command-line bash ffmpeg