Pouvez-vous épisser un clip d’une minute sur un fichier plus volumineux sans le transcoder?

StackOverflow https://stackoverflow.com/questions/1641135

Question

J'ai un site qui permet aux utilisateurs de télécharger des fichiers vidéo volumineux dans différents formats (avi, mp4, mkv et flv). J'ai besoin de générer un "échantillon" d'une minute à partir du fichier plus volumineux qui a été chargé et que l'échantillon doit être au même format, avoir les mêmes dimensions d'image et le même débit en bits que le fichier d'origine. Y at-il un moyen de simplement couper une section du fichier dans un nouveau fichier? De préférence dans ffmpeg (ou tout autre outil si ffmpeg est impossible).

Était-ce utile?

La solution

Tout d'abord, vous voudrez comprendre le fonctionnement des fichiers vidéo. Voici une série de didacticiels expliquant que: Overly Guide simpliste de la vidéo sur Internet .

Ensuite, vous pouvez essayer divers outils pouvant vous aider à découper un échantillon. L'un d'entre eux est flvtool (si votre entrée est FLV) ou FFmpeg . Avec FFmpeg, vous pouvez spécifier une heure de début et une heure de fin et il tentera de couper exactement ce que vous souhaitez (mais il devra trouver l'image clé la plus proche pour commencer à découper).

Voici la commande FFmpeg qui permet de lire un fichier nommé input.flv, de commencer la vidéo pendant 15 secondes, puis de couper les 60 secondes suivantes, tout en conservant les mêmes paramètres pour le code audio et le codec vidéo, puis enregistrez-les dans un fichier de sortie:

ffmpeg -i input.flv -ss 15 -t 60 -acodec copy -vcodec copy output.flv

Enfin, si vous le souhaitez, vous pouvez écrire du code informatique en C ou C ++ (à l'aide des bibliothèques libav de FFmpeg) ou en Java (à l'aide de Xuggler ) pour le faire par programme, mais c'est assez avancé pour votre cas d'utilisation.

Autres conseils

Si vous ne parvenez pas à synchroniser automatiquement l'auto et la vidéo, voici ce qui peut vous aider (disponible sur un autre site Web):

ffmpeg -sameq -i file.flv -ss 00:01:00 -t 00:00:30 -ac 2 -r 25 -copyts output.flv

Comme le note Evan, l’approche adoptée dans la réponse acceptée peut entraîner une perte de synchronisation A / V. Cependant, sa solution n’est pas correcte car -sameq a été supprimé.

Comme indiqué à la https://trac.ffmpeg.org/wiki/Seeking , le < L'option code> -ss doit précéder -i , pas après. Cela a résolu le problème pour moi.

L'option suivante consiste à utiliser le commutateur -fs . Exemple:

ff -i ip.mkv -fs 500M -c copy ~/Movies/reservoir/carbohydrates.mkv

Extrayez 500 mégaoctets (500 octets 1000 et 1000 octets + multiplexage de la surcharge & 8217;) de la source sélectionnée. & # 8211; En fonction de la taille du fichier, comme vous pouvez le constater

Un amour. Et respect.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top