In this article we would like to introduce the reader to the great software called FFMPEG.
FFMPEG is a free, open source, command line program that can greatly assist anyone doing work related to development, testing, or integration of digital video and/or IPTV. Anyone working in these fields should absolutely have it as part of their toolset.
It can be downloaded from http://www.ffmpeg.org, and is available for most platforms, including Windows, OSX, and Linux.
FFMPEG carries an enormous set of features, here are some of the most common ones:
Here are some examples on how we utilize FFMPEG for common day-to-day operations.
The broadcasting industry has embraced Transport Streams as a container format for digital video/audio. TS files are commonly used in IPTV applications, and as input to digital modulators (such as our TVB597 or DTU-215).
Here is a quick way to create TS files from your H.264 or MPEG-2 files.
ffmpeg -i input.avi -vcodec copy -acodec copy -f mpegts output-file.ts
The above command will convert input.avi into a Transport Stream file called output-file.ts.
The -vcodec copy -acodec copy
part instructs ffmpeg to use the same video and audio codec as in the original file (input.avi), no transcoding will be done. It is important to note that DVB standards such as DVB-T, 8VSB, and DVB-S only support MPEG-2 as the encoding standard (H.264/MPEG-4 is not officially supported).
FFMPEG lets you transcode both the audio and video from one format to another. Have an H.264 file and need to convert it to MPEG-2 TS? Many DVB standards only support MPEG-2, while the post-production world has switched to more efficient formats such as H.264/MPEG-4.
Here is how to use FFMPEG for the H.264 to MPEG-2 conversion:
ffmpeg -i input.avi -vcodec mpeg2video -acodec mp2 -b:v 10M -b:a 192k -muxrate 10M -f mpegts output.ts
Let’s go over these command line options:
-i input.avi
this is our H.264 file that we wish to convert to MPEG-2
-vcodec mpeg2video
set video encoding codec to mpeg2
-acodec mp2
set audio encoding codec to mpeg2
-b:v 10M
set video bitrate to 10 Mbps
-b:a 192k
set audio bitrate to 192 Kb
-muxrate 10M
make sure the combined audio and video stream is 10 Mbps
-f mpegts output.ts
create a Transport Stream called output.ts
Converting from MPEG-2 to H.264 is even easier. Here is one way to do it:
ffmpeg -i output.ts -vcodec h264 -acodec mp3 output.avi
This will convert any supported file into h264 video with mp3 audio.
As previously mentioned FFMPEG supports many video/audio codecs. To get a full list enter: ffmpeg–formats
FFMPEG can be used to easily stream a file over UDP/RTP. We manufacture and sell various IP based receivers, such as our ADV-6000. With FFMPEG we can send various files to the ADV-6000 for testing and development purposes.
ffmpeg -re -i input.ts -vcodec copy -acodec copy -f mpegts "udp://192.168.1.101:5000"
This will stream the file input.ts
over UDP to a receiver with IP address of 192.168.1.101
lisitening for incoming streams on port 5000
.
Streaming to a multicast address is also possible. Simply replace the IP address above with a multicast address.
FFMPEG supports many streaming output protocols. This makes is an ideal tool for testing and development. Need to test video streaming to an iPhone? FFMPEG makes it possible using HLS streaming. Need to test your CDN? No problem, send an RTMP stream.
To see the list of supported protocols and their usage you can visit: http://ffmpeg.org/ffmpeg-protocols.html
The features and commands described above do not even begin to scratch the surface of the full capabilities of FFMPEG. To get a full scope of the of the features and their use I highly suggest reading the documentation.
We hope you’ve found this introduction useful. Please leave any questions in the comments.
AdvancedDigital Inc. offers equipment and services for the digital video broadcasting industry.