I have received by e-mail a rotated video in the ‘flv’ format. The video was supposed to be a vertical one, but it turned out to be horizontal, that is ROTATED. So, I wrote a little program to rotate it back using libming.
There are two things to take care of when processing the input FLV:
- The video stream.
- The sound stream.
Both can be taken from the FLV file.
The code is written in C++, but can be translated easily into PHP. Following is the code:
#include <iostream>
#include <mingpp.h>
using namespace std;
int main(){
const char *flvFile ="/path/to/inputVideoFile.flv";
// Get the video stream from the file. The input file can be in the FLV format.
SWFVideoStream *stream = new SWFVideoStream(flvFile);
SWFMovie mov (9); // Create the movie object.
// The method 'add' returns a display item.
// Display items can be rotated, transformed, etc.
SWFDisplayItem *di=mov.add(stream);
// Sound streams are taken from a file object.
FILE *soundFD = fopen(flvFile, "rb+");
SWFSoundStream sound(soundFD);
// The original dimensions of the video are 426 X 240.
di->rotate(-90); // Rotate the item 90 degrees clockwise
di->move(240, 0); // The rotation moves point (0,240) to (-240,0).
mov.setSoundStream(&sound,0); // Add the sound stream at the beginning
// of the movie.
// Show the frames one by one.
int noFrames = stream->getNumFrames();
for (int i=0; i<noFrames; i++)
mov.nextFrame();
mov.setDimension(240, 426); // The new dimensions.
mov.save("/path/to/outputVideoFile.swf", 9);
cerr<<"Fin\n";
return 0;
}
This will create a real vertical movie. Don’t share it on YouTube or anywhere you cannot control your movie dimensions.