No Linux, eu posso usar um pipe para criar um M4A com o neroAacEnc, assim
ffmpeg -i input.mp4 -vn -f wav - | neroAacEnc -if - -ignorelength -q 0.5 -of output.m4a
Você teria que usar wine neroAacEnc.exe
, e eu não tenho idéia se a versão do windows rodando em wine pode usar pipes. Em teoria , o seguinte deve ser capaz de fazer tudo em um único comando (supondo que você tenha um ffmpeg atualizado):
ffmpeg -i input.mp4 -vn -f wav - | neroAacEnc -if - -ignorelength -q 0.5 -of - | ffmpeg -i - -i input.mp4 -map 1:v -map 0:a -c:a copy -c:v libx264 -crf 22 -preset veryfast output.mp4
Mas infelizmente, o neroAacEnc parece ser capaz de pegar um pipe como entrada ou saída para um pipe, mas não ambos de uma vez, então o acima não funcionará, e você precisa fazer isso com dois comandos:
ffmpeg -i input.mp4 -vn -f wav - | neroAacEnc -if - -ignorelength -q 0.5 -of temp-audio.m4a
ffmpeg -i input.mp4 -i temp-audio.m4a -map 0:v -map 1:a -c:a copy -c:v libx264 -crf 22 -preset veryfast output.mp4
Eu posso colocar isso em um script bash básico (que o AFAIK deve trabalhar no OSX)
#!/bin/bash
ffmpeg -i "$1" -vn -f wav - | neroAacEnc -if - -ignorelength -q 0.5 -of "temp.${1%.*}.m4a"
ffmpeg -i "$1" -i "temp.${1%.*}.m4a" -map 0:v -map 1:a -c:a copy -c:v libx264 -crf 22 -preset veryfast "output.${1%.*}.m4v"
rm "temp.${1%.*}.m4a
exit 0
Salve em algum lugar em seu $ PATH como convert-to-M4V e marque-o como executável, use-o assim:
convert-to-M4V input.mov
Para fazer todos os movimentos em um diretório:
for f in *.mov; do convert-to-M4V "$f"; done
NOTA: Eu não estou no OSX, e eu nunca usei a linha de comando no OSX, então algumas delas podem não funcionar / podem precisar de adaptação. roAA EDIT: Como você está no OSX, você deve ser capaz de usar o codificador AAC quicktime (superior ao neroAacEnc em alguns testes), qaac, que pode ter melhor suporte para pipes. E é uma solução nativa.
FOOTNOTE: Você também pode encontrar o guia útil para codificar com x264 no ffmpeg e este guia para o neroAacEnc.