Les petites séquences vidéo divisées par ffmpeg ne jouent pas ou ne jouent pas avec des artefacts

1

J'essaye de couper un fichier vidéo en petites parties (0.5-5s) et de coder ces parties en h.264 / aac avec ffmpeg. J'utilise cette commande:

ffmpeg -i 1.avi -ss 00:05:00 -t 00:00:01,50 -vcodec libx264 -threads 0 -vpre default -acodec libfaac out1.mp4

Dans VLC, certains morceaux jouent sans vidéo, ne produisent que du son, d'autres morceaux contenaient des artefacts vidéo comme celui-ci:

enter image description here

Peut-être ai-je manqué quelques arguments nécessaires pour ffmpeg?

Rnd_d
la source

Réponses:

3

Je l'ai essayé avec FFmpeg version 0.8.5, en utilisant un fichier d'entrée AVI comme vous.

La commande suivante a produit des résultats corrects:

ffmpeg -i 1.avi -ss 00:00:05 -t 00:00:01.50 -vcodec libx264 -vpre default -acodec libfaac out1.mp4

Voici quelques conseils pour le faire fonctionner:

Mise à jour vers la dernière version de FFmpeg.

Pour Ubuntu, suivez les instructions tutoriels ici . Je les utilise moi-même.

Sous OS X, installez FFmpeg utiliser Homebrew , en appelant brew install ffmpeg.

Sous Windows, il suffit de télécharger les versions précompilées .

Utilisez le format de longueur correct.

Notez que le format de durée utilise des points décimaux, et non des virgules, par exemple. hh:mm:ss[.xxx].

Retirer le -threads 0 option.

Permettant -threads 0 cependant m'a donné l'erreur "le tampon final est trop petit". Je ne sais même pas pourquoi ils autorisent une valeur de zéro ici, et à moins que vous n'ayez une raison spécifique de le faire, je laisserais simplement cet argument de côté. Idéalement, il devrait permettre auto-threads dans libx264, mais il y a peut-être un bug dont je ne suis pas au courant.

Encoder sans B-images.

En fonction de la taille de la vidéo de sortie, je ne sais pas si libx264 est même capable de produire de manière fiable des sorties en utilisant des images B qui font référence à une ou plusieurs images intra-codées Cela pourrait même conduire aux artefacts que vous décrivez.

Vous pouvez essayer de désactiver les images B (ou "images B") avec -bf 0.

slhck
la source
Merci pour votre réponse. Ma version de ffmpeg est 0.5.1, elle provient d’ubuntu reps = (. Vous êtes vous-même compilé ffmpeg? Je vais essayer de couper ma vidéo en tenant compte de vos conseils.
Rnd_d
@Rnd_d Oui, je l'ai fait. Il serait logique de recompiler à partir du code source, ce qui n’est pas si difficile sous Ubuntu. Il y a excellent tutoriels ici , assurez-vous d’ouvrir celui de votre version d’Ubuntu. J'utilise ces tutoriels pour compiler toutes les versions de FFmpeg que j'utilise pour Ubuntu.
slhck
Merci beaucoup! J'ai compilé la dernière version des didacticiels ffmpeg que vous avez examinés. La qualité de la vidéo et de l'audio encodés s'est améliorée! La désactivation des images b éliminait les artefacts.
Rnd_d
De rien! Si vous avez des questions sur les drapeaux utilisés par FFmpeg et libx264, un bon guide ici .
slhck