Table of Contents
Multimedia encoding
Images
convert
size operations
- resize: scale image
convert in.png -resize 640x480 out.png
- crop: crop image
convert in.png -crop 640x480+10+10 out.png
- extent: add margins or crops
convert in.png -gravity center -extent 1420x1420 out.png convert in.png -extent 1420x1420-10-10 out.png
Annotate an image with text
Simple text:
convert in.png \ -pointsize 20 -fill red -draw 'text 10,30 "My text" ' \ out.png
Text with shadow:
convert in.png \ -gravity SouthEast \ -stroke '#000C' -strokewidth 2 -annotate 0 "My text" \ -stroke none -fill white -annotate 0 "My text" \ out.png
Append images
convert in1.png in2.png +append out.png # horizontally convert in1.png in2.png -append out.png # vertically
More complex:
convert im1.png -resize 640x480 ppm:- \ | convert im2.png - +append ppm:- \ | convert im3.png - -append final.png
Create animated GIF
convert -delay 50 -loop 0 *.jpg out.gif
Formats
- EPS to RGB:
convert -density 600x600 -flatten -depth 8 -colorspace RGB file.eps ppm:- | convert - file.png
Exif
exiftool
- restore exif Orientation tag: if you have photos captured with a device that sets the orientation tag, but you used a viewer that doesn't use this tag, and rotated the image with a software that doesn't update this tag, then the image is inconsistent and is not well displayed in exif-aware viewers. To reset the orientation tag, you can use the following command:
exiftool -overwrite_original -Orientation="Horizontal (normal)" <file>
Video
mencoder
(comes with mplayer).
http://gentoo-wiki.com/HOWTO_Mencoder_Introduction_Guide
General syntax:
mencoder \ <input data> \ <input options> \ <output options> \ <output data>
Input data and options
- Video files
mencoder \ <input_file_1> <input_file_2> ... \ <input options> \ <output options> \ <output data>
- Image files
mencoder \ "mf://img.o.*.PNG" \ -mf fps=25 \ <output options> \ <output data>
- Image files from stdin (only works with jpg images, but you can use convert to pipe to mencoder)
mencoder \ - \ -demuxer lavf -lavfdopts format=mjpeg \ <output options> \ <output data>
- Video filters:
-vf yadif=0
: deinterlace-vf scale=640:480
: scale video-vf crop=w:h:x:y
: crop video-vf “crop=640:360:0:60,scale=1280:720”
: multiple video filters-vf pp=?
: post processing subfilters
Output data and options
Specify the video codec with -ovc
option, and audio codec with -oac
option. copy
is possible with both.
- xvid
mencoder \ <input data> \ <input options> \ -ovc xvid -xvidencopts bitrate=800:quant_type=mpeg:gmc:chroma_opt:vhq=4:bvhq=1:trellis \ -o <output_file>
xvid encode options:
bitrate=<value>
: constant bitrate, in kbsfixed_quant=<1-31>
: constant quantization (quality), lower is bettertrellis
: speeds up encoding
- h264
mencoder \ <input data> \ <input options> \ -ovc x264 -x264encopts bitrate=800 \ -o <output_file>
x264 encode options:
bitrate=<value>
: constant bitrate, in kbscrf=<1.0-50.0>
: constant quality, lower is better
- WebM
mencoder \ <input data> \ <input options> \ -ovc lavc -ffourcc VP80 -of lavf -lavfopts format=webm -lavcopts vcodec=libvpx:vqscale=22.0 \ -o <output_file>
lavc options:
vbitrate=<value>
: constant bitrate, in kbsvqscale=<1.0-31.0>
: constant quantization (quality), lower is better
- mp3
mencoder \ <input data> \ <input options> \ -oac mp3lame -lameopts abr:br=128 \ -o <output_file>
Other operations
- cut the file (here from 10'00“ to 10'30”):
mencoder -ss 10:00 -endpos 30 -ovc copy -oac copy movie.avi -o submovie.avi
ffmpeg
- video codec:
-c:v libx264
or-c:v libxvid
- audio codec:
-c:a pcm_s16le
orlibmp3lame
for video codec - codec bitrate: video
-b:v 800k
, audio-b:a 128k
- codec quality: video
-q:v 20
, audio-q:a 90
, x264-crf 20
- crop:
-vf “crop=640:360:0:60”
- resize:
-vf “scale=1280:720”
- pad:
-vf “pad=1280:720:370:0”
- rotate:
-vf “transpose=2”
(0=CCW+VF, 1=CW, 2=CCW, 3=CW+VF)
- blur:
-vf boxblur=10:1
- overlay two videos:
ffmpeg -i in1.avi -vf "movie=in2.avi [b]; [in][b] overlay=320:0"
ffmpeg -i in1.avi -i in2.avi -filter_complex "[0:v][1:v] overlay=320:0"
- append side by side two videos:
ffmpeg -i in_left.avi -vf "pad=1280:480 [left]; movie=in_right.avi [right]; [left][right] overlay=640:0" -c:v libx264 -b:v 800k out.avi
- encode video from images sequence (eg for timelapse):
ffmpeg -r 50 -i 01/all/image_1_%07d.pgm -c:v libx264 -b:v 800k video_01.avi ffmpeg -r 10 -pattern_type glob -i "*.JPG" -c:v libsvtav1 -qp 20 video.mp4
- cut clip (ss is start time, t is duration):
ffmpeg -i in.avi -ss 00:00:23 -t 00:00:19 -vcodec copy -acodec copy out.avi
- render subtitles (requires to be compiled with libass):
-vf “subtitles=in.srt”
- transform portrait video 640×480 to landscape 1280×720 with blurry repeated sides:
ffmpeg -i in.avi -filter_complex "[0:v] transpose=2,scale=1280:720,boxblur=10:1 [bg]; [0:v] transpose=2,scale=540:720 [fg]; [bg][fg] overlay=370:0 [out]" -map '[out]' -map 0:a -c:v libx264 -b:v 2000k -c:a copy out.avi
AviDemux
A GUI easier to use, like VirtualDub for Windows.
PhotoFilmStrip
Kdenlive
Tried Openshot and Cinelerra but seem crappy, Kdenlive seems to have better design.
- Transitions : works between two video tracks that overlap (eg dissolve).
- Audio track volume : add effect “Audio Correction / Volume (keyframable)”, then double click to add modification points.
Audio
mp3
⇒ lame
To encode from wav to mp3 in “speech” quality :
lame -V2 --vbr-new -q0 --lowpass 10 -s 22.05 -b32 file.wav file.mp3
⇒ mp3cut
To cut an mp3 file (warning: ID3 tags are not copied):
mp3cut -o output.mp3 -t 00:00:05+700-00:00:07+800 input.mp3
To concatenate mp3 files:
mp3cut -o output.mp3 input1.mp3 input2.mp3 input3.mp3
⇒ id3cp
To copy ID3 tags from a file to another one.
⇒ id3v2
To view and edit ID3 tags in command line.
⇒ kid3
To view and edit ID3 tags in GUI.
ogg
(using vorbis-tools package)
⇒ oggenc
To encode from wav to ogg in “speech” quality :
oggenc -b 32 --downmix --resample 22050 file.wav -o file.ogg
Converting from ogg to ogg in “speech” quality :
oggdec -b 16 -R file.ogg -o - | oggenc -r -B 16 -C 1 -b 32 --resample 22050 - -o file_recomp.ogg
sox
play, record, process
- Cut: (start position / length)
sox in_file.wav out_file.wav trim 2:37:32 4:00
- Reencode:
sox in_file.type1 out_file.type2 sox in_file.type1 -t type2 - | oggenc ...
ffmpeg
- extract sound track from video:
ffmpeg -i video.avi sound.mp3