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 ffmpeg
binário em ~/bin
ou /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 .mp4
instância no exemplo para o tipo de arquivo de entrada ou use apenas o ganancioso *
.
Ajuste -crf
a qualidade e -preset
a 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 ffprobe
e 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 yourscriptname
e 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 .mkv
instância no exemplo para o tipo de arquivo de entrada ou use apenas o ganancioso *
.
Veja a nota acima sobre -crf
e -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=$1
não tem sentido, pois você está executando isso diretamente em um shell interativo.