web-dev-qa-db-fra.com

Convertir une vidéo en définissant la taille finale

Existe-t-il un moyen de définir la taille finale maximale pour la conversion vidéo à l'aide de ffmpeg (ou de tout autre convertisseur vidéo basé sur la CLI)?

Comme si j'avais une vidéo de 100 Mo et que je voulais la convertir en une vidéo de 10 Mo avec la plus haute qualité possible, compte tenu du format final, ce n'est pas important.

2
Asme Just

Aller de 100mb à 10mb est une chute de taille légèrement irréaliste de 90% mais je vais donner un exemple de réduction à 50mb en créant une vidéo H.264, ce qui est une réduction plus raisonnable de 50% de la taille et de 40 Mo avec HEVC.

J'utilise l'exemple de fichier suivant:

wget http://dl3.h265files.com/TearsOfSteel_720p_h265.mkv

Vous pouvez utiliser cet exemple de fichier pour confirmer les résultats suivants que j’ai donnés et peut-être expérimenter un peu plus loin vous-même. MediaInfo révèle ce qui suit pour ce fichier téléchargé:

mediainfo \
--Inform="General;Duration=%Duration/String3%\nFile size=%FileSize/String1%" \
TearsOfSteel_720p_h265.mkv
Duration=00:12:14.058   <-----
File size=101 MiB       <-----

Les flèches sont bien sûr les miennes! Vous avez alors peut-être 2 très bons choix:

  1. Re-encoder en H.264
  2. Ré-encodez en HEVC

1. Re-encoder en H.264 (50 Mo)

H.264 est maintenant largement accepté et constituerait un excellent choix pour votre fichier vidéo de sortie. La formule permettant de calculer le débit de sortie pour les 50 Mo souhaités serait alors la suivante:

(50 MiB * 8192 [converts MiB to kBit]) / 734 seconds = ~558 kBit/s total bitrate
558 - 128 kBit/s (desired audio bitrate) = 430 kBit/s video bitrate

Pour ce faire, utilisez la commande FFmpeg 2 pass suivante:

ffmpeg -y -i TearsOfSteel_720p_h265.mkv \
      -c:v libx264 -b:v 430k -pass 1 \
      -c:a libmp3lame -b:a 128k -f mp4 /dev/null && \
ffmpeg -i TearsOfSteel_720p_h265.mkv \
       -c:v libx264 -b:v 430k -pass 2 \
       -c:a libmp3lame -b:a 128k TearsOfSteel_smaller.mp4

La taille du fichier résultant est de 49,4 Mo avec une qualité de lecture assez raisonnable, mais pas étonnante. Assez bon pour une réduction de 50% de la taille du fichier et une énorme baisse du débit vidéo réellement!

2. Ré-encodez en HEVC (40mb)

Un autre choix (comme suggéré par emk2203) est de réencoder le flux HEVC existant avec un débit binaire inférieur, cette fois-ci visant 40 Mo car HEVC revendique une meilleure qualité à un débit binaire inférieur .

Cette fois la formule serait:

(40 MiB * 8192 [converts MiB to kBit]) / 734 seconds = ~446 kBit/s total bitrate
446 - 128 kBit/s (desired audio bitrate) = 318 kBit/s video bitrate

et la ligne de commande de FFmpeg 2 pass est:

ffmpeg -y -i TearsOfSteel_720p_h265.mkv \
      -c:v libx265 -x265-params pass=1 -b:v 318k \
      -c:a libmp3lame -b:a 128k -f mp4 /dev/null && \
ffmpeg -i TearsOfSteel_720p_h265.mkv \
       -c:v libx265 -x265-params pass=2 -b:v 318k \
       -c:a libmp3lame -b:a 128k TearsOfSteel_smaller.mp4

Et cela fournit un fichier de 40 Mo avec une qualité assez raisonnable .

En conclusion:

À partir de ces exemples, vous pouvez expérimenter davantage en diminuant le MiB requis dans la formule et en observant la qualité de visualisation ultérieure. S'amuser!!

Références:

7
andrew.46

Oui. Choisissez un codec vidéo (x264 est un bon universel) et choisissez la résolution, laissez la plupart des paramètres par défaut, mais effectuez une conversion en 2 passes avec un débit binaire moyen.

Petit cours en compression vidéo: la complexité de la vidéo change tout au long de la vidéo. Par conséquent, si vous effectuez une compression du même niveau de qualité visuelle tout au long du processus, le débit binaire réel fluctuera de haut en bas. Si vous compressez à un débit fixe, la qualité des bits de complexité élevée sera mauvaise car le débit est trop faible et/ou le débit utilisé sera trop élevé pour les parties de faible complexité. Donc, autant que vous le pouvez, laissez-le viser une qualité constante et laissez le débit fluctuer comme il le peut. Mais si le compresseur vise une taille de fichier particulière, il ne sait pas si la complexité de la vidéo augmentera ou diminuera dans les parties qu’il n’a pas encore converties. C’est pourquoi les utilisateurs utilisent une conversion à 2 passages taille de fichier particulière.

Vous devez spécifier la sortie sous forme de débit (audio et vidéo, plus le conteneur a une légère surcharge), vous avez donc besoin d'une calculatrice pour convertir une taille de fichier et une durée en un débit.

0
thomasrutter