The goal when developing the gavf-Format was mainly to have a universal pipe format, which can be used to stream multimedia content from one program to another.
In apps/gavftools, there is a bunch of commandline programs I wrote for making my everyday multimedia work much easier. They allow to build quite complex processing pipelines from the commandline.
The basis is the gavf multimedia format, which can contain audio, video as well as text- and graphical subtitles. A/V data can be either uncompressed or compressed in a large number of formats. In some cases, especially for uncompresed video, the video frames are passed as shared memory segments between the processes.
All programs are prefixed by
gavf-
. All programs can be called with the -help
argument to show commandline options.2. Simple examples
Read a media file and convert it to the gavf format:
gavf-decode -i file.avi -o file.gavf
or:
gavf-decode -i file.avi > file.gavf
Play a media file:
gavf-decode -i file.avi | gavf-play
3. I/O variants
Playing a media file can happen in many ways. Instead of
gavf-decode -i file.avi | gavf-play
You can use a unix-domain socket:
gavf-decode -i file.avi -o unixserv://socket
gavf-play -i unix://socket
(of course the 2 commands should be called in different terminals or the first command should be put into the background). You can also use a fifo:
mkfifo fifo
gavf-decode -i file.avi -o fifo
gavf-play -i fifo
Or a TCP socket:
gavf-decode -i file.avi -o httpserv://192.128.100.1:8888
gavf-play -i http://192.128.100.1:8888
Naturally in the last example the decode and playback commands can run on different machines.
Shared memory segments are always used if the maximum packet size is known in advance and the receiver is a process (i.e. not a file) running on the same machine.
4. Other commands
Recompress the the audio stream to 320 kbps mp3. This can also be used to recompress audio and video simultaneously:
... | gavf-recompress -ac 'codec=c_lame{cbr_bitrate=320}' | ....
Split audio- and video stream into separate files:
... | gavf-demux -oa audio.gavf -ov video.gavf
Multiplex separate streams:
gavf-mux -i audio.gavf -i video.gavf | ....
Display info about the stream (don't do anything else)
... | gavf-info
Split a stream for multiple receivers (can also use more than 2 -o options):
... | gavf-tee -o saved_file.gavf -o "|gavf-play"
Record a stream from your webcam and from your soundcard (replace
pulseaudio_device
with something meaningful):gavf-record -vid 'plugin=i_v4l2{device=/dev/video0}' -aud 'plugin=i_pulse{dev=pulseaudio_device}' | ...
Convert an audio-only stream to mp3. If the audio compression is mp3 already, it is written as it is, else it is encoded with 320 kbps:
... | gavf-encode -enc "a2v=0:ae=e_lame" -ac cbr_bitrate=320 -o file.mp3
Flip video images vertically:
... | gavf-filter -vf 'f={fv_flip{flip_v=1}}' | ....
Can also be used for adding audio filters with the -af option. Filters can also be chained.