Pourquoi certaines conversions de wmv en flv avec ffmpeg échouent-elles?

StackOverflow https://stackoverflow.com/questions/87760

  •  01-07-2019
  •  | 
  •  

Question

Je me suis cogné la tête avec ça depuis un moment. J'ai 2 fichiers .wmv complètement identiques encodés avec le codec wmv3. Je les mets tous les deux via ffmpeg avec la commande suivante:

/usr/bin/ffmpeg -i file.wmv -ar 44100 -ab 64k -qscale 9 -s 512x384 -f flv file.flv

Un fichier convertit parfaitement et me donne la sortie suivante:

 FFmpeg version SVN-r11070, Copyright (c) 2000-2007 Fabrice Bellard, et al.
  configuration: --prefix=/usr --incdir=/usr/include/ffmpeg --libdir=/usr/lib64 --shlibdir=/usr/lib64 --mandir=/usr/share/man --arch=x86_64 --extra-cflags=-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic --enable-liba52 --enable-libfaac --enable-libfaad --enable-libgsm --enable-libmp3lame --enable-libtheora --enable-libvorbis --enable-libxvid --enable-libx264 --enable-pp --enable-pthreads --disable-static --enable-shared --enable-gpl --disable-debug --disable-optimizations --disable-strip
  libavutil version: 49.5.0
  libavcodec version: 51.48.0
  libavformat version: 51.19.0
  built on Jun 25 2008 09:17:38, gcc: 4.1.2 20070925 (Red Hat 4.1.2-33)
Seems stream 1 codec frame rate differs from container frame rate: 1000.00 (1000/1) -> 29.97 (30000/1001)
Input #0, asf, from 'ok.wmv':
  Duration: 00:14:22.3, start: 3.000000, bitrate: 467 kb/s
    Stream #0.0: Audio: wmav2, 44100 Hz, stereo, 64 kb/s
    Stream #0.1: Video: wmv3, yuv420p, 320x240 [PAR 0:1 DAR 0:1], 400 kb/s, 29.97 tb(r)
Output #0, flv, to 'ok.flv':
    Stream #0.0: Video: flv, yuv420p, 512x384 [PAR 0:1 DAR 0:1], q=2-31, 200 kb/s, 29.97 tb(c)
    Stream #0.1: Audio: libmp3lame, 44100 Hz, stereo, 64 kb/s
Stream mapping:
  Stream #0.1 -> #0.0
  Stream #0.0 -> #0.1
Press [q] to stop encoding
frame=25846 fps=132 q=9.0 Lsize=   88486kB time=862.4 bitrate= 840.5kbits/s
video:80827kB audio:6738kB global headers:0kB muxing overhead 1.050642% 

Pendant l'échec d'un autre fichier:

FFmpeg version SVN-r11070, Copyright (c) 2000-2007 Fabrice Bellard, et al.
  configuration: --prefix=/usr --incdir=/usr/include/ffmpeg --libdir=/usr/lib64 --shlibdir=/usr/lib64 --mandir=/usr/share/man --arch=x86_64 --extra-cflags=-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic --enable-liba52 --enable-libfaac --enable-libfaad --enable-libgsm --enable-libmp3lame --enable-libtheora --enable-libvorbis --enable-libxvid --enable-libx264 --enable-pp --enable-pthreads --disable-static --enable-shared --enable-gpl --disable-debug --disable-optimizations --disable-strip
  libavutil version: 49.5.0
  libavcodec version: 51.48.0
  libavformat version: 51.19.0
  built on Jun 25 2008 09:17:38, gcc: 4.1.2 20070925 (Red Hat 4.1.2-33)
[wmv3 @ 0x3700940d20]Extra data: 8 bits left, value: 0

Seems stream 1 codec frame rate differs from container frame rate: 1000.00 (1000/1) -> 25.00 (25/1)
Input #0, asf, from 'bad3.wmv':
  Duration: 00:06:34.9, start: 4.000000, bitrate: 1666 kb/s
    Stream #0.0: Audio: 0x0162, 48000 Hz, stereo, 256 kb/s
    Stream #0.1: Video: wmv3, yuv420p, 512x384 [PAR 0:1 DAR 0:1], 1395 kb/s, 25.00 tb(r)
File 'ok.flv' already exists. Overwrite ? [y/N] y
Output #0, flv, to 'ok.flv':
    Stream #0.0: Video: flv, yuv420p, 512x384 [PAR 0:1 DAR 0:1], q=2-31, 200 kb/s, 25.00 tb(c)
    Stream #0.1: Audio: libmp3lame, 48000 Hz, stereo, 64 kb/s
Stream mapping:
  Stream #0.1 -> #0.0
  Stream #0.0 -> #0.1
Unsupported codec (id=0) for input stream #0.0

La seule différence que je vois est avec le codec audio en entrée

Travailler:

Stream #0.0: Audio: wmav2, 44100 Hz, stereo, 64 kb/s 

Ne fonctionne pas:

 Stream #0.0: Audio: 0x0162, 48000 Hz, stereo, 64 kb/s

Des idées?

Était-ce utile?

La solution

C’est en fait le format audio qui pose problème. Les formats audio sont identifiés par leur TwoCC (0x0162 ici). Vous pouvez rechercher les différents TwoCC ici: http://wiki.multimedia.cx/index .php? title = TwoCC et vous trouverez:

0x0162 Windows Media Audio Professional version 9

Ce codec n'est pas encore supporté par ffmpeg et mencoder pour autant que je sache. Vous pouvez effectuer une recherche sur Google pour " ffmpeg audio 0x0162 " et vérifiez par vous-même.

Autres conseils

La réponse évidente est que l’audio est encodé différemment dans le deuxième fichier wmv, de sorte qu’ils ne sont pas complètement identiques. Vous pouvez essayer de le forcer à utiliser un codec audio spécifique pour le "mauvais" wmv et voir si cela fonctionne. Peut-être que c'est juste avoir du mal à choisir le bon codec? Cependant, il semble plus probable que le "mauvais" wmv ait une sorte de codec audio qui n'est pas supporté par ffmpeg.

Essayez également les choses habituelles, assurez-vous que vous avez mis à niveau vers la dernière version, vérifiez toutes les versions de développement pouvant contenir des corrections de bogues, etc.

.

Ou utilisez alternativement mencoder

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top