====== 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)"
===== Video =====
==== mencoder ====
(comes with mplayer).
[[http://gentoo-wiki.com/HOWTO_Mencoder_Introduction_Guide]]
General syntax:
mencoder \
\
\
=== Input data and options ===
* Video files
mencoder \
... \
\
\
* Image files
mencoder \
"mf://img.o.*.PNG" \
-mf fps=25 \
\
* Image files from stdin (only works with jpg images, but you can use convert to pipe to mencoder)
mencoder \
- \
-demuxer lavf -lavfdopts format=mjpeg \
\
* 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 \
\
\
-ovc xvid -xvidencopts bitrate=800:quant_type=mpeg:gmc:chroma_opt:vhq=4:bvhq=1:trellis \
-o
xvid encode options:
* ''bitrate='': constant bitrate, in kbs
* ''fixed_quant=<1-31>'': constant quantization (quality), lower is better
* ''trellis'' : speeds up encoding
* **h264**
mencoder \
\
\
-ovc x264 -x264encopts bitrate=800 \
-o
x264 encode options:
* ''bitrate='': constant bitrate, in kbs
* ''crf=<1.0-50.0>'': constant quality, lower is better
* **WebM**
mencoder \
\
\
-ovc lavc -ffourcc VP80 -of lavf -lavfopts format=webm -lavcopts vcodec=libvpx:vqscale=22.0 \
-o
lavc options:
* ''vbitrate='': constant bitrate, in kbs
* ''vqscale=<1.0-31.0>'': constant quantization (quality), lower is better
* **mp3**
mencoder \
\
\
-oac mp3lame -lameopts abr:br=128 \
-o
=== 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'' or ''libmp3lame'' 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 640x480 to landscape 1280x720 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