2011-03-06 8 views
1

J'ai une application qui permet aux utilisateurs d'enregistrer de la vidéo à partir de leurs webcams. Les utilisateurs enregistrent 3 clips, qui sont ensuite combinés en une seule vidéo pour la lecture.FFMpeg Convertir AVI en MP4 - Déséquilibre audio/vidéo

J'ai des problèmes avec l'audio et la vidéo sur le troisième clip étant parfois désynchronisé après la conversion en MP4.

Voilà comment le processus fonctionne maintenant-

Combiner des fichiers vidéo AVI et insérer des vidéos de transition entre l'aide Mencoder pour combiner des fichiers AVI.

mencoder.exe -oac copy -ovc copy -idx -o test.avi c:\temp\*.avi 

Je reçois cette erreur:

Muxer frame buffer cannot allocate memory! 

1 duplicate frame(s)! 
1 duplicate frame(s)! 
1 duplicate frame(s)! 
1 duplicate frame(s)! 
1 duplicate frame(s)! 
1 duplicate frame(s)! 

Cependant, la vidéo est combiné à AVI et ce AVI joue en arrière sans aucun problème de synchronisation audio.

Réindexer mencoder

mencoder.exe -idx TEST.AVI 

La vidéo joue toujours très bien à ce moment comme AVI.

Convertir AVI en MP4 en utilisant le fichier batch ffmpeg:

set FFMPEG_DATADIR=c:\Presets 
ffmpeg.exe -i "test.avi" -s 640x480 -y -strict experimental -acodec aac \ 
    -ab 128k -ac 2 -ar 48000 -vcodec libx264 -vpre medium -vpre ipod640 -r 24 \ 
    -g 48 -b 520000 -threads 64 "out.mp4" 

Tout cela doit être fait par programme (pas de logiciel graphique de montage vidéo) à l'aide des outils de ligne de commande sous Windows.

Voici des exemples de fichiers avi et mp4. La synchronisation audio/vidéo se produit autour de la marque 1:03. AVI ne se désynchronise pas, contrairement au mp4.

http://trtemp.s3.amazonaws.com/new.avi

http://trtemp.s3.amazonaws.com/new.mp4

Quelqu'un at-il des suggestions pour résoudre ce problème?

+0

Avez-vous essayé l'option -copyts ffmpeg? –

Répondre

3

Quelques choses:

  • Je ne trouve pas la synchronisation audio composite source pour être exactement parfait. Il serait intéressant de voir aussi les trois clips originaux. Une règle générale est de toujours commencer par la source de qualité la plus élevée possible. Pouvons-nous supposer que les trois sources ont aussi un son stéréo de 48 kHz à 16 bits? S'il y a une conversion, alors c'est peut-être un problème.
  • Le CODEC aac interne de FFmpeg est expérimental, et c'est pourquoi vous devez avoir ce commutateur -strict experimental. Puisque vous rencontrez des problèmes de synchronisation audio, il s'agit d'un problème évident. Envisagez d'utiliser libfaac si disponible. (Vous pouvez très bien avoir à créer votre propre compilation FFmpeg.)
  • L'utilisation de -threads 64 ne va pas le faire aller plus vite, peu importe le nombre de cœurs que vous avez. Suivez la convention généralement acceptée de # cores * 3/2. Donc, si vous avez 4 cœurs, le mât est 4 * 3/2 = 6. Mes propres expériences avec le -threads montrent des taux décroissants de retour à chaque thread sur 4-6 qui met à zéro (aucun avantage) sur 12-16 threads.Au mieux, 64 discussions n'auront aucun impact. Au pire, cela ralentira ou dégradera la qualité de votre résultat. Expérimentez avec l'option -copyts
  • "Copier les horodatages de l'entrée à la sortie." Expérience avec le commutateur -async

Audio sync method. "Stretches/squeezes" the audio stream to match the timestamps, the parameter is the maximum samples per second by which the audio is changed. -async 1 is a special case where only the start of the audio stream is corrected without any later correction.

+2

Changer le nombre de threads à 4 le fixe ... bizarre. – Brian

Questions connexes