Transcodifique o moviefile para h264 / aac com ffmpeg para vídeo e neroacent para áudio

0

Estou no Mac OS 10.8.1, com ffmpeg-devel instalado como um macport. Eu posso rodar NeroAacEnc (win32) via Wine. Eu posso transcodificar um filme em h264 / aac usando um simples comando ffmpeg :

ffmpeg -i INPUT.MP4 -vcodec libx264 -acodec libfaac OUTPUT.MP4

O problema é que eu prefiro o som do codificador NeroAACEnc AAC. Transcodificar um arquivo de áudio wave para o AAC usando o Nero também é simples:

wine start neroAacEnc.exe -if INPUT.wav -of OUTPUT.mp4

Como posso usar ffmpeg para codificação de vídeo e NeroAACEnc para codificação de áudio em um único comando? Tubos? Roteiro? Automator Eu não sou bom com nada disso.

Ajuda necessária, pois estou perdido. Agradecemos antecipadamente.

    
por Henrik Söderlund 01.09.2012 / 12:43

1 resposta

1

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.

    
por 18.12.2012 / 02:48