LVDO (pronounced as ludou) is a video steganography implementation by StarBrilliant using DCT coefficients.
You can convert a file into video and upload it to YouTube or many other video sites. The receiver downloads the video and is able to extract the file using the same parameter you encode it.
This is a possible combination of parameters:
# Install dependencies (modify according to your Linux distribution)
sudo apt-get install libglib2.0-dev libfftw3-dev
sudo apt-get install git ffmpeg x264 mplayer
# Compile it
git clone https://github.com/m13253/lvdo.git
cd lvdo/src
make
# Encode
cat secret.mp3 | ./lvdoenc -s 640x480 -q 6 --qmin 1 --qmax 4 | x264 --input-res 640x480 --fps 1 --profile high --level 5.1 --tune stillimage --crf 22 --colormatrix bt709 --me dia --merange 0 -o public.mkv -
# Decode
ffmpeg -i public.mkv -r 1 -f rawvideo - | ./lvdodec -s 640x480 -q 6 --qmin 1 --qmax 4 | mplayer -
Some parameter combination causes undecodable file.
Due to rounding errors, input file and output file is not precisely the same. You should add some mechanism to keep file integrity. Join the discussion on this issue.
Note that LVDO is not cryptographic secure! Anyone can decode the data with the same parameters. If you have secret data, encrypt it with a password or a key before feeding it into LVDO.
This program is licensed under GNU General Public License version 3 or later, the author does not provide any warranties. Users should be responsible for any potential damage caused by this software.
Head to the file LICENSE in the code repository for the license text.
I hope you will not abuse this program to do something evil.
I suggest you not try to encode porn with LVDO and upload it to YouTube. You would be punished then.
-
Why is it called LVDO?
You will find some secrets when you spell it out in Japanesu Engurishu.
-
How do I adjust those complicated parameters?
Do not use the maximum. Do not use the minimum either. Try to decode your self before publishing.
-
Why the video downloaded from YouTube can not be decoded?
Play around with those parameters please. If you could not get it work, feel free to contact me for help. Also, YouTube forces the use of BT.709 colormatrix, make sure you are using the correct x264 setting.
-
What is
clipping xxx to xxx
?It means the decoded file is corrupted. If it happens a lot during decoding, make sure you are using appropriate parameters. If it happens a lot during encoding, please submit an issue to me alongside with your parameters.
-
Any other questions?
See if there are any issues on your question. If not, submit one.
-
A friendlier GUI
-
A streaming decoder in HTML5
-
Transmission Control Layer built on top of Bitstream Transport Layer
-
Error tolerance control, see issue #4
-
Watermark bypassing mechanism
-
Carrier picture support, that is what the encoded picture looks like, see issue #3
-
Co-operation with some parasitic video sites
See LVDO in action.