Je souhaite diviser une grande vidéo avi en deux vidéos consécutives plus petites. J'utilise ffmpeg.
Une façon consiste à exécuter ffmpeg deux fois:
ffmpeg -i input.avi -vcodec copy -acodec copy -ss 00:00:00 -t 00:30:00 output1.avi
ffmpeg -i input.avi -vcodec copy -acodec copy -ss 00:30:00 -t 00:30:00 output2.avi
Mais selon la page de manuel de ffmpeg, je peux créer plus d'un fichier de sortie à partir d'un fichier d'entrée en utilisant une seule ligne:
ffmpeg -i input.avi -vcodec copy -acodec copy -ss 00:00:00 -t 00:30:00 output1.avi \
-vcodec copy -acodec copy -ss 00:30:00 -t 00:30:00 output2.avi
Ma question est la suivante: la dernière approche économise-t-elle du temps de calcul et de la mémoire?
htop
), et nous dire quelle est la réponse?-ss
comme option d'entrée dans la deuxième division peut ne pas être précise, vous pourriez donc ne pas obtenir une division nette. OMI l'exemple par OP est plus correct.Réponses:
Le wiki ffmpeg renvoie à cette page en référence à "Comment diviser une vidéo efficacement". Je ne suis pas convaincu que cette page répond à cette question, alors j'ai fait ce que @AlcubierreDrive a suggéré…
Quelles sorties ...
J'ai testé un fichier SD & HD, après quelques essais et un peu de maths.
Fichier SD = 1,35 Go de flux de transport DVB
Fichier HD = 3,14 Go de flux de transport DVB
Conclusion
La commande unique est meilleure si vous manipulez HD, elle est d'accord avec les commentaires du manuel sur l'utilisation de -ss après le fichier d'entrée pour faire une «recherche lente». Les fichiers SD ont une différence négligeable.
La version à deux commandes devrait être plus rapide en ajoutant un autre -ss avant le fichier d'entrée pour une «recherche rapide» suivie d'une recherche lente plus précise.
la source
-q:v 0
.Voici un script utile, il vous aide à fractionner automatiquement: Un script pour fractionner des vidéos à l'aide de ffmpeg
la source
D'après mon expérience, n'utilisez pas ffmpeg pour le fractionnement / la jointure. MP4Box, est plus rapide et léger que ffmpeg. Essayez-le. Par exemple, si vous souhaitez diviser un fichier MP4 de 1400 Mo en deux parties de 700 Mo, vous pouvez utiliser la cmdl suivante:
MP4Box -splits 716800 input.mp4
par exemple, pour concaténer deux fichiers, vous pouvez utiliser:Ou si vous avez besoin d'une division par temps, utilisez
-splitx StartTime:EndTime
:MP4Box -add input.mp4 -splitx 0:15 -new split.mp4
la source
EndTime
que-t
.http://ffmpeg.org/trac/ffmpeg/wiki/Seeking%20with%20FFmpeg peut également vous être utile. Ffmpeg a également un multiplexeur de segment qui pourrait fonctionner.
Quoi qu'il en soit, je suppose que les combiner en une seule commande permettrait de gagner du temps.
la source
Il n'y a pas de grande différence entre ces deux exemples que vous avez fournis. Le premier exemple coupe la vidéo séquentiellement, en 2 étapes, tandis que le deuxième exemple le fait en même temps (en utilisant des threads). Aucune accélération particulière ne sera perceptible. Vous pouvez en savoir plus sur la création de plusieurs sorties avec FFmpeg
De plus, ce que vous pouvez utiliser (dans FFmpeg récent) est le multiplexeur de segment de flux qui peut:
la source
Voici un simple fichier bat de Windows pour diviser le fichier entrant en 50 parties. Chaque partie a une durée de 1 minute. Désolé pour un script aussi stupide. J'espère qu'il vaut mieux avoir un script Windows stupide au lieu de ne pas l'avoir du tout. Peut-être que ça aide quelqu'un. (Basé sur "bat file for loop" de ce site.)
la source
ffmpeg
commandes consécutives ) réécrit en boucle. Cela ne répond pas à la question de savoir si cette approche ou une seule commande "économisera du temps de calcul et de la mémoire".Je n'ai pas testé ist, mais cela semble prometteur:
Segmenteur de flux de base
Il divise évidemment l'AVI en segments de même taille, ce qui implique que ces blocs ne perdent pas de qualité, n'augmentent pas la mémoire ou doivent être recalculés.
Il utilise également la copie du codec - cela signifie-t-il qu'il peut gérer de très gros flux? Parce que c'est mon problème, je veux décomposer mon avi pour pouvoir utiliser un filtre pour me débarrasser de la distorsion. Mais tout un avi fonctionne pendant des heures.
la source
Voici un moyen idéal pour diviser la vidéo. Je l'ai déjà fait et cela fonctionne bien pour moi.
ffmpeg -i C:\xampp\htdocs\videoCutting\movie.mp4 -ss 00:00:00 -t 00:00:05 -async 1 C:\xampp\htdocs\videoCutting\SampleVideoNew.mp4
(Pour cmd).shell_exec('ffmpeg -i C:\xampp\htdocs\videoCutting\movie.mp4 -ss 00:00:00 -t 00:00:05 -async 1 C:\xampp\htdocs\videoCutting\SampleVideoNew.mp4')
(pour php).Veuillez suivre ceci et je suis sûr que cela fonctionnera parfaitement.
la source
-i
suivi de-ss
et-t
. La question est de savoir comment extraire efficacement plusieurs segments du même fichier d'entrée, alors que vous n'en extrayez qu'un seul segment. Je ne vois pas comment cela répond à la question.un moyen simple consiste à utiliser l'option trim avec l' API basée sur l'URL de publitio .
une fois que vous avez téléchargé votre vidéo, définissez simplement le décalage de début et le décalage de fin dans l'URL (so_2, eo_2) comme suit:
cela créera instantanément de nouvelles vidéos à partir de la 2ème seconde et d'une durée de 2 secondes. vous pouvez diviser les vidéos de cette façon comme vous le souhaitez.
la source
ffmpeg
. À moins que vous ne disposiez d'une connexion Internet vraiment très rapide, je pense que le fait de devoir télécharger la vidéo entière sur un service cloud, puis de télécharger les résultats, augmentera considérablement le temps de traitement. Cependant, cela ne répond toujours pas à la question qui approche avecffmpeg
est plus efficace.