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: