Je suis en train d'utiliser FFmpeg à la vidéo divisée en fonction de certains start_time
et les end_time
entrées, et remplacer ceux avec d' autres fichiers vidéo. Par exemple, pour l'entrée, 10 15
je devrai remplacer EXACT secondes 10 to 15
par une autre vidéo.
D'ACCORD. Ce qui me vient à l'esprit est le suivant:
- Divisez d'abord la vidéo (dans ce cas, 0-10, 10-15 et 15)
- Remplacez le 10-15 par l'autre vidéo
- Fusionner toutes les sous-vidéos
Première question: est-ce la solution la meilleure et la plus rapide? Avons-nous une commande plus simple ou d'autres outils pour remplacer une période de temps spécifique en vidéo par une autre vidéo?
Deuxième question: en supposant que FFmpeg est la solution viable, lorsque j'utilise simplement la commande ffmpeg -I input.video -ss 10 -t 5 -c copy output.mp4
, mon code de traitement vidéo ne peut pas lire et traiter le fichier. J'ai utilisé l' mediainfo
outil pour comparer les deux fichiers et j'ai remarqué des différences dans les tailles d'en-tête alors que toutes les choses liées au codec vidéo étaient les mêmes. J'ai remarqué que la taille de l'en-tête est différente, ce qui est apparemment à l'origine du problème. Existe-t-il des moyens de forcer la même taille d'en-tête (à part les codecs)?
MISE À JOUR: Voici le .mp4
fichier d' origine qui fonctionne bien dans l'émulateur.
.mp4
fichier d' origine si besoin.Réponses:
Utilisation de
trim
etconcat
- fichiers source avec différents codecsPour cela, assurez-vous que vos fichiers individuels ont la même résolution, et idéalement le même sous-échantillonnage de fréquence d'images et de chrominance, etc. Cela évitera des erreurs ou des problèmes pendant la concaténation.
Vous pouvez tout faire en une seule fois sans diviser le fichier, en utilisant les filtres
trim
etconcat
:Ici,
trim
est utilisé pour spécifier les parties individuelles des flux vidéo d'entrée (0:v
,1:v
) que vous souhaitez ultérieurement concaténer. Ces pièces sont nomméesv0
parv2
. (Lesetpts
filtre réinitialise les horodatages de ces parties individuelles à 0, ce qui est requis pour la concaténation). Plus tard, nous concaténons les trois parties.Si vous souhaitez découper à partir d'un certain horodatage jusqu'à la fin, utilisez
trim=start=15
au lieu de spécifier la plage.Si vos fichiers ont du son, vous devez couper ces flux séparément:
Notez que la vidéo et l'audio seront ré-encodés dans ce cas - assurez-vous de spécifier des cibles de qualité de sortie appropriées (par exemple
-crf
pour x264, x265 ou libvpx-vp9). Vous pouvez en savoir plus à ce sujet sur le Wiki FFmpeg, par exemple pour VP9 ou H.264 .Utilisation de segments individuels
Si vous souhaitez diviser les clips et les réassembler ultérieurement:
Si les fichiers ont du son, utilisez la même approche que ci-dessus:
Cela réencodera à nouveau le flux vidéo. C'est un peu plus simple, mais sinon, cela devrait être équivalent à la méthode ci-dessus.
Utilisation de
concat
demuxerVous pouvez en principe également essayer de concaténer les flux binaires sans les recoder, en utilisant le démultiplexeur concat. Créez un fichier appelé
concat.txt
et ajoutez les entrées suivantes (correspondant aux clips vidéo créés ci-dessus):Ensuite, concaténez ces fichiers individuels:
Cela nécessite cependant que vos clips aient le même codec, la même résolution, la même fréquence d'images, etc. - donc cela ne fonctionne pas avec toutes sortes de sources hétérogènes.
Utiliser le
concat
protocoleLe type de concaténation de niveau fichier ci-dessus peut également être réalisé en utilisant le
concat
protocole, avec le même type de contraintes que ci-dessus (même codec, résolution, etc.):Pour plus d'informations sur la concaténation, lisez la page Wiki FFmpeg correspondante .
la source
concat
méthode génère une erreur:[concat @ 00000000025c2560] Line 1: unknown keyword 'part1.mp4 \\ text.txt: Invalid data found when processing input
concat
démultiplexeur, la syntaxe était différente. Fixé maintenant. Pour aller jusqu'à la fin, utiliseztrim=start=15
, consultez la documentation du filtre de trim: ffmpeg.org/ffmpeg-filters.html#trim - comme pour les problèmes de timing, cela dépend vraiment de votre matériel source. Je n'ai pas eu de problèmes de concaténation avec le clip que vous avez téléchargé.