Comment convertir des vidéos MKV en vidéos MP4 sans perte compatibles avec les appareils iOS sous Windows?

10

Je suis nouveau sur FFmpeg (Windows) et j'ai besoin d'aide.

Je veux convertir mes MKV en MP4 avec le moins de perte de qualité possible. Les MKV sont fabriqués avec MakeMKV et contiennent entre autres la bande son DTS. Ils sont sans perte. La raison pour laquelle je veux convertir, c'est que je prévois de le diffuser sur iPad et Apple TV. Les iPad ne prennent pas en charge les DTS et MKV. Les MKV sont à la fois des DVD et des Blu-Ray. Les MKV contiennent des vidéos, des bandes sonores et des sous-titres.

J'ai essayé cela, mais je n'obtiens aucun son en raison de la bande sonore DTS:

ffmpeg -i input.mkv -c:v copy -c:a copy output.mp4

Quelqu'un peut-il m'aider?

Quels codecs dois-je utiliser? MP4 est le meilleur pour Apple?

Striky
la source
1
Y a-t-il des versions spécifiques d'iPad et d'Apple TV que vous ciblez, ou voulez-vous les prendre en charge toutes?
llogan
2
Remarque: MP4 n'est pas un codec. C'est juste un format de fichier (un "conteneur").
slhck
J'ai le dernier iPod Air. J'ai la toute dernière Apple TV. Je sais que MP4 est un conteneur et non un codec :)
Striky
Veuillez inclure des informations sur l'une de vos entrées typiques. La sortie console complète de ffmpeg -i input.mkvsuffira.
llogan
J'ai essayé ffmpeg -i input.mkv -c: v copy -c: une copie output.mp4 J'ai également essayé ffmpeg -i input.mkv -strict experimental -c: v copy -c: a aac -b: a 192k -q: a 6 output.mp4 mais le film (vidéo et sonore) ne jouait pas correctement sur mon iPad Air (en streaming et téléchargé).
Striky

Réponses:

22

MP4 est en effet le meilleur format pour les appareils et logiciels Apple. Le DTS n'est d'ailleurs pas pris en charge, de nombreux fichiers vidéo MP4 contiennent deux pistes audio, une DTS et une AAC.

Il existe plusieurs encodeurs disponibles, tous documentés sur le wiki ffmpeg . Le codec disponible dépend de la façon dont ffmpeg a été compilé. libfdk_aac vous donnera les meilleurs résultats, mais étant donné que ce codec n'est pas gratuit, il n'est pas toujours disponible.

Les choses que vous pouvez essayer (je les mets dans l'ordre de ma qualité perçue, mieux d'abord)

ffmpeg -i input.mkv -c:v copy -c:a libfdk_aac -b:a 128k output.mp4
ffmpeg -i input.mkv -strict experimental -c:v copy -c:a aac -b:a 192k output.mp4
ffmpeg -i input.mkv -c:v copy -c:a libfaac -b:a 192k output.mp4

Si vous souhaitez également conserver la piste DTS, utilisez l' -mapindicateur.

Pas directement d'utilisation pour OP, mais le programme OS X Subler rend ce processus très facile.

EDIT: Commentaires tl; dr? OP a résolu le problème avec la commande suivante

ffmpeg -i input.mkv -strict experimental -map 0:0 -map 0:1 -map 0:2 -map 0:3 -c:v copy -c:a aac -b:a 384 -c:s copy output.mp4

CONSEIL: si les -c:s copysous-titres ne fonctionnent pas, essayez -c:s mov_text.
M'a sauvé à plusieurs reprises.

jornane
la source
Je ne pense pas que le mode VBR de l'encodeur AAC interne fonctionne comme prévu. La dernière fois que j'ai vérifié, c'était cassé. Mieux vaut aller avec CBR, et utiliser VBR pour les autres encodeurs ( libfdket libfaac)
slhck
J'ai également lu que libfdk_aac donnera le meilleur résultat. J'ai téléchargé la version statique 32 bits pour Windows (git-9722a6a (2014-05-24)). Comment puis-je vérifier si j'ai le codec libfdk? Edit: je reçois un encodeur inconnu 'libfdk_aac'. Où puis-je le télécharger ou existe-t-il un codec audio presque aussi bon?
Striky
J'ai essayé à la fois ffmpeg -i input.mkv -c: v copy -c: a libfdk_aac -b: a 128k output.mp4 et ffmpeg -i input.mkv -c: v copy -c: a libfaac -b: a 192k output .mp4 No go :(
Striky
@Striky "No go :(" J'ai essayé la dernière commande avec un nouveau ffmpeg de Homebrew, ça marche pour moi. Pouvez-vous donner plus de détails sur les raisons pour lesquelles cela ne fonctionne pas pour vous?
jornane
@slhck: Je viens d'essayer les -c:a aac -q:a 6paramètres et de comparer le résultat avec -c:a libfaac -b:a 192k, à mon avis, le codec aac donne de meilleurs résultats que libfaac , mais comme les codecs sont en cours de développement, cela peut changer. libfdk_aac donnera probablement de meilleurs résultats, mais je ne l'ai pas disponible pour le moment.
jornane
0

Je sais que c'est une vieille question - et a déjà une réponse - mais je voulais partager certaines commandes que j'utilise avec FFmpeg sur macOS.

Un MP4 encodé vidéo x264 avec audio AAC à partir d'un MKV

Conversion de base d'un MKV avec un MP4 mais conversion de l'audio en AAC à 128k. Notez les mappages: -map 0:0signifie la première 0piste ( ) de l'entrée source ( 0) et -map 0:1signifie la deuxième 1piste ( ) de la même entrée source ( 0). J'aime faire cela dans les cas où il y a plusieurs pistes audio afin que je puisse faire quelque chose comme sélectionner -map 0:3pour obtenir la troisième piste.

ffmpeg -i input.mkv \
       -c:v copy \
       -c:a aac -b:a 128k \
       -map 0:0 -map 0:1 \
       output.mp4 \
       ;

Un MP4 encodé vidéo HEVC / x265 avec audio AAC à partir d'un MKV

Ceci est similaire à la commande x264 ci-dessus, mais utilise à la place le HEVC / x265 pour obtenir une taille de fichier plus petite avec la même - sinon meilleure qualité - vidéo de la source MKV. Notez que je préfère redimensionner les vidéos iOS à 720 lors de l'utilisation de HEVC / x265; la qualité de lecture sans trop de bruit est solide sur mon MacBook, iPad et iPhone. Assurez-vous simplement que votre matériel et votre système d'exploitation prennent en charge la lecture HEVC / x265. Et soyez prévenu: HEVC / x265 est très gourmand en CPU, donc si votre machine n'a pas beaucoup de puissance CPU, cela peut prendre jusqu'à un jour environ pour encoder 90 minutes de vidéo.

ffmpeg -i input.mkv \
       -vf scale=-1:720 \
       -c:v libx265 -crf 20 \
       -c:a aac -b:a 128k \
       -threads 4 \
       -tag:v hvc1 \
       -map 0:0 -map 0:1 \
       output.mp4 \
       ;

Voici une ventilation de chacun des paramètres principaux autres que les fichiers d'entrée et de sortie.

  • -vf scale=-1:720: Redimensionnez la vidéo à une hauteur de 720 et calculez automatiquement la largeur. Notez que FFmpeg pourrait étouffer quelques MKV pour des raisons que je ne suis pas 100% clair sur si vous devez définir explicitement la largeur avec quelque chose comme ceci: -vf scale=1280:720. Expérimentez et voyez ce qui fonctionne pour vous.
  • -c:v libx265 -crf 20: Le libx265est le codec de codage vidéo. C'est -crf 20le CRF (facteur de taux constant) . Le CRF par défaut si vous ne le spécifiez pas est 28, mais - pour l'instant - trouvez la qualité à peu près… Meh. Je préfère 20 car c'est un très bon équilibre entre qualité et taille de fichier.
  • -threads 4: J'aime spécifier le nombre de threads. 4 est ce que mon système peut gérer maintenant, mais je le cloisonne parfois à 2 ou 3. Un nombre plus élevé est plus rapide si vous avez suffisamment de CPU pour le gérer.
  • -tag:v hvc1: Le paramètre de métadonnées magiques à mettre en place pour que les appareils iOS lisent correctement les vidéos HEVC / x265.

Et c'est à peu près ça!

JakeGould
la source