Batch Converter MP4 com ffmpeg
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
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.