Batch Converter MP4 com ffmpeg

Sep 25 2020

Eu tenho um monte de arquivos de texto, jpg e mp4 em uma pasta. Quero que os arquivos jpg e de texto fiquem sozinhos. Eu quero compactar todo o mp4 usando o -crfargumento do ffmpeg com um valor de 23, para economizar espaço em disco. Os arquivos devem ser substituídos no local.

Usei a resposta @llogan aqui e substituí-a .avipor, .mp4mas não funciona.

for f in *.mp4; do ffmpeg -i "$f" -c:v libx264 -crf 23 -preset medium \ -c:a aac -b:a 128k -movflags +faststart -vf scale=-2:720,format=yuv420p \ "encoded/${f%.avi}.mp4"; done

Qual seria o forloop para converter mp4 para qualidade inferior ( -crf 23), no local, sem excluir e / ou modificar quaisquer outros arquivos no mesmo diretório de trabalho? Eu também não quero as outras sinalizações, porque não vou fazer redimensionamento, upload do YouTube, alterar a velocidade de codificação, etc.

Respostas

2 llogan Sep 25 2020 at 00:58

Você só precisava mudar "encoded/${f%.avi}.mp4"para "encoded/${f%.mp4}.mp4"ou "encoded/${f%.*}.mp4":

mkdir encoded
for f in *.mp4; do ffmpeg -i "$f" -c:v libx264 -crf 23 -preset medium -c:a copy -movflags +faststart "encoded/${f%.*}.mp4"; done

Removi todas as outras coisas de que você não precisava. Presumi que sua entrada de áudio já é AAC, então usei -c:a copypara habilitar o modo de cópia de fluxo , que é como copiar e colar.

-crf 23 -preset mediumsão o padrão para que você possa removê-los se estiver satisfeito com esses valores. Caso contrário, consulte FFmpeg Wiki: H.264 para obter orientação sobre o que -crfe os -presetvalores a serem usados.