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


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

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

O problema é que eu prefiro o som de NeroAACEnc Codificador 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 como eu estou perdido. Desde já, obrigado.


0


origem




Respostas:


No Linux, eu posso usar um pipe para criar um M4A com 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 lá, e eu não tenho idéia se a versão do windows rodando sob o vinho pode usar canos. Em teoria, o seguinte deve ser capaz de fazer tudo em um 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-o em algum lugar no seu $ PATH como convert-to-M4V e marque-o como executável, use assim:

convert-to-M4V input.mov

Para fazer todos os mov 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 algo disso pode não funcionar / pode 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.

Nota: Você também pode achar útil esta guia para codificação com x264 no ffmpeg e esta guia para o neroAacEnc.


1