Transcode moviefile en h264 / aac avec ffmpeg pour la vidéo et neroacenc pour l’audio

0

Je suis sur Mac OS 10.8.1, avec ffmpeg-develinstallé en tant que MacPort. Je peux courir NeroAacEnc(win32) via Wine. Je peux transcoder un film en h264 / aac en utilisant une simple ffmpegcommande:

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

Le problème, c'est que je préfère le son de l' NeroAACEncencodeur AAC. Transcoder un fichier audio wave au format AAC à l'aide de Nero est également simple:

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

Comment utiliser ffmpegle codage vidéo et NeroAACEncle codage audio en une seule commande? Des pipes? Scénario? Automator? Je ne suis pas bon avec aucun de ceux-ci.

Besoin d'aide car je suis perdu. Merci d'avance.

Henrik Söderlund
la source

Réponses:

1

Sous Linux, je peux utiliser un tuyau pour créer un M4A avec neroAacEnc comme si

ffmpeg -i input.mp4 -vn -f wav - | neroAacEnc -if - -ignorelength -q 0.5 -of output.m4a

Vous devriez utiliser wine neroAacEnc.exelà-bas, et je ne sais pas si la version Windows sous Wine peut utiliser des pipes. En théorie , les éléments suivants devraient pouvoir tout faire en une seule commande (en supposant que vous disposiez d'un ffmpeg à jour):

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

Mais malheureusement, neroAacEnc semble être capable de prendre un tuyau en entrée ou en sortie sur un tuyau, mais pas les deux à la fois. Par conséquent, la procédure ci-dessus ne fonctionnera pas et vous devez le faire avec deux commandes:

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

Je peux mettre cela dans un script bash basique (qui AFAIK devrait fonctionner sur 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

Enregistrez-le quelque part dans votre $ PATH en tant que convert-to-M4V et marquez-le comme exécutable, utilisez-le comme ceci:

convert-to-M4V input.mov

Pour faire tous les mov dans un répertoire:

for f in *.mov; do convert-to-M4V "$f"; done

REMARQUE: je ne suis pas sous OSX et je n'ai jamais vraiment utilisé la ligne de commande sous OSX. Par conséquent, certaines de ces opérations pourraient ne pas fonctionner / nécessiter une adaptation. roAA EDIT: Puisque vous êtes sur OSX, vous devriez pouvoir utiliser l’encodeur (supérieur à neroAacEnc dans certains tests) Quicktime AAC, qaac, qui pourrait bien mieux prendre en charge les tuyaux. Et c'est une solution native.

NOTA: Vous pouvez également trouver utile ce guide d’encodage avec x264 sur ffmpeg et ce guide de neroAacEnc.

vilsoup
la source