web-dev-qa-db-fra.com

Taux de compression suggéré avec H.264?

Note bene: Je réalise que c'est une question extrêmement complexe avec environ un million de nuances que j'essaie de réduire à un seul chiffre ...

Je suis sur le point d'entreprendre un grand projet de codage vidéo utilisant le codage H.264. Nous essayons de créer plusieurs profils de débit afin de permettre la transmission en continu via les connexions Internet, les processeurs, les périphériques, etc.

De manière générale, quel type de taux de compression devrais-je m'attendre à voir (tout en restant dans un niveau de qualité raisonnable)? 

Par exemple, un fichier vidéo de 640 x 360 (16: 9) pixels à 24 images par seconde et une couleur 16 bits devraient donner un fichier non compressé d'environ 33 Mo/s.

On m'a dit que, pour ce fichier, 500 Kbits/s (ou 62 Ko/s) n'est pas un débit vidéo déraisonnable. Cela semble insensé - plus de 530: 1 compression? C'est 99,8% de compression. Est-ce que mes calculs sont faux?

Je cherche simplement un guide externe approximatif pour la qualité, comme "plus de 500 fois la compression est folle" ou "moins de 400x est un gaspillage de bande passante". J'ai regardé partout et rien ne me donne le type de compression attendu ...

33
Nuby

Dans un document assez intéressant appelé H.264 Primer , une formule simple est donnée comme indice pour calculer le débit `idéal 'du fichier de sortie, en fonction des caractéristiques de la vidéo:

[largeur de l'image] x [hauteur de l'image] x [nombre d'images par seconde] x [rang du mouvement] x 0,07 = [débit binaire souhaité]

où la largeur et la hauteur de l'image sont exprimées en pixels et où le rang de mouvement est un entier compris entre 1 et 4, 1 étant un mouvement faible, 2 le mouvement moyen et 4 le mouvement élevé (le mouvement étant la quantité de données d'image variant entre cadres, voir le document lié pour plus d’informations).

Ainsi, par exemple, si nous prenons une vidéo 1280x720 à 24 images par seconde, avec un mouvement moyen (film avec des mouvements de caméra lents, peu de changements de scène ...), le débit idéal devrait être:

1280 x 720 x 24 x 2 x 0,07 = 3 096 576 bps => environ 3 000 kbps

Ceci est purement une allusion, et à mon avis, le seul moyen de trouver avec précision le débit idéal est d'essayer par erreur :)

58
SirDarius

Cela varie considérablement en fonction du contenu des vidéos sources. J'y viendrai dans un instant. 

640x360 n'est pas si grande. 512kbps est très raisonnable et sans doute standard. Peut-être 768kbps si vous êtes vraiment intéressé par la qualité.

Comment est-ce possible? Réponse simplifiée: Il existe plusieurs techniques et informations sur/ la compression vidéo qui rendent cela possible: 

  1. Toutes les structures de données d'image vidéo d'un H.264 commun (ou d'autres CODEC) n'est pas une image complète. Au lieu de cela, il existe deux types qui sont couramment appelés
    1. Images clés: un rendu complet de l'image vidéo entière
    2. Intra-frames: description des modifications apportées à l'image précédente. Ces images constituent généralement la grande majorité (80% à 99%) des images d'une vidéo.
  2. H.264 est "avec pertes} _", comme beaucoup d'autres CODEC. Ils ne reproduisent pas une copie exacte pixel par pixel, image par image de la vidéo source d'origine. Exemple: blocs avec pertes: si tous les pixels d'une zone ont la même couleur, le CODEC "perd" le pixel. Ainsi, au lieu d'avoir à stocker des informations sur chaque pixel d'une image, le CODEC indique simplement "x1, y1 à x2, y2 sont tous de couleur x". Très efficace. 

Tout cela est énormément plus complexe que cela, avec des millions d’approches, de techniques et d’algorithmes différents au sein de CODEC spécifiques et entre CODEC pour y parvenir.

Revenons donc au commentaire "Cela variera considérablement en fonction du contenu des vidéos sources": le taux de compression que vous verrez, ainsi que la qualité qui en résulte, dépendra en grande partie de:

  • le contenu de la vidéo
  • votre tolérance aux artefacts (blocs, perte de couleur, perte de définition)
  • les paramètres CODEC que vous avez définis et comment vous les avez définis

Exemple: une vidéo d'une porte dans une pièce (comme une caméra de sécurité) avec une image clé toutes les dix minutes produira un taux de compression incroyablement élevé. Mes calculs de la serviette en papier ce scénario à une compression de 15 000: 1}

Étant donné que vous démarrez un grand projet d’encodage vidéo, je vous recommanderais deux solutions pour déterminer le taux de compression de votre ordinateur:

  • prenez un échantillon des vidéos sources que vous allez encoder. 100 ou plus étant statistiquement pertinents.
  • encodez-les à différents débits binaires, avec différents paramètres, pour déterminer quelles caractéristiques résultantes répondent à vos besoins

La modification des paramètres de l'encodeur pour réduire la taille des vidéos peut également avoir d'autres conséquences:

  • exigences de processeur plus élevées
  • attentes du CODEC des joueurs. Toutes les vidéos encodées en H.264 ne peuvent pas être lues par tous les lecteurs
  • temps d'encodage plus longs
  • divers dégradant de qualité

C'est un gros sujet compliqué. Bonne chance. Mon test expérimenté "pouce au vent" indique que vous serez plus qu'heureux de disposer de 512-768kbps pour votre projet.

20
Stu Thompson
 Taux de compression Règles de pouce 
 Taux de compression pour maintenir une excellente qualité: 
– 10: 1 pour les images générales utilisant JPEG 
– 30: 1 pour la vidéo générale utilisant H.263 et MPEG-2. .– 50: 1 pour la vidéo en général avec H.264/MPEG-4 AVC 

de http://www.kanecomputing.co.uk/pdfs/compression_ratio_rules_of_thumb.pdf

8
Const

N'oubliez pas que la lecture normale MPEG utilisera uniquement YUV 4: 2: 0. Avec une profondeur de couleur de 8 bits, chaque pixel ne vaut que 16 bits (ou 64 bits de 4 pixels). S'il vous plaît, seul le fichier RAW de l'appareil photo utilisera une profondeur de 16 bits, et il doit valoir des millions de dollars! Film de niveau moyen élevé DVR ne peut fournir qu'une résolution de 12-14 bits! . H.264 est conçu pour le produit final.

En 640x360/24p YUV4: 2: 0 le débit vaudra:

  640x360x24x(8+4+4)/8 = 10.5MB/s

Pour 500Kbps, la compression ne sera que de 172: 1. C'est normal

Pour expatiation de YUV4: 2: 0, lire:
http://fr.wikipedia.org/wiki/Chroma_subsampling

2
Wilson Luniz

Juste partager mes connaissances sur l'encodage avec l'environnement H264

En ce qui concerne le rapport 450-512 kbits/seconde est préférable si vous utilisez H264 avec High 5.0 ou High 7.0 . Eh bien, je peux vous suggérer que pour obtenir un bon rapport entre équilibre et qualité, la clé qui compte vraiment c'est pour jouer avec la taille de résolution . Résultat de la résolution de la vidéo = 3/4 * Résolution de la vidéo Native/Raw

H264 a tendance à perdre davantage de détails si vous ne compressez pas le cadre dans une résolution un peu plus petite.

0
laruffii