web-dev-qa-db-fra.com

Réduire la taille de la vidéo avec le même format et réduire la taille de l'image

Cette question pourrait être très basique

Existe-t-il un moyen de réduire la taille/le taux de trame du format compressé avec perte (WMV, MPEG) pour obtenir une vidéo plus petite, de taille inférieure, avec le même format.

Existe-t-il des API open source ou propriétaires pour cela?

68
Vignesh

ffmpeg fournit cette fonctionnalité. Tout ce que vous avez à faire est de lancer quelque chose comme

ffmpeg -i <inputfilename> -s 640x480 -b 512k -vcodec mpeg1video -acodec copy <outputfilename>

Pour les nouvelles versions de ffmpeg, vous devez changer -b à -b:v:

ffmpeg -i <inputfilename> -s 640x480 -b:v 512k -vcodec mpeg1video -acodec copy <outputfilename>

convertir le fichier vidéo d'entrée en une vidéo de 640 x 480 et un débit de 512 kilobits/s à l'aide du codec vidéo MPEG 1 et en copiant simplement le flux audio d'origine. Bien sûr, vous pouvez insérer toutes les valeurs dont vous avez besoin et jouer avec la taille et le débit pour obtenir le compromis qualité/taille que vous recherchez. Il y a aussi une tonne d'autres options décrites dans la documentation

Courir ffmpeg -formats ou ffmpeg -codecs pour une liste de tous les formats et codecs disponibles. Si vous n'avez pas à cibler un codec spécifique pour la sortie finale, vous pouvez obtenir de meilleurs taux de compression avec une perte de qualité minimale en utilisant un codec à la pointe de la technologie tel que H.264.

83
Jason B

Si vous souhaitez conserver la même taille d'écran, vous pouvez envisager d'utiliser le facteur crf: https://trac.ffmpeg.org/wiki/Encode/H.264

Voici la commande qui fonctionne pour moi: (sur mac, vous devez ajouter -strict -2 pour pouvoir utiliser le codec audio aac.

ffmpeg -i input.mp4 -c:v libx264 -crf 24 -b:v 1M -c:a aac output.mp4
37
rebe100x

Au lieu de choisir des débits binaires fixes, avec le codec H.264, vous pouvez également choisir un autre préréglage, comme décrit à l’adresse https://trac.ffmpeg.org/wiki/x264EncodingGuide . J'ai également trouvé comparaison d'encodeur vidéo sur le blog de KeyJ ( version archivée ) une lecture intéressante, il compare H.264 à Theora et à d'autres.

Voici une comparaison des différentes options que j'ai essayées. La vidéo enregistrée avait une taille initiale de 673M, prise sur un iPad avec RecordMyScreen . Il a une durée d'environ 20 minutes avec une résolution de 1024x768 (la moitié de la vidéo étant vierge, je l'ai donc recadrée à 768x768). Afin de réduire la taille, j'ai abaissé la résolution à 480x480. Il n'y a pas d'audio.

Les résultats, en prenant la même base 1024x768 (et en appliquant le rognage, la mise à l’échelle et n filtre ):

  • Sans options spéciales: 95M (temps d'encodage: 1m19s).
  • Avec seulement -b 512k _ ajouté, la taille a chuté à 77M (temps d’encodage: 1m17s).
  • Avec seulement -preset veryslow (et non -b), il est devenu 70M (temps d’encodage: 6m14s)
  • Avec les deux -b 512k et -preset veryslow, la taille devient 77M (100K plus petit que juste -b 512k).
  • Avec -preset veryslow -crf 28, Je reçois un fichier de 39M qui a pris 5m47s (sans différence de qualité visuelle pour moi).

N = 1, prenez donc les résultats avec un grain de sel et effectuez vos propres tests.

29
Lekensteyn
ffmpeg -i <input.mp4> -b:v 2048k -s 1000x600 -fs 2048k -vcodec mpeg4 -acodec copy <output.mp4>
  • -i fichier d'entrée

  • -b: v vidéobitrate de sortie vidéo en kilo-octets (vous devez essayer)

  • -s dimensions de la sortie vidéo

  • -fs TAILLE DU FICHIER de la sortie vidéo en kilo-octets

  • -vcodec videocodec (utilisez ffmpeg -codecs pour lister tous les codecs disponibles)

  • -acodec audio codec pour la sortie vidéo (ne copiez que l'audiostream, ne tempérez pas)
4
Rumroedeln

Je me suis retrouvé à vouloir le faire trop récemment. J'ai donc créé un outil appelé Shrinkwrap qui utilise FFmpeg pour transcoder des vidéos, tout en préservant le plus possible les métadonnées d'origine (y compris horodatage de modification de fichier).

Vous pouvez l'exécuter en tant que conteneur docker:

docker run -v /path/to/your/videos:/vids bennetimo/shrinkwrap \
--input-extension mp4 --ffmpeg-opts crf=22,preset=fast /vids

Où:

  • / path/to/your/videos/est l'endroit où les vidéos que vous souhaitez convertir
  • --input-extension est le type de vidéos que vous souhaitez traiter, ici .mp4
  • --ffmpeg-opts désigne toutes les options arbitraires de FFmpeg que vous souhaitez utiliser pour personnaliser le transcodage

Ensuite, tous les fichiers vidéo correspondant à l’extension seront récursivement recherchés et transcodés dans un fichier du même nom avec un -tc suffixe.

Pour plus d'options de configuration, de préréglages pour GoPro, etc., consultez le readme .

J'espère que ça aide quelqu'un!

3
bennetimo

Il existe une application pour les appels Mac et Windows Handbrake, je sais que ce n'est pas une commande en ligne de commande, mais un fichier rapidement ouvert: sélectionnez le format du fichier de sortie et la taille de sortie approximative tout en conservant l'essentiel des avantages de la vidéo. , c’est une vue graphique de ffmpeg à son meilleur ... Il prend en charge la saisie en ligne de commande pour ces texteurs difficiles .. https://handbrake.fr/downloads.php

3
Jimbo Bryant