11 votes

Utilisation du filtre FFmpeg sans conversion vidéo

Quelqu'un a-t-il une idée de la façon dont je peux mettre un masque d'image sur la vidéo sans changer le codec audio et vidéo ?

Je crée différents fichiers multimédias à des fins de test et je veux contrôler les codecs audio et vidéo utilisés dans un conteneur A/V. Je dois maintenant placer un masque d'image sur un fichier A/V, sans modifier le codec audio et vidéo.

Lorsque vous utilisez ffmpeg -i video.avi -i image.png -filter_complex 'overlay' avi.mkv Je peux ajouter -acodec copy mais pas -vcodec copy ce qui donne l'erreur :

Streamcopy demandé pour la sortie streaam 0:0, qui est alimenté à partir d'un filtre graphique complexe. Le filtrage et le streamcopy ne peuvent pas être utilisés ensemble.

Et quand FFmpeg, en utilisant la commande ci-dessus, encode mes flux dans un autre format (MPEG-4 et MP3).

9voto

evilsoup Points 12077

Vous avez répondu à votre propre question : les filtres sont incompatibles avec copy . Tu utilises un filtre vidéo ici, donc tu ne peux pas utiliser -vcodec copy ou -c:v copy si vous utilisiez un filtre audio, vous ne pourriez pas utiliser -acodec copy ou -c:a copy .

copy comme son nom l'indique, copie le flux spécifié exactement, sans aucune modification. Les filtres modifient le(s) flux qu'ils ciblent. Par définition, copy et les filtres sont incompatibles.

Si vous voulez simplement choisir un codec vidéo spécifique, c'est assez simple : utilisez la fonction -c:v [codecname] ; vous pouvez voir une liste de tous les codecs que votre ffmpeg supporte avec

ffmpeg -codecs

1voto

Puisqu'il s'agit d'un test, définissez simplement un codec avec une qualité proche de l'original ou même un format de post-traitement tel que dnxhd .

# Convert with near original quality compression
ffmpeg -i video.avi -i image.png -filter_complex 'overlay' -vcodec libx265 -crf 10 output.avi

Nous utilisons libx265 car il donne une vidéo de très haute qualité et est très disponible. Un CRF faible donne les meilleurs résultats, 10 étant proche de la vidéo originale.

0voto

clone206 Points 11

Au cas où cela aiderait quelqu'un, il convient de noter qu'il existe probablement un moyen quelque peu laid de faire ce que vous voulez en combinant les éléments suivants ffprobe y ffmpeg en utilisant bash. Si vous avez ffmpeg installé, il y a de fortes chances que vous ayez ffprobe aussi. Pour un exemple simple, uniquement audio, ce qui suit a fonctionné pour moi, bien qu'en principe quelque chose de similaire devrait être réalisable avec des flux multiples de différents types.

ffmpeg -i neil_young_tell_me_why.wav -af aresample=resampler=soxr:precision=33:cheby=true -ar 96000 -acodec `ffprobe -v error -show_entries:a:0 stream=codec_name -of default=noprint_wrappers=1:nokey=1 neil_young_tell_me_why.wav | xargs echo -n` neil_young_tell_me_why_96Kup.wav

Explication : La sortie de l'outil ffprobe à l'intérieur des guillemets est étendu en place au flux 0 du codec audio du fichier d'entrée, la nouvelle ligne étant supprimée par la commande xargs . ffprobe a été paramétré pour produire une quantité minimale de texte, et la production de ffprobe L'auteur par défaut de l'application a été configuré de manière à supprimer tout texte superflu, tel que les étiquettes, etc. lors de l'écriture à l'écran.

Je voulais tester un rééchantillonnage de plus haute qualité avec l'option SoX J'ai donc rééchantillonné un fichier wav de 44.1KHz à 96KHz en gardant le même codec. Sans procéder de cette manière, le codec étant choisi automatiquement par l'utilisateur, il n'est pas possible de l'utiliser. ffmpeg avait une profondeur de bit plus faible, ce qui a entraîné une baisse de la résolution de 24 bits à 16 bits. De cette façon, il n'y a pas eu de perte de précision.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X