Warning: this is an htmlized version!
The original is here, and
the conversion rules are here.
# This file:
# http://angg.twu.net/VIDEOS/Makefile.html
#         (find-angg "VIDEOS/Makefile")
# Author:  Eduardo Ochs <eduardoochs@gmail.com>
# Version: 2012feb23
# Public domain
#
# Typical usage:
#   cd /sda7/nikon/aula_4/
#   make avis frames

# I am exactly the opposite of a specialist in processing video! This
# Makefile is part of my first experiment - its parameters were (and
# are being) adjusted to compress the recordings of a minicourse on
# Category Theory...
#
# Even on the lowest quality mode my camera produces very heavy .MOVs:
# 1280x720, 24 FPS, taking about 50MB per minute... this is an
# overkill for talks, where the blackboard - on which things change
# very slowly - is much more important than the speaker. In the
# conversion to .avi I reduce the FPS to 3, but raise the bitrate to
# 300kb/s from ffmpeg's default of 200kb/s in order to keep the
# image crisp enough.

# (find-es "video" "ffmpeg")
# Parameters for ffmpeg:
#   (find-fline "~/LOGS/2012feb22.ffmpeg")
#   (find-man "1 ffmpeg" "-b bitrate")
#   (find-man "1 ffmpeg" "-b bitrate" "default = 200 kb/s")
#   (find-man "1 ffmpeg" "-r fps")
#   (find-man "1 ffmpeg" "-ac channels")
#   (find-man "1 ffmpeg" "-ar freq")
#   (find-man "1 ffmpeg" "-f image2")
# I am not using any of these here:
#   (find-man "1 ffmpeg" "-ss position")
#   (find-man "1 ffmpeg" "-t duration")
#   (find-man "1 ffmpeg" "-y" "Overwrite")
#   (find-man "1 ffmpeg" "-vcodec codec" "copy")
#   (find-man "1 ffmpeg" "-acodec codec" "copy")
#   (find-man "1 ffmpeg" "-force_key_frames time[,time...]")
#   (find-man "1 ffmpeg" "-sameq" "almost lossless")
# Note that this sentence in ffmpeg's manpage is wrong:
#   By default ffmpeg tries to convert as losslessly as possible: It
#   uses the same audio and video parameters for the outputs as the
#   one specified for the inputs.
# The default output bitrate is 200kb/s, which is quite low!!!!!

# (find-angg "SCANS/Makefile")
# (find-angg "LATEX/Makefile")
# (find-node "(make)")
# (find-node "(make)Automatic Variables")
# (find-node "(make)Automatic Variables" "$@" "target of the rule")
# (find-node "(make)Automatic Variables" "$<" "first prerequisite")
# (find-node "(make)Automatic Variables" "$*" "stem")

#  __  __       _   _       __  __  _____     __   
# |  \/  | __ _| |_| |__   |  \/  |/ _ \ \   / /__ 
# | |\/| |/ _` | __| '_ \  | |\/| | | | \ \ / / __|
# | |  | | (_| | |_| | | | | |  | | |_| |\ V /\__ \
# |_|  |_|\__,_|\__|_| |_| |_|  |_|\___/  \_/ |___/
#                                                  
AVIS   = $(patsubst %.MOV,%.avi,$(wildcard *.MOV))
FLVS   = $(patsubst %.MOV,%.flv,$(wildcard *.MOV))
FRAMES = $(patsubst %.MOV,%_frames,$(wildcard *.MOV))
avis:   $(AVIS)
flvs:   $(FLVS)
frames: $(FRAMES)

%.flv: %.MOV
	ffmpeg -i $< -ar 22050 -r 6 $@
# %.avi: %.MOV
# 	ffmpeg -i $< -ar 22050 -r 6 $@
%.avi: %.MOV
	ffmpeg -i $< -b 300k -r 3 -ar 22050 -ac 1 $@
%_frames: %.MOV
	mkdir     $*_frames/
	ffmpeg -i $< -r 0.05 -f image2 -s 1280x720 $*_frames/$*_%03d.jpg

HI_AVIS  = $(patsubst %.MOV,%_hi.avi,$(wildcard *.MOV))
hi_avis: $(HI_AVIS)
%_hi.avi: %.MOV
	ffmpeg -i $< -b 1M -ac 1 $@

#	ffmpeg -i $< -b 1M -ar 22050 -ac 1 $@


#                  _                              
#  _ __ ___   __ _| | _____         _ __          
# | '_ ` _ \ / _` | |/ / _ \  _____| '_ \.
# | | | | | | (_| |   <  __/ |_____| | | |  _ _ _ 
# |_| |_| |_|\__,_|_|\_\___|       |_| |_| (_|_|_)
#                                                 
# A trick to check which commands will be run:
#   (find-sh0 "mkdir -p /tmp/m/ && cd /tmp/m/ && touch DSC_0001.MOV")
#   (find-sh "cd /tmp/m/ && make -f ~/VIDEOS/Makefile -n avis flvs frames")
#   (find-sh0 "rm -Rv /tmp/m/")
# [This is especially useful for mailing list messages and IRC channels...]
# Typical output:
#   ffmpeg -i DSC_0001.MOV -b 300k -r 3 -ar 22050 -ac 1 DSC_0001.avi
#   ffmpeg -i DSC_0001.MOV -ar 22050 -r 6 DSC_0001.flv
#   mkdir     DSC_0001_frames/
#   ffmpeg -i DSC_0001.MOV -r 0.05 -f image2 -s 1280x720 DSC_0001_frames/DSC_0001_%03d.jpg

#  _                _                 _     
# | |    ___   __ _(_) ___ __ _      | |    
# | |   / _ \ / _` | |/ __/ _` |_____| |    
# | |__| (_) | (_| | | (_| (_| |_____| |___ 
# |_____\___/ \__, |_|\___\__,_|     |_____|
#             |___/                         
#
# A mensagem about this Makefile (in Portuguese):
#   http://www.dimap.ufrn.br/pipermail/logica-l/2012-February/007078.html
#
# Oi Lista de Lógica,
#
# eu e o Hugo Luiz Mariano acabamos de dar um minicurso sobre Categorias
# e Feixes na UnB, num evento organizado pelo Claus Akira Horodynski
# Matsushige, e eu filmei todas as 10 aulas - eu dei as primeiras 5, o
# Hugo deu as outras, e cada uma tinha 3 horas - só que eu fiz essa
# filmagem de um modo super amadorístico, com um casaco fazendo papel de
# tripé, e com o microfone embutido na filmadora, que não era direcional
# e não tinha nenhum truque pra reduzir o barulho do ar condicionado...
# A filmagem foi principalmente pra 1) nos ajudar a produzir mais
# material escrito mais detalhado sobre o que a gente apresentou, e 2)
# pra gente aprender a filmar palestras nós mesmos, sem depender de
# funcionários...
#
# Pois bem, agora temos 30 horas de filmagens num formato pesadíssimo -
# arquivos ".MOV", cada um com 20 minutos de filmagem e quase 1GB - - e
# eu queria saber se alguém aqui tem experiência em converter video para
# formatos mais leves... Como não acontece tanta coisa numa palestra,
# então eu tentei reduzir bastante o número de "frames per second"; mas
# o melhor que eu consegui por enquanto foi fazer esta Makefile,
#
#   http://angg.twu.net/VIDEOS/Makefile.html
#
# que, por exemplo, pro arquivo DSC_0142.MOV roda:
#
#   ffmpeg -i DSC_0142.MOV -ar 22050 -r 6 DSC_0142.flv
#   mkdir     DSC_0142_frames/
#   ffmpeg -i DSC_0142.MOV -r 0.05 -f image2 -s 1280x720 \
#             DSC_0142_frames/DSC_0142_%03d.jpg
#
# e aí produz o "DSC_0142.flv", com 6 frames por segundo e cerca de 40MB
# (2MB por minuto!), só que a resolução dele fica baixa e raramente dá
# pra ler o quadro, e produz também um diretório com frames extraídos do
# .MOV na resolução original (1280x720), um a cada 20 segundos...
#
# O resultado final, como vocês podem supor, é tosco - as 30 horas viram
# 3GB e cabem num DVD, mas de um modo que só fica útil pros muito
# interessados (ainda não somos os Catsters(*)!)... e, pra piorar, dos
# três programas pra passar filminhos que eu tenho no meu laptop -
# mplayer, totem e vlc - só o mplayer consegue passar esses .vlcs...
#
# Se alguém aqui souber tudo sobre compressão de filmagens de palestras
# por favor entre em contato - e se mais alguém estiver tentando
# aprender essas coisas, entre em contato também!
#
#   [[]]s,
#     Eduardo Ochs
#     eduardoochs@gmail.com
#     http://angg.twu.net/


#  ____  _           _            
# |  _ \| |__   ___ | |_ ___  ___ 
# | |_) | '_ \ / _ \| __/ _ \/ __|
# |  __/| | | | (_) | || (_) \__ \
# |_|   |_| |_|\___/ \__\___/|___/
#                                 
# Bonus: processing photos (instead of movies).
# My camera takes pictures in 4928x3264 by default - "scale 25%"
# converts this to 1232x816.

r4_JPGS = $(patsubst %.JPG,%_r4.JPG,$(wildcard *.JPG))
r4_jpgs = $(patsubst %.jpg,%_r4.jpg,$(wildcard *.jpg))
r4_JPGS: $(r4_JPGS)
r4_jpgs: $(r4_jpgs)

%_r4.JPG: %.JPG
	convert $< -scale 25% -quality 50% $@
%_r4.jpg: %.jpg
	convert $< -scale 25% -quality 50% $@

# (find-fline "/sda7/nikon/aula_4/")
# (find-fline "/sda7/nikon/aula_9/" "DSC_0009.JPG")


#  _____                            _ _       _        
# | ____|_ __ ___   __ _  ___ ___  | (_)_ __ | | _____ 
# |  _| | '_ ` _ \ / _` |/ __/ __| | | | '_ \| |/ / __|
# | |___| | | | | | (_| | (__\__ \ | | | | | |   <\__ \
# |_____|_| |_| |_|\__,_|\___|___/ |_|_|_| |_|_|\_\___/
#                                                      
# Examples:
#   (find-minicatsvideo "aula_1/" "DSC_0145" "1:15" "Functions, explicitly")
#   (find-minicatsvideo "aula_1/" "DSC_0145" "5:48" "Preamble to Cats")
#   (find-minicatsframe "aula_1/" "DSC_0145" "5:48" "Preamble to Cats")
# Note that the last parameter is a commentary, and is ignored by Emacs.
# The definitions are here:
#   (find-angg ".emacs" "find-minicatsvideo")
#   (find-angg ".emacs" "find-minicatsframe")


#  _   _       _          
# | \ | | ___ (_)___  ___ 
# |  \| |/ _ \| / __|/ _ \
# | |\  | (_) | \__ \  __/
# |_| \_|\___/|_|___/\___|
#                         
# It should be possible to remove the background noise made by the air
# conditioner with [a command-line version of] this, but how?...
#   http://wiki.audacityteam.org/index.php?title=Noise_Removal



# Local Variables:
# coding:               raw-text-unix
# ee-anchor-format:     "«%s»"
# End: