====== 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