|
|
Video
|
Video related unix commands
This is a collection of various little command lines that I figured out, and that I just want to put somewhere instead of having to figure them out again, the next time I need them.
I cannot guarantee they will still work in the future, as some of the tools involved may change their syntax or behavior. But they did work when I put them here.
Creating an animated gif from frames
magick -delay 20 -loop 0 frame*.png output.gif
Or straight from a camera with a bit of sharpen:
magick *.jpg -delay 15 -loop 0 -resize 250x250 -sharpen 0.5 -auto-orient output.gif
Or from frames grabbed from an anime:
magick -delay 10 -loop 0 *.png -resize 500x500 -sharpen 0.3 -dither FloydSteinberg -define dither:diffusion-amount=80% -layers OptimizeTransparency +remap output.gif
Extracting the AAC audio from an .mp4 file
ffmpeg -i input.mp4 -vn -acodec copy -y output.m4a
Remuxing several .ogm files into .mkv
find *.ogm -exec mkvmerge -o "{}.mkv" "{}" \;
Multiplexing MP4 losslessly
This command will discard any audio from the input video file.
MP4Box -add "video.mp4"#video -add "audio.m4a"#audio -new bla7.mp4
Finding out what codecs are used in all your MKV files
find . -iname "*.mkv" -exec mkvinfo "{}" \; |grep -i "codec id"
Nikon D7000/D600 quicktime video to mp4 (aac audio)
Ffmpeg's syntax changes, so here are two approaches. One of them should work:
ffmpeg -i _DSC0544.MOV -vcodec copy -acodec libfaac -ab 160000 test.mp4
ffmpeg -i _DSC0544.MOV -vcodec copy -acodec aac -ab 160000 -strict -2 test.mp4
JPEG sequence to H.264 (high-def timelapse, 10 fps, no audio)
Tip: Replace the % character with %% if using this in a .bat file in Windows.
ffmpeg -r 10 -i "frame%04d.jpg" -y -an -vcodec libx264 -crf 12 -preset veryslow -s 1920x1080 output.mp4
PNG sequence and .wav to H.264 (no scaling, 30 fps, with audio)
Replace "veryslow" with "fast" if you're impatient.
ffmpeg -r 30 -i "frame%04d.png" -i sound.wav -y -vcodec libx264 -crf 12 -pix_fmt yuv420p -preset veryslow -acodec libfaac -ab 160000 output.mp4
Slideshow from jpeg images
This will show a new image every 3 seconds and produce a video at 10 fps. Make sure your input images are the same size, in this example: 1920x1080.
The part that says -pix_fmt yuv420p is to make it work in Firefox and Chrome.
ffmpeg -loop 1 -framerate 1/3 -i pic%04d.jpg -y -i music.mp3 -acodec copy -vcodec libx264 -crf 17 -preset slow -s 1920x1080 -shortest -r 10 -pix_fmt yuv420p output.mp4
Losslessly keep section of .mkv file
The -ss part shows where to start, and the -t part shows the duration. Ffmpeg does not seem to have a way to start at a keyframe, so you will have to try changing the start and end point until the result behaves correctly.
ffmpeg -i input.mkv -acodec copy -vcodec copy -ss 00:00:28 -t 00:01:35 output.mkv
Audio track from video file to .wav
ffmpeg -i input.mp4 -vn audio_only.wav
Convert wav into mp3
ffmpeg -i input.wav -codec:a libmp3lame -compression_level:a 1 -b:a 192000 output.mp3
Converting MKV (h264/aac) to MP4 in FreeBSD (1st method)
mkvextract tracks source.mkv 1:video.264 2:audio.aac 3:subtitles.ass
mp4box -add video.264 -add audio.aac new.mp4
Converting MKV (h264/ac3) to MP4 in FreeBSD (2nd method)
#/bin/sh
# usage: makemp4 <mkv filename> <framerate, e.g. 23.976>
BASENAME=`echo $1|sed s/.mkv$//`
mkvextract tracks "$1" 1:video.264 2:audio.ac3 3:"$BASENAME.ass" 4:"$BASENAME-b.ass"
mplayer audio.ac3 -af channels=2 -ao pcm:fast:waveheader:file=audio.wav -channels 2 -novideo 2>&1
normalize --clipping --peak audio.wav
faac -q 133 audio.wav audio.aac
rm "$BASENAME.mp4"
mp4box "$BASENAME.mp4" -fps $2 -add video.264
rm video.264 audio.wav audio.ac3
mp4box "$BASENAME.mp4" -add audio.aac
rm audio.aac
Example dcraw conversion
dcraw -T -w -g 10 10 -q 3 -m 10 "_dsc1234.dng"
Splitting a video into 5 second pieces
ffmpeg -i "input.mkv" -c copy -map 0 -segment_time 5 -f segment output%03d.mkv
And putting them back together:
printf "file '%s'\n" ./*.mkv > mylist.txt
ffmpeg -f concat -i mylist.txt -sn -acodec copy -vcodec copy output.mkv
Create XviD .avi file for audio/video sync
This will generate an intermedia .avi file suitable for fast seeking in a DAW like Samplitude
- something sound designers typically use when adding sound effects to a piece of video.
Don't use these settings for the final video encode, as it does not look very pretty.
ffmpeg -i input.mp4 -an -vcodec libxvid -g 4 output.avi
Reverse a video
Method one uses a lot of disk space but works better:
ffmpeg -i "input.mkv" -vf reverse -af areverse -c:v rawvideo -pix_fmt yuv420p -c:a pcm_s16le -y "temp.mkv"
ffmpeg -i "temp.mkv" -vcodec libx264 -crf 20 -pix_fmt yuv420p -preset veryslow -acodec aac -ab 160000 -y "output.mp4"
rm "temp.mkv"
Method two will require less disk space, but a very large amount of memory and may output corrupt files because ffmpeg doesn't quite like doing this:
ffmpeg -i input.mp4 -vf reverse -af areverse -c:v libx264 -intra -c:v libx264 -preset slow -crf 25 -b:a 160k -c:a aac output.mp4
Average or median a video
This one works in linux/bsd but not in Windows.
ffmpeg -i input.mp4 -r 1/1 frame%04d.bmp
convert -background black *.bmp -evaluate-sequence median median.png
convert -background black *.bmp -evaluate-sequence mean mean.png
Image
Convert all .webp images into jpeg
magick mogrify -format jpg -quality 90 *.webp
Powerful PNG compression
magick input.png -define png:compression-level=9 -define png:compression-filter=2 -define png:compression-strategy=1 output.png
Tile jpg and webp images
magick montage -format png -background black -geometry "700x700^" +repage -gravity center -crop "700x700+0+0!" -tile 4x3 -sharpen 1,2 *.jpg *.webp new.png
Resize many JPEG images to 512px PNG
Useful for preparing a bunch of images for Stable Diffusion.
magick mogrify -resize "512x512^" -gravity Center -crop 512x512+0+0 -sharpen 0.7 -format png *.jpg
Sound
Unify any input format to 32khz 16bit mono .wav 1 sec long
sox snd04.wav -c 1 -b 16 new04.wav norm rate 32000 fade 0 1.05 0.1 trim 0 1
Split a .wav file into separate .wav files on transients. This is useful when having recorded a lot of single sounds like e.g. hitting drums one by one in order to create a sample collection.
sox WoodRecordings_titan_T001.wav "2pct/bla.wav" silence 1 0.1 2% 1 0.1 1% : newfile : restart
Trim silence from beginning of multiple stereo .wav files and then split into dual mono. (Useful when batch editing sound samples.)
mkdir "../output_left" && mkdir "../output_right"
find input*.wav -exec sox "{}" "../output_left/{}" silence -l 1 0.001 0.1% 0 0.1 0.1% remix 1 \;
find input*.wav -exec sox "{}" "../output_right/{}" silence -l 1 0.001 0.1% 0 0.1 0.1% remix 2 \;
Surround Sound
Surround multichannel .wav into AAC
Channel order should be FL FR Center LFE SL SR, which corresponds to Samplitude's default export.
ffmpeg -i input.wav -ac 6 -c:a aac -b:a 448k output.m4a
Surround aac to .wav
ffmpeg -i input.mp4 -filter_complex "channelsplit=channel_layout=5.1[FL][FR][FC][LFE][BL][BR]" -map "[FL]" front_left.wav -map "[FR]" front_right.wav -map "[FC]" front_center.wav -map "[LFE]" lfe.wav -map "[BL]" back_left.wav -map "[BR]" back_right.wav
Surround multichannel .wav into ac3
Assuming channel order L,R,center,lfe,Ls,Rs.
ffmpeg -i multichannelwav.wav -vn -acodec ac3 -ac 6 -ar 48000 -ab 448k -dialnorm -24 -dsur_mode 0 -original 1 -dmix_mode 2 -channel_layout 63 result.ac3
Turn DTS surround audio into mp3
ffmpeg -i "input.mkv" -vcodec copy -scodec copy -acodec libmp3lame -ac 2 -ab 192000 "output.mkv"
Turn DTS surround audio into mp4
This approach assumes H.264 video and no subtitles.
ffmpeg -i "input.mkv" -vcodec copy -scodec copy -acodec libfaac -ac 2 -ab 160000 "output.mp4"
Website by Joachim Michaelis
|
|
|
|