Conversão de lote de H.265 em H.264
Estes exemplos foram escritos para recentes ffmpeg. Economize alguns problemas e faça o download de uma versão recente. Em seguida, coloque o ffmpegbinário em ~/binou /usr/local/bin(talvez seja necessário sair do sistema, faça login para que seja notado).
Saída Matroska
mkdir h264vids
for f in *.mp4; do ffmpeg -i "$f" -map 0 -c copy -c:v libx264 -crf 23 -preset medium h264vids/"${f%.*}.mkv"; done
Este exemplo será exibido em um diretório chamado h264vids.
Este exemplo assume que suas entradas são .mp4. Caso contrário, altere a .mp4instância no exemplo para o tipo de arquivo de entrada ou use apenas o ganancioso *.
Ajuste -crfa qualidade e -preseta velocidade / eficiência da codificação. Ou simplesmente remova essas opções e use os padrões que são razoavelmente bons e devem ser suficientes para a maioria (o exemplo está usando os valores padrão para essas opções). Veja FFmpeg Wiki: H.264 para mais informações sobre essas opções.
Saída MP4
Este é um pouco mais complicado. Isso executará a codificação condicional, dependendo se o áudio de entrada é AAC ou não. Se o áudio de entrada for AAC, o áudio será copiado em fluxo contínuo (re-mixado) como está e a recodificação desnecessária será evitada. Se o áudio de entrada não for AAC, será recodificado para AAC.
Aqui está um script simples que demonstra como fazer isso usando ffprobee ffmpeg. Copie e salve-o no diretório que contém seus vídeos a serem convertidos, dê permissão de execução chmod +x yourscriptnamee execute-o com ./yourscriptname.
#!/bin/bash
mkdir h264vids
for f in *.mkv
do
audioformat=$(ffprobe -loglevel error -select_streams a:0 -show_entries stream=codec_name -of default=nw=1:nk=1 "$f")
if [ "$audioformat" = "aac" ]; then
ffmpeg -i "$f" -c:v libx264 -crf 23 -preset medium -c:a copy -movflags +faststart h264vids/"${f%.*}.mp4"
else
ffmpeg -i "$f" -c:v libx264 -crf 23 -preset medium -c:a aac -movflags +faststart h264vids/"${f%.*}.mp4"
fi
done
Este exemplo será exibido em um diretório chamado h264vids.
Este exemplo assume que suas entradas são .mkv. Caso contrário, altere a .mkvinstância no exemplo para o tipo de arquivo de entrada ou use apenas o ganancioso *.
Veja a nota acima sobre -crfe -preset.
Você pode pausar a codificação com ctrl+ ze continuar com fg.
sleep 3é desnecessário (mas possível útil para terminar o loop) eINPUT=$1não tem sentido, pois você está executando isso diretamente em um shell interativo.