Quels codecs sont les plus adaptés à la lecture avec Windows Media Player sous Windows XP?

J'ai besoin d'encoder une courte vidéo dans un format qui peut être joué avec Windows Media Player sur Windows XP sans installer de codecs supplémentaires. Pour le processus de recodage, j'utilise ffmpeg.

J'ai déjà essayé le codec msmpeg4v2 mais la qualité est horrible (par rapport à la vidéo d'origine, vous voyez de gros "blocs"), alors je cherche d'autres codecs qui fonctionnent hors de la boîte et ont au moins une qualité "ok".

Étant donné que les commentaires ont indiqué qu'il ne s'agissait peut-être pas du codec mais d'un problème de bitrate, voici la commande que j'ai utilisée:

 ffmpeg -i x.flv -vcodec msmpeg4v2 -acodec adpcm_ima_wav x.avi 

Sortie:

 Input #0, flv, from 'x.flv': Metadata: moovPosition : 39337765 avcprofile : 100 avclevel : 30 aacaot : 2 videoframerate : 25 audiochannels : 2 Duration: 00:06:19.52, start: 0.000000, bitrate: 836 kb/s Stream #0:0: Video: h264 (High), yuv420p, 702x396 [SAR 2596:3679 DAR 354:283], 25 tbr, 1k tbn, 50 tbc Stream #0:1: Audio: aac, 48000 Hz, stereo, s16 w:702 h:396 pixfmt:yuv420p tb:1/1000000 sar:2596/3679 sws_param: Output #0, avi, to 'x.avi': Metadata: moovPosition : 39337765 avcprofile : 100 avclevel : 30 aacaot : 2 videoframerate : 25 audiochannels : 2 ISFT : Lavf53.32.100 Stream #0:0: Video: msmpeg4v2 (MP42 / 0x3234504D), yuv420p, 702x396 [SAR 2596:3679 DAR 354:283], q=2-31, 200 kb/s, 25 tbn, 25 tbc Stream #0:1: Audio: adpcm_ima_wav ([17][0][0][0] / 0x0011), 48000 Hz, stereo, s16, 384 kb/s Stream mapping: Stream #0:0 -> #0:0 (h264 -> msmpeg4v2) Stream #0:1 -> #0:1 (aac -> adpcm_ima_wav) Press [q] to stop, [?] for help frame= 9485 fps=436 q=31.0 Lsize= 31197kB time=00:06:19.48 bitrate= 673.5kbits/s video:12628kB audio:17913kB global headers:0kB muxing overhead 2.149820% 

    Comme vous ne spécifiez rien d'autre, votre flux vidéo est configuré pour utiliser q=2-31, 200 kb/s . Il en 673.5kbits moyenne de 673.5kbits , ce qui n'est pas beaucoup, du moins pas pour les codecs non-h.264.

    Essayez de forcer

    • Un certain bitrate avec -b:v 1000K par exemple. Avec les anciennes versions FFmpeg, vous ne pouvez utiliser que -b .
    • Un niveau de qualité fixe avec -qscale 2 par exemple. Ici, la valeur peut aller de 1 à 31. Les valeurs qscale pour qscale se situent entre 2 et 5 environ. Essayez simplement de voir ce qui obtient le meilleur résultat.

    Les codecs actuellement pris en charge par Windows par défaut sont les suivants :

    Il existe actuellement des centaines de codecs audio et vidéo. Certains ont été créés par Microsoft, mais la grande majorité des codecs ont été créés par d'autres entreprises, organisations ou particuliers. Par défaut, le système d'exploitation Windows et le lecteur incluent un certain nombre de codecs les plus populaires, tels que Windows Media Audio, Windows Media Video et MP3.

    Consultez également les types de fichiers multimédia compatibles avec Windows Media Player pour plus d'informations.

    Avec FFmpeg, vous pouvez essayer mpeg1video (MPEG-1) ou mpeg2video (MPEG-2) ou msmpeg4 (MPEG-4 Part II), mais je ne sais pas si ce dernier est universellement pris en charge. Si vous voulez le protéger en toute sécurité, vous êtes obligé d'utiliser MPEG-1 ou MPEG-2.

    J'ai eu un problème similaire avec un fichier aac / h264 .mp4 qui a été joué à l'origine dans Windows Media Player (Windows 7). Après avoir édité dans VirtualDub et sauvegardé au format .avi, puis converti en aac / h264 .mp4 en utilisant les paramètres par défaut de ffmpeg, il ne fonctionnerait plus dans Windows Media Player.

    En utilisant MediaInfo pour comparer les fichiers originaux et finaux, j'ai remarqué qu'un profil de codage différent avait été utilisé et différents paramètres de sous-échantillonnage de chroma (4: 2: 0, 4: 4: 4 final). En le recodifiant avec ffmpeg en utilisant l'option suivante, WMP a pu lire le fichier correctement:

     ffmpeg -i edited.avi -pix_fmt yuv420p fixed.mp4 

    Étant donné que les deux codecs sont déjà pris en charge par le conteneur AVI, vous pouvez simplement le faire

     ffmpeg -i x.flv -vcodec copy -acodec copy x.avi 

    Cela suppose que votre XP prend en charge h.264, sinon j'allais avec un fichier wmv, même quantificateur, et je laisse ffmpeg remplir les codecs. Cela devrait vous donner une qualité presque identique à celle de l'original:

     ffmpeg -i x.flv -sameq x.wmv 

    Le wiki FFMPEG recommande ce qui suit :

     ffmpeg -r 30 -i foo.flv -codec:v mpeg4 -flags:v +qscale -global_quality:v 0 -codec:a libmp3lame foo.avi