Un guide de la stéganographie vidéo à l’aide de Python – Meilleure programmation
Une vidéo est une collection d’images et chaque image est une image. Donc, si nous retirons toutes les images d’une vidéo, nous pouvons utiliser cette méthode pour stocker nos données à l’aide de la stéganographie LSB et recoudre ces images dans une vidéo avec le message secret.
La vidéo source d’origine est assez longue, donc je viens d’en utiliser une partie de huit secondes.
1. Extraire des images d’une vidéo
Pour extraire des images d’une vidéo, nous pouvons utiliser la bibliothèque de vision par ordinateur la plus populaire, OpenCv.
Tout d’abord, installez OpenCv et importez-le:
import cv2
Nous devons lire la vidéo. Parcourez la vidéo image par image et enregistrez toutes les images dans un nouveau répertoire.
Pour charger la vidéo, nous exécutons:
vidcap = cv2.VideoCapture("video.mp4")
Cela charge la vidéo dans vidcap. Maintenant, nous pouvons utiliser le read
méthode pour lire les images de « video.mp4: »
success, image = vidcap.read()
Nous pouvons définir une boucle pour parcourir toutes les images et l’enregistrer avec un nom de fichier unique que nous pouvons facilement trier:
Une fois cela fait, nous nous retrouvons avec toutes les images de la vidéo.
Mais une vidéo n’est pas seulement une collection d’images. Il y a aussi de l’audio. Pour extraire cet audio, nous utiliserons FFmpeg.
2. Extraire l’audio d’une vidéo
FFmpeg est un outil en ligne de commande gratuit et open-source pour le transcodage de fichiers multimédias. Il contient un ensemble de bibliothèques audio et vidéo partagées telles que libavcodec, libavformat et libavutil. Avec FFmpeg, vous pouvez extraire des fichiers audio d’une vidéo, convertir vos fichiers image PNG en vidéo, et bien plus encore.
Pour installer FFmpeg dans Ubuntu, mettez d’abord à jour la liste des packages:
$sudo apt update
Exécutez ensuite la commande ci-dessous pour installer FFmpeg:
$sudo apt install ffmpeg
Pour valider que FFmpeg est installé correctement, exécutez:
ffmpeg -version
Si vous obtenez quelque chose comme le message ci-dessous, tout est OK:
ffmpeg version n4.1.4 Copyright (c) 2000-2019 the FFmpeg developers
Pour utiliser FFmpeg en Python, nous devons importer l’appel et STDOUT à partir du sous-processus bibliothèque:
from subprocess import call,STDOUT
Et puis nous pouvons exécuter le code ci-dessous en Python:
call(["ffmpeg", "-i","video.mp4" , "-q:a", "0", "-map", "a", "tmp/audio.mp3", "-y"],stdout=open(os.devnull, "w"), stderr=STDOUT)
Ce code extraira l’audio du fichier vidéo donné et l’enregistrera sous «audio.mp3» dans le dossier tmp. Après avoir encodé les images avec notre texte, nous pouvons ensuite utiliser ce fichier audio pour donner à notre fichier vidéo encodé l’audio approprié.
3. Encodage du texte à l’intérieur des cadres
Maintenant que nous avons tous les cadres, nous pouvons diviser les chaînes en petits morceaux et masquer chaque morceau du message à l’intérieur d’un cadre en utilisant le lsb.hide()
méthode:
split_string
est une fonction d’aide pour diviser les chaînes en petites portions. Comme nous n’avons pas besoin de cacher tout le texte dans le premier cadre lui-même, nous divisons les cadres et le cachons dans de nombreux cadres. Le code complet peut être trouvé sur GitHub.
Nous avons chargé une vidéo, l’avons tirée sur autant d’images que possible et l’avons encodée. Maintenant, nous devons rassembler les images dans une vidéo.
4. Faire de la vidéo à partir d’images
Nous pouvons utiliser FFmpeg pour assembler toutes nos images avec un message caché pour former une vidéo, puis disposer l’audio:
call(["ffmpeg", "-i", "tmp/frame%d.png" , "-vcodec", "png", "video.mov", "-y"],stdout=open(os.devnull, "w"), stderr=STDOUT)
L’exécution du code ci-dessus crée la vidéo avec notre message secret caché dedans.
Nous pouvons exécuter le code ci-dessous si nous voulons des sons dans notre vidéo:
call(["ffmpeg", "-i", "temp/video.mov", "-i", "temp/audio.mp3", "-codec", "copy","data/enc-" + str(file_name)+".mov", "-y"],stdout=open(os.devnull, "w"), stderr=STDOUT)
Et nous l’avons fait. La vidéo de sortie est de près de 900 Mo. J’ai téléchargé une petite partie de la vidéo pour montrer que la qualité vidéo n’est pas affectée par cette méthode.
Maintenant que nous avons fait la partie difficile de l’encodage, voyons comment une personne peut décoder notre vidéo et lire le message.
Déchiffrer le message de la vidéo
Nous devons faire les mêmes étapes qu’avec le chiffrement, mais dans l’ordre inverse. Nous extrayons donc toutes les images de la vidéo et extrayons les informations du LSB: