|
Warning: this is an htmlized version!
The original is here, and the conversion rules are here. |
#######
#
# E-scripts on ffmpeg and avconv.
#
# Note 1: use the eev command (defined in eev.el) and the
# ee alias (in my .zshrc) to execute parts of this file.
# Executing this file as a whole makes no sense.
# An introduction to eev can be found here:
#
# (find-eev-quick-intro)
# http://angg.twu.net/eev-intros/find-eev-quick-intro.html
#
# Note 2: be VERY careful and make sure you understand what
# you're doing.
#
# Note 3: If you use a shell other than zsh things like |&
# and the for loops may not work.
#
# Note 4: I always run as root.
#
# Note 5: some parts are too old and don't work anymore. Some
# never worked.
#
# Note 6: the definitions for the find-xxxfile commands are on my
# .emacs.
#
# Note 7: if you see a strange command check my .zshrc -- it may
# be defined there as a function or an alias.
#
# Note 8: the sections without dates are always older than the
# sections with dates.
#
# This file is at <http://angg.twu.net/e/ffmpeg.e>
# or at <http://angg.twu.net/e/ffmpeg.e.html>.
# See also <http://angg.twu.net/emacs.html>,
# <http://angg.twu.net/.emacs[.html]>,
# <http://angg.twu.net/.zshrc[.html]>,
# <http://angg.twu.net/escripts.html>,
# and <http://angg.twu.net/>.
#
#######
# «.mailing-lists» (to "mailing-lists")
# «.ffmpeg» (to "ffmpeg")
# «.screencasts» (to "screencasts")
# «.script-2012oct» (to "script-2012oct")
# «.adding-audio» (to "adding-audio")
# «.avconv-wheezy» (to "avconv-wheezy")
# «.avconv» (to "avconv")
# «.avconv-grab» (to "avconv-grab")
# «.x11grab-problem-erasal» (to "x11grab-problem-erasal")
# «.recordmydesktop» (to "recordmydesktop")
# «.audio-quality» (to "audio-quality")
# «.extract-audio» (to "extract-audio")
# «.libav-deb-src» (to "libav-deb-src")
# «.key-frames» (to "key-frames")
# «.extract-frame» (to "extract-frame")
# «.dvd-subtitles» (to "dvd-subtitles")
# «.audio-plus-photos-to-video» (to "audio-plus-photos-to-video")
# «.mono» (to "mono")
# «.extract-part-of-mp3» (to "extract-part-of-mp3")
# «.raising-volume» (to "raising-volume")
# «.volume-2020» (to "volume-2020")
# «.libav-git» (to "libav-git")
# «.cover-picture» (to "cover-picture")
# «.rotate» (to "rotate")
# «.rotate-avconv» (to "rotate-avconv")
# «.vichy-video» (to "vichy-video")
# «.webm-to-mp4» (to "webm-to-mp4")
# «.mkv-to-mp4» (to "mkv-to-mp4")
# «.feury-concat» (to "feury-concat")
# «.concat-kla» (to "concat-kla")
# «.feury-cut» (to "feury-cut")
# «.feury-cut-mnu4» (to "feury-cut-mnu4")
# «.feury-replace-audio» (to "feury-replace-audio")
# «.emacsconf2019-25» (to "emacsconf2019-25")
# «.emacsconf2019-35» (to "emacsconf2019-35")
# «.emacsconf2019-35end» (to "emacsconf2019-35end")
# «.non-monotonous-dts» (to "non-monotonous-dts")
# «.encode-vp9-two-pass» (to "encode-vp9-two-pass")
# «.ffprobe» (to "ffprobe")
# «.mediainfo» (to "mediainfo")
# «.mkvtoolnix» (to "mkvtoolnix")
# «.audio-to-video» (to "audio-to-video")
# «.speed-up» (to "speed-up")
# «.akater-tty-screenshot» (to "akater-tty-screenshot")
# «.waveform» (to "waveform")
# «.ffmpeg-buddy» (to "ffmpeg-buddy")
# «.video-duration» (to "video-duration")
# «.video-thumbnail» (to "video-thumbnail")
# «.scale» (to "scale")
# «.video-to-audio» (to "video-to-audio")
# «.images-to-video» (to "images-to-video")
# «.big-mov-to-small-mp4» (to "big-mov-to-small-mp4")
# (find-es "screencasts")
#####
#
# mailing lists
# 2012nov10
#
#####
# «mailing-lists» (to ".mailing-lists")
# http://ffmpeg.org/pipermail/ffmpeg-user/2012-February/004824.html
# http://ffmpeg.org/pipermail/ffmpeg-user/
#####
#
# ffmpeg
# 2012feb04
#
#####
# «ffmpeg» (to ".ffmpeg")
# (find-angg "VIDEOS/Makefile")
# (find-status "ffmpeg")
# (find-vldifile "ffmpeg.list")
# (find-udfile "ffmpeg/")
# (find-status "ffmpeg-doc")
# (find-vldifile "ffmpeg-doc.list")
# (find-udfile "ffmpeg-doc/")
# (find-udfile "ffmpeg-doc/html/")
* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
cd /tmp/
ffmpeg -i DSC_0141.MOV DSC_0141.flv
ffmpeg -i DSC_0142.MOV DSC_0142.flv
ffmpeg -i DSC_0142.MOV -ar 44100 DSC_0142.flv
ffmpeg -i DSC_0142.MOV -ar 44100 -r 6 DSC_0142_6.mov
ffmpeg -i DSC_0142.MOV -r 6 DSC_0142_6b.mov
cd /tmp/
mplayer DSC_0142.MOV
mplayer DSC_0142_6.MOV
# http://ffmpeg-users.933282.n4.nabble.com/Error-message-video-frame-size-changed-td3314555.html
# (find-fline "/etc/ffserver.conf")
http://ffmpeg.org/faq.html
http://sourceforge.net/projects/ffmpeg-gui/
http://ffmpeg-gui.sourceforge.net/
# (find-man "1 ffmpeg")
# (find-man "1 ffmpeg" "extract images from a video")
# (find-man "1 ffmpeg" "-r fps")
# (find-man "1 ffmpeg" "-f fmt")
# (find-man "1 ffmpeg" "-vsync parameter")
# (find-man "1 ffmpeg" "ffmpeg -f x11grab")
# (find-man "1 ffmpeg" "seek_point, sp")
# (find-man "1 ffmpeg" "-ss position")
# (find-man "1 ffmpeg" "-t duration")
# (find-man "1 ffmpeg" "-b bitrate")
# (find-man "1 ffplay")
# (find-man "1 ffprobe")
# (find-man "1 ffserver")
# (find-sh "ffmpeg -h")
# (find-sh "ffmpeg -formats")
# (find-sh "ffmpeg -formats" "MOV")
# (find-sh "ffmpeg -formats" "h264" "H.264")
ffmpeg-doc
http://www.rumourisnews.com/install_ffmpeg_on_debian.html
http://linuxers.org/tutorial/how-slowdown-or-speed-video-using-ffmpeg-and-yuvfps
http://howto-pages.org/ffmpeg/
http://stackoverflow.com/questions/1555771/which-frame-does-ffmpeg-get-when-reducing-the-frame-rate
http://www.linuxquestions.org/questions/linux-general-1/ffmpeg-dramatic-decrease-in-size-from-camera-videos-660241/
http://answers.yahoo.com/question/index?qid=20080405224044AAq2015
http://canerblt.wordpress.com/2011/07/10/changing-fps-rate-of-a-video-with-ffmpeg/
<edrx> hello - how do I reduce the number of frames of a video? it's
for recording a conference with few slides and a speaker who
does not move too much... the camera produced a .mov with 24
fps, and I'd like to reduce that to 8 fps by keeping only 1 in
each 3 frames...
<edrx> (btw, I am on debian, and using the command line)
<rypervenche> Hi all. My screencasting script broke a while back,
apparently due to an update in ffmpeg. It uses x264,
however at first I record lossless data. I have since
fixed my script using "-vcodec libx264 -preset
ultrafast", but is this lossless data? Should I be
using somethign else?
<rypervenche> Before I was using -vpre lossless_ultrafast. Is there
still a lossless option or should I only use the
ultrafast option?
#####
#
# Creating screencasts
# 2012oct27
#
#####
# «screencasts» (to ".screencasts")
# http://ubuntuguide.org/wiki/Screencasts
# http://wiki.nosdigitais.teia.org.br/Screencast
# (find-man "1 ffmpeg")
# (find-man "1 ffmpeg" "X11 grabbing")
# (find-man "1 ffmpeg" "-s size" " cif")
ffmpeg -f x11grab -s cif -r 25 -i :0.0+10,20 /tmp/out.mpg
* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
ffmpeg -f x11grab -s cif -r 25 -i $DISPLAY /tmp/out.mpg
laf /tmp/out.mpg
rm -v /tmp/out.mpg
ffmpeg -f x11grab -r 25 -i $DISPLAY /tmp/out.mpg
laf /tmp/out.mpg
# (find-video "/tmp/out.mpg")
# (find-angg ".fvwm/.fvwm2rc" "moving-the-cursor")
# (find-man "1 ffmpeg")
* (eepitch-shell12)
* (eepitch-shell)
rm -v /tmp/out.mp*
# sleep 3 &&
ffmpeg -loglevel quiet -f x11grab -s 540x600+0+0 -r 5 -i $DISPLAY /tmp/out.mp4 >& /dev/null
*
* (eepitch-shell)
* (find-fvwm0 "CursorMove -1000p -1000p")
* (find-fvwm0 "CursorMove +0 +100")
* (eepitch-shell2)
# (find-angg "eev-videos/video1.sh")
~/eev-videos/video1.sh xterm
* (eepitch-shell2)
killall ffmpeg
killall -9 ffmpeg
* (setq ee-mplayer-options '("-fs" "-title" "mplayer-fullscreen" "-osdlevel" "0"))
* (find-mplayer "/tmp/out.mp4")
* (find-mplayer0 "/tmp/out.mp4")
* (setq ee-mplayer-options '("-fs" "-title" "mplayer-fullscreen" "-osdlevel" "2"))
* (setq ee-mplayer-options '("-fs" "-osdlevel" "2"))
# (find-angg ".emacs" "mplayer-options")
#####
#
# Header for screencast scripts, oct/2012
# 2012oct28
#
#####
# «script-2012oct» (to ".script-2012oct")
# (find-angg "eev-videos/1.sh")
# (find-bashnode "Top")
# (find-bashnode "Bourne Shell Builtins" "`shift'")
# (find-bashnode "Bash Builtins" "`read'" "`-s'")
# (find-es "console" "tput")
# (find-man "5 terminfo" "setaf")
# (find-man "5 terminfo" "setab")
# (find-man "5 terminfo" "COLOR_YELLOW")
# (find-man "5 terminfo" "COLOR_BLUE")
# (find-man "5 terminfo" "COLOR_GREEN")
# (find-man "5 terminfo" "bold")
# Command-line arguments for screencasts
fvwmdown () { FvwmCommand "CursorMove +0 +100"; }
ffmpeggrab () {
rm -f /tmp/out.mp4
nohup ffmpeg -loglevel quiet -f x11grab -i $DISPLAY $* /tmp/out.mp4 \
> /dev/null 2>&1 &
}
if [[ "$1" == "down" ]]; then fvwmdown; shift; fi
if [[ "$1" == "ffmpeg" ]]; then ffmpeggrab -r 5 -s $2; shift 2; fi
if [[ "$1" == "xterm" ]]; then
G=$2; shift 2; exec xterm -T xterm -geometry $G -e $0 $*
fi
# Colors
C0=$(tput sgr0)
C1=$(tput setaf 3; tput setab 1; tput bold;)
CB=$(tput bold; tput setaf 4)
CG=$(tput setaf 2)
# Sleep, sleep-then-echo, display-prompt-and-command, display-and-eval
slep () { sleep $1; }
slep () { stty -echo; read; stty echo; }
slep () { read -s; }
se () { read; echo "$2"; }
se () { echo; slep $1; echo "$2"; }
dpc () {
echo -n "${CG}$PWD(edrx)\$${C0} "; slep 1;
echo -n "$*"; slep 1;
echo;
}
function de () { dpc "$*"; eval $*; }
* (eepitch-shell2)
* (eepitch-kill)
* (eepitch-shell2)
makeR1C e/ffmpeg.e.html
# http://angg.twu.net/e/ffmpeg.e.html
buffer-file-name
buffer-name
#####
#
# Adding audio to a video
# 2012oct28
#
#####
# «adding-audio» (to ".adding-audio")
# (find-fline "~/eev-videos/")
# (find-man "1 ffmpeg" "-acodec")
# (find-man "1 ffmpeg" "-newaudio")
* (eepitch-shell2)
* (eepitch-kill)
* (eepitch-shell2)
cd ~/eev-videos/
ffmpeg -i 2012oct28-intro-pt.mp4 \
-i 2012oct28-intro-pt.mp3 \
-vcodec copy \
-acodec copy \
-acodec copy \
eev-video.mp4 \
-newaudio
#####
#
# avconv on wheezy
# 2013jun30
#
#####
# «avconv-wheezy» (to ".avconv-wheezy")
# (find-man "1 avconv")
# (find-man "1 avprobe")
# (find-man "1 avserver")
# (find-man "1 avplay")
# (find-man "1 qt-faststart")
# (find-man "1 ffprobe")
# (find-man "1 ffserver")
# (find-man "1 ffplay")
#####
#
# avconv / libav-tools
# 2012nov10
#
#####
# «avconv» (to ".avconv")
# http://packages.debian.org/squeeze-backports/ffmpeg
# http://packages.debian.org/squeeze-backports/libav-tools
# (find-status "libav-tools")
# (find-vldifile "libav-tools.list")
# (find-udfile "libav-tools/")
# (find-man "1 avconv")
# (find-man "1 avconv" "X11 grabbing")
# (find-man "1 avconv" "qxga")
# (find-angg "eev-videos/0.sh")
# (find-angg "eev-videos/2.sh")
* (eepitch-bash)
* (eepitch-kill)
* (eepitch-bash)
rm -v /tmp/out.log
rm -v /tmp/out.mp4
source ~/eev-videos/0.sh
ffmpeg-kill
# ffmpeg-grab -s qxga
ffmpeg-grab -s 1024x600
# sleep 10
ffmpeg-kill
# (find-fline "/tmp/")
# (find-fline "/tmp/out.log")
# (find-mplayer "/tmp/out.mp4")
http://backports.debian.org/debian-backports/pool/main/liba/libav/libav_0.8.3-1~bpo60+1.dsc
http://backports.debian.org/debian-backports/pool/main/liba/libav/libav_0.8.3-1~bpo60+1.debian.tar.gz
http://backports.debian.org/debian-backports/pool/main/liba/libav/libav_0.8.3.orig.tar.gz
#####
#
# avconv grab
# 2016oct07
#
#####
# «avconv-grab» (to ".avconv-grab")
# (find-es "x" "screen-dimensions")
# (find-sh0 "xdpyinfo | grep 'dimensions:' | awk '{print $2}'")
# (find-man "1 avconv")
# (find-man "1 avconv" "X11 grabbing")
# (find-man "1 avconv" "qxga" "2048x1536")
# (find-man "1 avconv" "xga 1024x768")
# (find-es "emacs" "adjust-geometry")
* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
avconv -f x11grab -s 1280x800 -r 5 -i :1.0 /tmp/out.mpg
avconv -f x11grab -i :1.0 /tmp/out.mpg
avconv -f x11grab -s 1280x800 -i :1.0 /tmp/out.mpg
avconv -f x11grab -s 1280x800 -i :1.0 -y /tmp/out.mpg
avconv -f x11grab -s 1280x800 -i :1.0 -y /tmp/out.mp4
# (find-video "/tmp/out.mpg")
# (find-video "/tmp/out.mp4")
* (set-frame-width nil 167)
* (set-frame-height nil 59)
* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
avconv -f x11grab -s xga -i :1.0 -y /tmp/out.mp4
* (message "bcdefg")
# (find-video "/tmp/out.mp4")
#####
#
# x11grab problem with erasals
# 2016oct18
#
#####
# «x11grab-problem-erasal» (to ".x11grab-problem-erasal")
# http://angg.twu.net/eev-videos/x11grab-problem-2016oct18.mp4
# (find-fline "/home/edrx/LOGS/2016oct18.emacs")
# (find-fline "/home/edrx/LOGS/2016oct18.emacs" "<wgreenhouse> edrx:")
# (find-fline "/home/edrx/LOGS/2016oct18.libav")
# (find-fline "/home/edrx/LOGS/2016oct18.libav" "XShmGetImage")
# (find-es "x" "xserver-log")
# (find-zsh "dmissing -i XShmGetImage")
# (find-man "3 XShmGetImage")
#####
#
# recordmydesktop
# 2016oct23
#
#####
# «recordmydesktop» (to ".recordmydesktop")
# http://unix.stackexchange.com/questions/73622/how-to-get-near-perfect-screen-recording-quality
# (find-es "flash" "recordmydesktop")
# (find-es "video" "recordmydesktop")
# (find-man "1 recordmydesktop")
(/ 768 640.0)
(/ 59 1.2)
* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
* (size 167 59)
recordmydesktop --display :1.0 -x 0 -y 0 --width 1024 --height 768 --full-shots --fps 5 \
-o /tmp/out.ogv &
file:///tmp/out.mp4.ogv
* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
* (size 167 49)
recordmydesktop --display :1.0 -x 0 -y 0 --width 1024 --height 640 \
--full-shots --fps 5 \
-o /tmp/out.ogv &
killall recordmydesktop
# file:///tmp/out.ogv
hello
killall recordmydesktop
Hello
#####
#
# Reducing audio quality with avconv
# 2012nov15
#
#####
# «audio-quality» (to ".audio-quality")
# (find-man "1 avconv")
# (find-man "1 avconv" "-b:a 128k")
# (find-man "1 avconv" "-codec copy")
# (find-man "1 avconv" "avconv -i /tmp/a.wav -ar 22050")
# (find-eev-video-links "2pt")
# (find-fline "~/eev-videos/" "video2pt-")
# (find-fline "~/NICOTINE/Atras_do_porto/" "menino_bonito.mp3")
* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
cp -v ~/NICOTINE/Atras_do_porto/menino_bonito.mp3 /tmp/a1.mp3
cd /tmp/
avconv -i a1.mp3 -b 64k a2.mp3
avconv -i a2.mp3 -b 32k a3.mp3
# (find-fline "/tmp/")
# (find-TH "html5-audio")
cp -v a3.mp3 ~/TH/L/html5-audio.mp3
Scp-np a3.mp3 $TWUS/html5-audio.mp3
#####
#
# Extracting the audio from a video
# 2017mar12
#
#####
# «extract-audio» (to ".extract-audio")
# (find-fline "/sda5/videos/")
* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
cd /sda5/videos/
avconv -i David_Bowie_-_Amsterdam-153Abqg7_3I.mp4 -codec copy \
David_Bowie_-_Amsterdam-153Abqg7_3I.mp3
#####
#
# libav (from the debian sources)
# 2012nov10
#
#####
# «libav-deb-src» (to ".libav-deb-src")
# http://backports.debian.org/debian-backports/pool/main/liba/libav/
# http://backports.debian.org/debian-backports/pool/main/liba/libav/libav_0.8.3-1~bpo60+1.dsc
# http://backports.debian.org/debian-backports/pool/main/liba/libav/libav_0.8.3-1~bpo60+1.diff.gz
# http://backports.debian.org/debian-backports/pool/main/liba/libav/libav_0.8.3.orig.tar.gz
#*
rm -Rv ~/usrc/libav/
mkdir ~/usrc/libav/
cd $S/http/backports.debian.org/debian-backports/pool/main/liba/libav/
cp -v libav_0.8.3* ~/usrc/libav/
cd ~/usrc/libav/
dpkg-source -sn -x libav_0.8.3-1~bpo60+1.dsc
cd ~/usrc/libav/libav-0.8.3/
dpkg-buildpackage -us -uc -b -rfakeroot |& tee odb
#*
# (find-fline "~/usrc/libav/")
* (eepitch-shell)
cd ~/usrc/libav/
sudo dpkg -i *.deb
#*
# (code-c-d "libav" "~/usrc/libav/libav-0.8.3/")
# (find-libavfile "")
# (find-libavfile "Changelog")
# (find-libavfile "Changelog" "version 0.8_beta1:")
# (find-libavfile "doc/")
# (find-libavgrep "grep -nH -e grab doc/*")
#####
#
# Key frames
# 2012nov17
#
#####
# «key-frames» (to ".key-frames")
# http://en.wikipedia.org/wiki/Key_frame
# http://en.wikipedia.org/wiki/Video_compression_picture_types
# http://libav.org/avconv.html
# http://libav.org/css/bootstrap.css
# http://libav.org/css/libav.css
# http://libav.org/css/alert.css
# (find-man "1 avconv" "-g gop_size" "group of pictures")
# (find-man "1 avconv" "-c:a copy")
# (find-zsh "dmissing avconv.html")
# (find-fline "~/LOGS/2013jan10.libav")
# (defun eejump-9 () (find-2b '(find-es "ffmpeg") '(find-ebuffer "#libav@irc.freenode.net")))
# (find-angg "eev-videos/" "video4-eepitch.mp4")
* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
cp -fv ~/eev-videos/video4-eepitch.mp4 /tmp/a.mp4
cd /tmp/
nice avconv -i /tmp/a.mp4 -g 5 -c:a copy -y /tmp/a-g05.mp4 |& tee a-g05.log
nice avconv -i /tmp/a.mp4 -g 10 -c:a copy -y /tmp/a-g10.mp4 |& tee a-g10.log
laf /tmp/*.mp4
# (find-fline "/tmp/")
# (find-video "/tmp/b.mp4")
#####
#
# dvd subtitles
# 2013feb14
#
#####
# «dvd-subtitles» (to ".dvd-subtitles")
# http://ffmpeg-users.933282.n4.nabble.com/extract-subtiles-td939612.html
# (find-man "1 ffmpeg")
# (find-man "1 avconv")
# (find-man "1 avconv" "-sbsf mov2textsub")
avconv -i file.mov -an -vn -sbsf mov2textsub -c:s copy -f rawvideo sub.txt
# (find-man "1 avconv" "BITSTREAM FILTERS\n")
#####
#
# Converting audio+photos to video
# 2013jun30
#
#####
# «audio-plus-photos-to-video» (to ".audio-plus-photos-to-video")
# (find-freenode "#libav")
# (find-fline "~/LOGS/2013jun30.libav")
# (find-fline "~/LOGS/2013jun30.libav" "image2pipe")
# http://stackoverflow.com/questions/16315192/avconv-make-a-video-from-a-subset-on-images
# (find-man "1 avconv" "image2pipe")
# Where's avconv in wheezy? =(
# (find-zsh "installeddebs | sort | grep libav")
# (find-zsh "availabledebs | sort | grep libav")
# (find-status "libav-tools")
# (find-vldifile "libav-tools.list")
# (find-udfile "libav-tools/")
#####
#
# Creating mono .mp3 files
# 2013aug11
#
#####
# «mono» (to ".mono")
# (find-man "1 ffmpeg" "AUDIO ENCODERS")
# (find-man "1 ffmpeg" "-ac channels")
#####
#
# Extracting a part of an mp3 file
# 2013aug12
#
#####
# «extract-part-of-mp3» (to ".extract-part-of-mp3")
# (find-es "mplayer" "extract-part-of-mp3")
# (find-man "1 ffmpeg" "-ss position")
# (find-man "1 ffmpeg" "-t duration")
# (find-man "1 avconv")
# (find-sh "avconv -formats")
* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
cp -v ~/TH/L/html5-audio.mp3 /tmp/in.mp3
cp -v ~/audios/2013ago01-ict.3ga /tmp/in.3ga
cp -v ~/audios/2013ago01-ict.mp3 /tmp/in2.mp3
cd /tmp/
avconv -i in.mp3 -ss 0:30 -t 0:35 -y out.mp3
avconv -y -i in.mp3 out.mp3
avconv -y -i in.mp3 -acodec copy out.mp3
avconv -y -i in.mp3 -acodec copy out.mp3
avconv -y -i in.mp3 -acodec copy -ss 30 out.mp3
avconv -y -i in.mp3 -acodec copy -ss 30 -t 5 out.mp3
avconv -y -i in.3ga -acodec copy -ss 1:24:57 -t 7:10 out.3ga
avconv -y -i in.3ga -ss 1:24:57 -t 430 out.mp3
avconv -y -i in.3ga -ss 1:24:57 -t 430 -b:a 128k -ac 1 out2.mp3
# «raising-volume» (to ".raising-volume")
avconv -y -i out2.mp3 -b:a 128k -t 20 -ac 1 -filter volume=volume=10dB out3.mp3
avconv -y -i out2.mp3 -b:a 128k -t 20 -ac 1 -vol 80dB out3.mp3
avconv -y -i out2.mp3 -b:a 128k -t 20 -ac 1 -vol 512 out3.mp3
cd /tmp/
avconv -y -i out2.mp3 -b:a 128k -t 20 -ac 1 -vol 1024 out3.mp3
avconv -y -i out2.mp3 -b:a 128k -ac 1 -vol 1024 out3.mp3
# (find-audio "/tmp/out3.mp3")
# (find-audio "/tmp/out2.mp3")
# (find-audio "/tmp/out3.mp3")
# (find-fline "~/LOGS/2013aug12.libav")
<elenril> anyway, https://libav.org/avconv.html#volume
<edrx> trying...
<edrx> "-filter volume=volume=10dB" ?
cp -v out2.mp3 out3.mp3
#####
#
# extract-frame
# 2023sep11
#
#####
# «extract-frame» (to ".extract-frame")
# (find-es "imagemagick" "convert")
# https://www.baeldung.com/linux/ffmpeg-extract-video-frames
# https://superuser.com/questions/1009969/how-to-extract-a-frame-out-of-a-video-using-ffmpeg
# (find-man "1 ffmpeg" "-ss position")
# (find-man "1 ffmpeg" "-vframes")
# (find-man "1 ffmpeg" "-frames[:stream_specifier]")
# (find-SUBSfile "mathologer-calculus-easy.lua" "cp -v")
# (find-calceasyvideo "13:00")
# (find-calceasyvideo "16:15")
* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
cd /tmp/
STEM=mathologer-calculus-easy
EXT=webm
ECHO=echo
videofile () { echo ${STEM}.${EXT} }
jpgfile () { echo ${STEM}_${1}.jpg }
pdffile () { echo ${STEM}_${1}.pdf }
makejpg () { $ECHO ffmpeg -loglevel error -y -ss $1 -i $(videofile) -frames:v 1 $(jpgfile $1) }
makepdf () { $ECHO convert -scale 50% $(jpgfile $1) $(pdffile $1) }
makepdf () { $ECHO convert $(jpgfile $1) $(pdffile $1) }
copypdf () { $ECHO cp $(pdffile $1) ~/LATEX/2023-2-C2/ }
cd /tmp/
ECHO=echo
ECHO=
for i in 13:00 16:16; do
makejpg $i
makepdf $i
copypdf $i
echo "(find-latexscan-links \"C2\" \"${STEM}_${i}\")"
done
laf ${STEM}*
#####
#
# Notes on raising the volume (2020)
# 2020nov27
#
#####
# «volume-2020» (to ".volume-2020")
# https://trac.ffmpeg.org/wiki/AudioVolume
# https://bytefreaks.net/uncategorized/increase-volume-in-video-using-ffmpeg
# https://blog.programster.org/change-audio-level-in-video
# (code-eevvideo "eev2020p1" "eev2020part1")
# (find-eev2020p1video "0:00")
* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
cp -iv $S/http/angg.twu.net/eev-videos/eev2020part1.mp4 /tmp/video0.mp4
cd /tmp/
ffmpeg \
-i video0.mp4 \
-vcodec copy \
-af "volume=30dB" \
video1.mp4
# (find-video "/tmp/video0.mp4")
# (find-video "/tmp/video1.mp4")
#####
#
# libav from git
# 2013aug12
#
#####
# «libav-git» (to ".libav-git")
# http://www.libav.org/download.html
# git://git.libav.org/libav.git
* (eepitch-shell2)
* (eepitch-kill)
* (eepitch-shell2)
# (find-fline "~/bigsrc/")
cd ~/bigsrc/
git clone --depth 1 git://git.libav.org/libav.git
cd ~/bigsrc/libav/
./configure |& tee oc
make |& tee om
(code-c-d "libav" "~/bigsrc/libav/")
;; (find-libavfile "")
# (find-fline "~/bigsrc/libav/")
#####
#
# Cover picture
# 2014may13
#
#####
# «cover-picture» (to ".cover-picture")
# http://stackoverflow.com/questions/14423647/ffmpeg-remove-cover-picture-from-mp3-convert-to-ogg-without-cover
# (find-man "1 ffmpeg")
#####
#
# rotate
# 2015jan30
#
#####
# «rotate» (to ".rotate")
# http://stackoverflow.com/questions/3937387/rotating-videos-with-ffmpeg
# (find-man "1 ffmpeg")
# (find-man "1 ffmpeg" "transpose")
# (find-man "1 ffmpeg" "hflip")
# (find-man "1 ffmpeg" "vflip")
# (find-man "1 ffmpeg" " vflip")
* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
cd /tmp/
rm -v output.mp4
# ffmpeg -i input.mp4 -c copy -metadata:s:v:0 rotate=90 output.mp4
# ffmpeg -vfilters "rotate=90" -i input.mp4 output.mp4
# ffmpeg -vf "rotate=90" -i input.mp4 output.mp4
# ffmpeg -i input.mp4 -vf "transpose=1" output.mp4
# rm -v output.mp4
ffmpeg -i input.mp4 -vf "transpose=1" output.mp4; # 90 degrees clockwise
ffmpeg -i input.mp4 -vf "transpose=2" output.mp4; # 90 degrees counterclockwise
ffmpeg -i input.mp4 -vf "hflip,vflip" output.mp4; # 180 degrees
# (find-video "/tmp/input.mp4")
# (find-video "/tmp/output.mp4")
# (find-sh "ffmpeg -filters")
# (find-man "ffmpeg")
# (find-man "ffmpeg" " transpose")
# (find-video "/tmp/output.mp4")
# (find-man "mplayer2")
#####
#
# rotate a video with avconv
# 2016sep07
#
#####
# «rotate-avconv» (to ".rotate-avconv")
# http://stackoverflow.com/questions/25031557/rotate-mp4-videos-without-re-encoding
# (find-sh "ls /tmp/*.mp4")
# (to "avconv-wheezy")
# (to "avconv")
# (find-man "1 avconv")
# (find-man "1 avprobe")
# https://libav.org/avconv.html
# https://libav.org/avconv.html#transpose
# https://wiki.libav.org/Encoding/aac
* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
cd /tmp/
STEM=20160907_casa_e_lana
avprobe -v quiet $STEM.mp4 -show_streams
avprobe -v quiet $STEM.mp4 -show_streams | grep rot
avconv -i $STEM.mp4 -c copy -metadata:s:v:0 rotate=0 ${STEM}_0.mp4
avconv -i $STEM.mp4 -c copy -metadata:s:v:0 rotate=90 ${STEM}_90.mp4
avconv -i $STEM.mp4 -vf "transpose=clock" ${STEM}_90.mp4
for i in $STEM*.mp4 do
echo $i:
avprobe -v quiet $STEM.mp4 -show_streams | grep rot
done
# ^ Not working... how can I play a video in a different orientation?
# (find-man "1 mplayer2")
# (find-man "1 mplayer2" "rotate[=<0-7>]")
# (defvar ee-mplayer-options '("-fs" "-osdlevel" "2" "-zoom"))
(let ((ee-mplayer-options `("-vf" "rotate=1" ,@ee-mplayer-options)))
ee-mplayer-options)
(let ((ee-mplayer-options `("-vf" "rotate=1" ,@ee-mplayer-options)))
(find-video "/tmp/20160907_casa_e_lana.mp4"))
cd /tmp/
mplayer /tmp/20160907_casa_e_lana.mp4
mplayer -vf rotate=1 /tmp/20160907_casa_e_lana.mp4
#####
#
# Record the video about "Logic for Children" in Vichy
# 2018mai18
#
#####
# «vichy-video» (to ".vichy-video")
# (find-man "1 avconv")
# (find-man "1 avconv" "Video Options")
# (find-man "1 avconv" "Video Options" " -s")
# (find-man "1 avconv" "# Grab at position 10,20")
# (vivp)
# (viv)
* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
rm -v /tmp/out.mpg
rm -v /tmp/out.mp4
# { sleep 1; avconv -f x11grab -s 1280x800 -i :1.0 /tmp/out.mp4; } &
{ sleep 1; avconv -f x11grab -s 1000x800 -i :1.0+140,0 /tmp/out.mp4; } &
xpdf -fullscreen ~/LATEX/2018vichy-video.pdf; killall avconv
laf /tmp/out.mp4
# (find-fline "/tmp/" "out.mp4")
# (find-video "/tmp/out.mp4")
* (find-video "/tmp/out.mp4")
#####
#
# Converting webm to mp4
# 2019sep01
#
#####
# «webm-to-mp4» (to ".webm-to-mp4")
# https://blog.addpipe.com/converting-webm-to-mp4-with-ffmpeg/
# https://askubuntu.com/questions/323944/convert-webm-to-other-formats
# https://linuxconfig.org/master-your-videos-from-the-cli-with-ffmpeg
# (find-fline "~/eev-videos/")
# (find-fline "~/eev-videos/" "three-keys-1-pt-video.webm")
# (find-fline "/sda5/home/edrx/eev-videos/" "three-keys-1-pt-video.webm")
* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
# (find-fline "/tmp/webmtomp4/")
rm -Rv /tmp/webmtomp4/
mkdir /tmp/webmtomp4/
cd /tmp/webmtomp4/
cp -iv ~/eev-videos/three-keys-1-pt-video.webm ./video.webm
time ffmpeg -i video.webm video.mp4
* (eepitch-shell3)
* (eepitch-kill)
* (eepitch-shell3)
# (find-fline "/tmp/webmtomp4/")
rm -Rv /tmp/webmtomp4/
mkdir /tmp/webmtomp4/
cd /tmp/webmtomp4/
# (find-fline "/sda5/videos/Math/" "Matematica_na_Universidade_-_Reuniao_4_-_11_jun_2021_-_Eduardo_Ochs-OofZQYkNVhg.webm")
cp -iv /sda5/videos/Math/Matematica_na_Universidade_-_Reuniao_4_-_11_jun_2021_-_Eduardo_Ochs-OofZQYkNVhg.webm ./video.webm
time ffmpeg -i video.webm video.mp4
# (find-ssr-links "{c}" "2021aulas-por-telegram" "{hash}" "{time}")
# scp video.mp4 $LINP/eev-videos/2021aulas-por-telegram.mp4
scp video.mp4 $LINS/eev-videos/2021aulas-por-telegram.mp4
#####
#
# mkv-to-mp4
# 2024dec22
#
#####
# «mkv-to-mp4» (to ".mkv-to-mp4")
# (find-youtubedl-links "/tmp/" "{title}" "BzovupjRhQM" ".webm" "trying")
* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
# (find-fline "/tmp/webmtomp4/")
rm -Rv /tmp/webmtomp4/
mkdir /tmp/webmtomp4/
cd /tmp/webmtomp4/
youtube-dl -t --restrict-filenames --all-subs 'http://www.youtube.com/watch?v=BzovupjRhQM'
cp -iv *.mkv ./video.mkv
time ffmpeg -i video.mkv video.mp4
#####
#
# Donald Feury - Concatenate Videos Together Using FFMPEG!
# 2020nov22
#
#####
# «feury-concat» (to ".feury-concat")
# https://dev.to/dak425/concatenate-videos-together-using-ffmpeg-2gg1
# https://www.youtube.com/watch?v=qjumeCB1iEg
# (find-youtubedl-links "/sda5/videos/" "Automated Video Editing - How to Combine Videos Together with ffmpeg" "qjumeCB1iEg" ".mkv" "feuryconcat")
# (code-video "feuryconcatvideo" "/sda5/videos/Automated Video Editing - How to Combine Videos Together with ffmpeg-qjumeCB1iEg.mkv")
# (find-feuryconcatvideo)
# (find-feuryconcatvideo "0:00")
* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
# (find-fline "$S/http/angg.twu.net/eev-videos/")
cd /tmp/
rm -fv video1.mp4 video2.mp4 vlist.txt out.mp4
cd $S/http/angg.twu.net/eev-videos/
cp -v 2020_C2_2020nov09.mp4 /tmp/video1.mp4
cp -v 2020_int_pots_sen_cos.mp4 /tmp/video2.mp4
cat > /tmp/vlist.txt <<'%%%'
file 'video1.mp4'
file 'video2.mp4'
%%%
cd /tmp/
ffmpeg -f concat -i vlist.txt -c copy out.mp4
# (find-video "/tmp/out.mp4")
# (find-video "/tmp/out.mp4" "3:58")
#####
#
# concat-kla
# 2022dec03
#
#####
# «concat-kla» (to ".concat-kla")
# (find-fline "~/KLA-VIDEOS/")
* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
cat > /tmp/vlist.txt <<'%%%'
file 'ssr-1.mp4'
file 'ssr-2.mp4'
file 'ssr-3.mp4'
file 'ssr-4.mp4'
file 'ssr-5.mp4'
%%%
cd /tmp/
ffmpeg -f concat -i vlist.txt -c copy out.mp4
cd /tmp/
ssr-1.mp4
#####
#
# feury-cut
# 2020dec05
#
#####
# «feury-cut» (to ".feury-cut")
# https://dev.to/dak425/cut-up-video-and-audio-with-just-ffmpeg-4l4m
# https://www.youtube.com/watch?v=Q2Wc-cDFixs
# (find-youtubedl-links "/sda5/videos/" nil "Q2Wc-cDFixs" nil "feurycut")
# (code-video "feurycutvideo" "/sda5/videos/How_cut_videos_into_clips_using_ffmpeg-Q2Wc-cDFixs.mp4")
# (find-feurycutvideo)
# (find-feurycutvideo "0:00")
# (find-feurycutvideo "1:10")
# (find-feurycutvideo "3:40" "I want the middle portion")
# (find-feurycutvideo "4:14" "instead of a duration a stop timestamp")
# (find-feurycutvideo "5:05" "-to")
# (find-feurycutvideo "6:15" "audio files")
# (find-feurycutvideo "8:45" "add pieces of video and audio files")
# (find-feurycutvideo "9:55" "start reading the file at")
# (find-feurycutvideo "10:30" "ffmpeg -ss ___ -i ___.mp4")
# (find-feurycutvideo "11:22" "a bit confusing if")
# (find-feurycutvideo "11:50" "ffmpeg -ss ___ -i ___.mp4 -t ___ ")
# (find-feurycutvideo "12:00" "ffmpeg -ss ___ -i ___.mp4 -to ___ ")
# (find-man "1 ffmpeg")
# (find-man "1 ffmpeg" "-ss position")
# (find-man "1 ffmpeg" "-t duration")
# (find-man "1 ffmpeg" "-to position")
ffmpeg -i input.mp4 -t 8 -c copy
# (find-1stclassvideo-links "2021workshop3")
# (find-angg ".emacs.videos" "2021workshop3")
# (find-2021workshop3video "4:55" "A demo. In this demo")
# Not working well:
* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
rm -Rv /tmp/ffmpeg/
mkdir /tmp/ffmpeg/
cd /tmp/ffmpeg/
cp -v $S/http/angg.twu.net/eev-videos/2021-workshop-3.mp4 in.mp4
ffmpeg -ss 4:55 -i in.mp4 -c copy out.mp4
# (find-video "/tmp/ffmpeg/out.mp4")
#####
#
# Cutting a part of a video (mnu4)
# 2022jul23
#
#####
# «feury-cut-mnu4» (to ".feury-cut-mnu4")
# (find-es "ead" "mat-na-univ-4-eu")
* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
INPUT=/home/videos/Math/Matematica_na_Universidade_-_Reuniao_4_-_11-6-2021-kvfv6fnNTng.mkv
cp -v $INPUT /tmp/ffmpeg-input.mkv
* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
rm -fv /tmp/ffmpeg-output.mkv
ffmpeg -ss 35:00 -to 1:25:35 -i /tmp/ffmpeg-input.mkv -c copy /tmp/ffmpeg-output.mkv
# (find-video "/tmp/ffmpeg-output.mkv")
# (find-mnu4video "35:00" "Eduardo Ochs")
# (find-mnu4video "1:25:36" "Márcio Adames")
Minha apresentação na reunião 4 do "Matemática na Universidade", em 11/jun/2021.
A versão integral da reunião está em: http://www.youtube.com/watch?v=kvfv6fnNTng
O trecho deste vídeo começa no 35:00 na versão integral.
Mais informações aqui: http://angg.twu.net/2021aulas-por-telegram.html
Matemática na Universidade - Reunião 4 - 11/jun/2021 - Eduardo Ochs
#####
#
# feury-replace-audio
# 2020dec05
#
#####
# «feury-replace-audio» (to ".feury-replace-audio")
# https://dev.to/dak425/how-to-replace-the-audio-in-a-video-with-the-audio-from-another-video-with-ffmpeg-2ob8
# https://www.youtube.com/watch?v=fXdaNnAe_MA
# (find-youtubedl-links "/sda5/videos/" "Automated_Video_Editing_-_How_to_replace_the_audio_in_a_video_with_ffmpeg_feurious" "fXdaNnAe_MA" ".mkv" "feuryreplace")
# (code-video "feuryreplacevideo" "/sda5/videos/Automated_Video_Editing_-_How_to_replace_the_audio_in_a_video_with_ffmpeg_feurious-fXdaNnAe_MA.mkv")
# (find-feuryreplacevideo "0:00")
# (find-feuryreplacevideo "2:25" "overcomplicated way")
# (find-feuryreplacevideo "3:51" "how do we merge them")
# (find-feuryreplacevideo "4:05" "merged-separate.mkv")
# (find-man "1 ffmpeg")
# (find-man "1 ffmpeg" "-an (output)")
#####
#
# Remaking the "ZOOM0025" video of my EmacsConf2019 talk with ffmpeg
# 2020dec05
#
#####
# «emacsconf2019-25» (to ".emacsconf2019-25")
# (find-fline "/sda5/home/edrx/eev-videos/emacsconf/")
# (find-fline "/sda5/home/edrx/eev-videos/emacsconf/ZOOM0025.txt")
* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
* (eepitch-vterm)
* (eepitch-kill)
* (eepitch-vterm)
rm -Rv /tmp/emacsconf2019/
mkdir /tmp/emacsconf2019/
cd /sda5/home/edrx/eev-videos/emacsconf/
laf --full-time
laf --full-time ZOOM0025*
cp -iv ZOOM0025_audio.wav /tmp/emacsconf2019/
cp -iv ZOOM0025_video.mp4 /tmp/emacsconf2019/
# to 160Kbps mp3 AUDIOSKIP
# AUDIO0 ----------------> AUDIO1 -----------> AUDIO2
# \
# >--> BOTH
# to mp4 (nop) VIDEOSKIP /
# VIDEO0 ----------------> AUDIO1 -----------> VIDEO2
#
#
cd /tmp/emacsconf2019/
laf
AUDIO0=/tmp/emacsconf2019/ZOOM0025_audio.wav
AUDIO1=/tmp/emacsconf2019/ZOOM0025_audio1.mp3
AUDIO2=/tmp/emacsconf2019/ZOOM0025_audio2.mp3
VIDEO1=/tmp/emacsconf2019/ZOOM0025_video.mp4
VIDEO2=/tmp/emacsconf2019/ZOOM0025_video2.mp4
JOINED=/tmp/emacsconf2019/ZOOM0025_joined.mp4
makeaudio1 () { ffmpeg -i $AUDIO0 -b:a 160k -y $AUDIO1 }
makeaudio2 () { ffmpeg -ss $AUDIOSKIP -i $AUDIO1 -c copy -t $LEN -y $AUDIO2 }
makevideo2 () { ffmpeg -ss $VIDEOSKIP -i $VIDEO1 -c copy -t $LEN -y $VIDEO2 }
makejoined () { ffmpeg -i $AUDIO2 -i $VIDEO2 -c copy -y $JOINED }
makeaudio1
AUDIOSKIP=0:07.30
VIDEOSKIP=0:09.60
LEN=30
LEN=13:10
makeaudio2
makevideo2
makejoined
laf
# (find-audio "/tmp/emacsconf2019/ZOOM0025_audio2.mp3")
# (find-video "/tmp/emacsconf2019/ZOOM0025_video2.mp4")
# (find-video "/tmp/emacsconf2019/ZOOM0025_joined.mp4")
# (find-video "/tmp/emacsconf2019/ZOOM0025_joined.mp4" "0:13")
# (find-video "/tmp/emacsconf2019/ZOOM0025_joined.mp4" "13:00")
#####
#
# Remaking the "ZOOM0035" video of my EmacsConf2019 talk with ffmpeg
# 2020dec05
#
#####
# «emacsconf2019-35» (to ".emacsconf2019-35")
# (find-fline "/sda5/home/edrx/eev-videos/emacsconf/")
# (find-fline "/sda5/home/edrx/eev-videos/emacsconf/ZOOM0025.txt")
* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
* (eepitch-vterm)
* (eepitch-kill)
* (eepitch-vterm)
rm -Rv /tmp/emacsconf2019/
mkdir /tmp/emacsconf2019/
cd /sda5/home/edrx/eev-videos/emacsconf/
laf --full-time
laf --full-time ZOOM0035*
cp -iv ZOOM0035_audio.wav /tmp/emacsconf2019/
cp -iv ZOOM0035_video.mp4 /tmp/emacsconf2019/
# to 160Kbps mp3 AUDIOSKIP
# AUDIO0 ----------------> AUDIO1 -----------> AUDIO2
# \
# >--> BOTH
# to mp4 (nop) VIDEOSKIP /
# VIDEO0 ----------------> AUDIO1 -----------> VIDEO2
#
#
cd /tmp/emacsconf2019/
laf
AUDIO0=/tmp/emacsconf2019/ZOOM0035_audio.wav
AUDIO1=/tmp/emacsconf2019/ZOOM0035_audio1.mp3
AUDIO2=/tmp/emacsconf2019/ZOOM0035_audio2.mp3
VIDEO1=/tmp/emacsconf2019/ZOOM0035_video.mp4
VIDEO2=/tmp/emacsconf2019/ZOOM0035_video2.mp4
JOINED=/tmp/emacsconf2019/ZOOM0035_joined.mp4
makeaudio1 () { ffmpeg -i $AUDIO0 -b:a 160k -y $AUDIO1 }
makeaudio2 () { ffmpeg -ss $AUDIOSKIP -i $AUDIO1 -c copy -t $LEN -y $AUDIO2 }
makevideo2 () { ffmpeg -ss $VIDEOSKIP -i $VIDEO1 -c copy -t $LEN -y $VIDEO2 }
makejoined () { ffmpeg -i $AUDIO2 -i $VIDEO2 -c copy -y $JOINED }
makeaudio1
AUDIOSKIP=0:11.50
VIDEOSKIP=0:13.50
LEN=6:04
makeaudio2
makevideo2
makejoined
laf
# (find-audio "/tmp/emacsconf2019/ZOOM0035_audio1.mp3" "1:01" "manpage")
# (find-audio "/tmp/emacsconf2019/ZOOM0035_audio1.mp3" "1:03" "(click)")
# (find-audio "/tmp/emacsconf2019/ZOOM0035_audio2.mp3" "0:50" "manpage")
# (find-video "/tmp/emacsconf2019/ZOOM0035_video.mp4" "1:05" "manpage")
# (find-video "/tmp/emacsconf2019/ZOOM0035_video2.mp4")
# (find-video "/tmp/emacsconf2019/ZOOM0035_joined.mp4")
# (find-video "/tmp/emacsconf2019/ZOOM0035_joined.mp4" "0:50" "manpage")
# (find-video "/tmp/emacsconf2019/ZOOM0035_joined.mp4" "6:00")
#####
#
# Remaking the "ZOOM0035end" video of my EmacsConf2019 talk with ffmpeg
# 2020dec05
#
#####
# «emacsconf2019-35end» (to ".emacsconf2019-35end")
# (find-fline "/sda5/home/edrx/eev-videos/emacsconf/")
# (find-fline "/sda5/home/edrx/eev-videos/emacsconf/ZOOM0025.txt")
* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
* (eepitch-vterm)
* (eepitch-kill)
* (eepitch-vterm)
rm -Rv /tmp/emacsconf2019/
mkdir /tmp/emacsconf2019/
cd /sda5/home/edrx/eev-videos/emacsconf/
laf --full-time
laf --full-time ZOOM0035end*
# cp -iv ZOOM0035end_audio.wav /tmp/emacsconf2019/
cp -iv ZOOM0035end_video.mp4 /tmp/emacsconf2019/
# to 160Kbps mp3 AUDIOSKIP
# AUDIO0 ----------------> AUDIO1 -----------> AUDIO2
# \
# >--> BOTH
# to mp4 (nop) VIDEOSKIP /
# VIDEO0 ----------------> AUDIO1 -----------> VIDEO2
#
#
cd /tmp/emacsconf2019/
laf
#AUDIO0=/tmp/emacsconf2019/ZOOM0035end_audio.wav
#AUDIO1=/tmp/emacsconf2019/ZOOM0035end_audio1.mp3
#AUDIO2=/tmp/emacsconf2019/ZOOM0035end_audio2.mp3
VIDEO1=/tmp/emacsconf2019/ZOOM0035end_video.mp4
VIDEO2=/tmp/emacsconf2019/ZOOM0035end_video2.mp4
JOINED=/tmp/emacsconf2019/ZOOM0035end_joined.mp4
makeaudio1 () { ffmpeg -i $AUDIO0 -b:a 160k -y $AUDIO1 }
makeaudio2 () { ffmpeg -ss $AUDIOSKIP -i $AUDIO1 -c copy -t $LEN -y $AUDIO2 }
makevideo2 () { ffmpeg -ss $VIDEOSKIP -i $VIDEO1 -c copy -t $LEN -y $VIDEO2 }
makejoined () { ffmpeg -i $AUDIO2 -i $VIDEO2 -c copy -y $JOINED }
#makeaudio1
#AUDIOSKIP=0:11.50
VIDEOSKIP=0:06
LEN=0:05.50
#makeaudio2
makevideo2
#makejoined
laf
# (find-video "/tmp/emacsconf2019/ZOOM0035end_video.mp4")
# (find-video "/tmp/emacsconf2019/ZOOM0035end_video2.mp4")
cd /tmp/emacsconf2019/
cat > vlist.txt <<'%%%'
file 'ZOOM0025_joined.mp4'
file 'ZOOM0035_joined.mp4'
file 'ZOOM0035end_video2.mp4'
%%%
ffmpeg -f concat -i vlist.txt -c copy -y emacsconf2019_0.mp4
ffmpeg -i emacsconf2019_0.mp4 -c copy -y emacsconf2019.mp4
cmp emacsconf2019_0.mp4 emacsconf2019.mp4
# (find-video "/tmp/emacsconf2019/emacsconf2019_0.mp4")
# (find-video "/tmp/emacsconf2019/emacsconf2019.mp4")
# (find-fline "/tmp/emacsconf2019/" "emacsconf2019.mp4")
# (find-twusfile "eev-videos/")
# (find-twupfile "eev-videos/")
# (find-fline "/tmp/emacsconf2019/")
cd /tmp/emacsconf2019/
Scp-np emacsconf2019.mp4 $TWUP/eev-videos/emacsconf2019.mp4
Scp-np emacsconf2019.mp4 $TWUS/eev-videos/emacsconf2019.mp4
# (find-eevvideo-links "ec2019" "emacsconf2019" "86yiRG8YJD0" "0:00")
#####
#
# non-monotonous-dts
# 2020dec06
#
#####
# «non-monotonous-dts» (to ".non-monotonous-dts")
# https://video.stackexchange.com/questions/15468/non-monotonous-dts-on-concat-ffmpeg
# (find-man "ffmpeg")
#####
#
# encode-vp9-two-pass (thanks to Amin Bandali)
# 2020dec06
#
#####
# «encode-vp9-two-pass» (to ".encode-vp9-two-pass")
# https://emacsconf.org/2019/talks/27/
# https://trac.ffmpeg.org/wiki/Encode/VP9#twopass
#
# Amin: I converted them to vp9+opus webm using a two-pass approach
# mentioned on https://trac.ffmpeg.org/wiki/Encode/VP9#twopass like so:
* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
rm -Rv /tmp/emacsconf2019-vp9/
mkdir /tmp/emacsconf2019-vp9/
cd /tmp/emacsconf2019-vp9/
cp -iv /tmp/emacsconf2019/emacsconf2019.mp4 /tmp/emacsconf2019-vp9/input.mp4
# (find-fline "/tmp/emacsconf2019/")
# (find-fline "/tmp/emacsconf2019-vp9/")
# (find-sh "cat /tmp/emacsconf2019-vp9/ffmpeg2pass-0.log | tr / '\\n'")
ffmpeg -i input.mp4 -c:v libvpx-vp9 -row-mt 1 -b:v 2M -pass 1 -an -f null /dev/null
ffmpeg -i input.mp4 -c:v libvpx-vp9 -row-mt 1 -b:v 2M -pass 2 -c:a libopus output.webm
#####
#
# ffprobe
# 2021jun16
#
#####
# «ffprobe» (to ".ffprobe")
# (find-man "1 ffprobe")
* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
FNAME=$S/http/angg.twu.net/eev-videos/2021-1-C2-intro.mp4
file $FNAME
mediainfo $FNAME
mediainfo --Full $FNAME
ffprobe $FNAME
#####
#
# mediainfo
# 2021jun16
#
#####
# «mediainfo» (to ".mediainfo")
# (find-status "mediainfo")
# (find-vldifile "mediainfo.list")
# (find-udfile "mediainfo/")
# (find-man "1 mediainfo")
# (find-sh "mediainfo --Help")
#####
#
# mkvtoolnix
# 2021nov17
#
#####
# «mkvtoolnix» (to ".mkvtoolnix")
# (find-status "mkvtoolnix")
# (find-vldifile "mkvtoolnix.list")
# (find-udfile "mkvtoolnix/")
# https://mkvtoolnix.download/index.html
O arquivo final é mp4 ou mkv?
Se gravou com OBS e gerou um mkv para depois editar pode corrigir
antes da edição e renderizar novamente.
Senão pode usar para um arquivo mkv:
mkvmerge -o destino.mkv -y 1:100 origem.mkv
#####
#
# audio-to-video
# 2023jul10
#
#####
# «audio-to-video» (to ".audio-to-video")
# https://superuser.com/questions/1041816/combine-one-image-one-audio-file-to-make-one-video-using-ffmpeg?newreg=d9fd42d1386d4487a128c62307a64a67
# https://www.bannerbear.com/blog/how-to-convert-audio-to-video-for-youtube-upload-using-ffmpeg/
# https://github.com/hniksic/img2video
* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
cd /tmp/
ffmpeg -r 1 -loop 1 -i a.jpg -i a.mp3 -acodec copy -r 1 -shortest -vf scale=1280:720 b.mp4
ffmpeg -r 1 -loop 1 -i a.jpg -i a.opus -acodec copy -r 1 -shortest -vf scale=1280:720 b.mp4
#####
#
# speed-up
# 2021dec03
#
#####
# «speed-up» (to ".speed-up")
# https://trac.ffmpeg.org/wiki/How%20to%20speed%20up%20/%20slow%20down%20a%20video
# The speed of a video stream can be changed by changing the
# presentation timestamp (PTS) of each video frame. This can be done
# via two methods: using the setpts video filter (which requires
# re-encoding) or by erasing the timestamps by exporting the video to
# a raw bitstream format and muxing to a container while creating new
# timestamps.
#
# Note that in the following examples, the audio stream is not
# changed, so it should ideally be disabled with -an.
#
# raw bitstream method
# --------------------
# This method is lossless and apart from changing the timestamps,
# copies the video stream as-is. Use this if you require no other
# changes to your input video.
First, copy the video to a raw bitstream format.
# For H.264:
ffmpeg -i input.mp4 -map 0:v -c:v copy -bsf:v h264_mp4toannexb raw.h264
# For H.265:
ffmpeg -i input.mp4 -map 0:v -c:v copy -bsf:v hevc_mp4toannexb raw.h265
# Then generate new timestamps while muxing to a container:
ffmpeg -fflags +genpts -r 30 -i raw.h264 -c:v copy output.mp4
# Change the value of -r to the desired playback frame rate.
# setpts filter
#
# To double the speed of the video with the setpts filter, you can
# use:
ffmpeg -i input.mkv -filter:v "setpts=0.5*PTS" output.mkv
# The filter works by changing the presentation timestamp (PTS) of
# each video frame. For example, if there are two succesive frames
# shown at timestamps 1 and 2, and you want to speed up the video,
# those timestamps need to become 0.5 and 1, respectively. Thus, we
# have to multiply them by 0.5.
#
# Note that this method will drop frames to achieve the desired speed.
# You can avoid dropped frames by specifying a higher output frame
# rate than the input. For example, to go from an input of 4 FPS to
# one that is sped up to 4x that (16 FPS):
ffmpeg -i input.mkv -r 16 -filter:v "setpts=0.25*PTS" output.mkv
# To slow down your video, you have to use a multiplier greater than 1:
ffmpeg -i input.mkv -filter:v "setpts=2.0*PTS" output.mkv
#####
#
# akater-tty-screenshot
# 2023jul16
#
#####
# «akater-tty-screenshot» (to ".akater-tty-screenshot")
# (find-telegachat "@emacs_telega#40524")
# (find-telegachat "@emacs_telega#40524" "akater-tty-screenshot")
(defun akater-tty-screenshot ()
(interactive)
(let ((default-directory "~"))
(shell-command
"ffmpeg -f fbdev -framerate 1 -i /dev/fb0 -frames:v 1 -q:v 1
screenshot.jpg")))
#####
#
# waveform
# 2023aug13
#
#####
# «waveform» (to ".waveform")
# (find-es "subtitles" "waveform-test-2")
#####
#
# ffmpeg-buddy
# 2023sep06
#
#####
# «ffmpeg-buddy» (to ".ffmpeg-buddy")
# https://news.ycombinator.com/item?id=31557809 Ffmpeg Buddy (evanhahn.github.io)
# https://evanhahn.github.io/ffmpeg-buddy/
# https://github.com/EvanHahn/ffmpeg-buddy
#####
#
# video-duration
# 2023sep25
#
#####
# «video-duration» (to ".video-duration")
# (find-angg ".zshrc" "video-duration")
# https://superuser.com/questions/650291/how-to-get-video-duration-in-seconds
* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
cd /tmp/
ffprobe \
-v error -select_streams v:0 -show_entries stream=duration -of default=noprint_wrappers=1:nokey=1 \
VID-20230923-WA0167.mp4
#####
#
# video-thumbnail
# 2023sep25
#
#####
# «video-thumbnail» (to ".video-thumbnail")
# https://stackoverflow.com/questions/27145238/create-thumbnail-from-video-using-ffmpeg
# https://networking.ringofsaturn.com/Unix/extractthumbnail.php
#####
#
# scale
# 2024mar21
#
#####
# «scale» (to ".scale")
# (find-man "1 ffmpeg-scaler")
# (find-man "1 ffmpeg")
# (find-man "1 ffmpeg" "scale")
# (find-man "1 ffmpeg" "bufsize")
# (find-man "1 ffmpeg" "-b:v 64k -bufsize 64k")
# https://trac.ffmpeg.org/wiki/Scaling
# (find-fline "$S/http/anggtwu.net/eev-videos/" "emacsconf2021.mp4")
* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
cp -v $S/http/anggtwu.net/eev-videos/emacsconf2021.mp4 /tmp/input.mp4
cd /tmp/
ffprobe input.mp4
ffmpeg -i input.mp4 -vf scale=320:200 output.mp4
ffmpeg -i input.mp4 -sws_flags fast_bilinear -vf scale=320:200 output.mp4
laf input.mp4 output.mp4
ffmpeg -i input.mp4 -vcodec libx265 -crf 28 fps-fps=30 -vf scale=320:200 output.mp4
ffmpeg -i input.mp4 -vcodec libx265 -crf 28 -vf scale=320:200 output.mp4
ffmpeg -i input.mp4 -b:v 64k -bufsize 64k -vf scale=320:200 output.mp4
ffmpeg -i input.mp4 -b:v 32k -bufsize 32k -vf scale=320:200 output.mp4
ffmpeg -i input.mp4 -b:v 16k -bufsize 16k -vf scale=320:200 output.mp4
ffmpeg -i input.jpg -vf scale=320:-1 output_320.png
ffmpeg -i input.jpg -sws_flags fast_bilinear -vf scale=320:-1 output_320.png
# (find-fline "/tmp/")
#####
#
# video-to-audio
# 2024apr16
#
#####
# «video-to-audio» (to ".video-to-audio")
# https://stackoverflow.com/questions/9913032/how-can-i-extract-audio-from-video-with-ffmpeg/36324719#36324719
# (find-extra-file-links "/sda1/home/music/panda/DAVID_BOWIE/criminal_world.mp3" "{c}")
# (find-audio "/sda1/home/music/panda/DAVID_BOWIE/criminal_world.mp3")
# (find-youtubedl-links "/tmp/" "{title}" "oUbLegcKgIc" "{ext-}" "{stem}")
* (sh-mode)
* (eepitch-shell2)
* (eepitch-kill)
* (eepitch-shell2)
# http://www.youtube.com/watch?v=oUbLegcKgIc
# http://www.youtube.com/watch?v=oUbLegcKgIc#t=0m00s
# http://www.youtube.com/watch?v=oUbLegcKgIc#t=0h00m00s
cd /tmp/
youtube-dl -t -f 18 --restrict-filenames 'http://www.youtube.com/watch?v=oUbLegcKgIc'
* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
cd /tmp/
ffmpeg -i Criminal_World_2018_Remaster-oUbLegcKgIc.mp4 \
-q:a 0 -map a \
"David Bowie - Criminal World.mp3"
;; (find-audio "/tmp/David Bowie - Criminal World.mp3")
#####
#
# images-to-video
# 2025jun08
#
#####
# «images-to-video» (to ".images-to-video")
# https://stackoverflow.com/questions/24961127/how-to-create-a-video-from-images-with-ffmpeg
* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
# (find-fline "/tmp/itov/")
rm -Rv /tmp/itov/
mkdir /tmp/itov/
cd /tmp/itov/
wget -O opengl-rotating-triangle.zip "https://github.com/cirosantilli/media/blob/master/opengl-rotating-triangle.zip?raw=true"
unzip opengl-rotating-triangle.zip
cd opengl-rotating-triangle
wget -O audio.ogg https://upload.wikimedia.org/wikipedia/commons/7/74/Alnitaque_%26_Moon_Shot_-_EURO_%28Extended_Mix%29.ogg
ffmpeg -framerate 30 -pattern_type glob -i '*.png' \
-i audio.ogg -c:a copy -shortest -c:v libx264 -pix_fmt yuv420p out.mp4
;; (find-fline "/tmp/itov/opengl-rotating-triangle/" "out.mp4")
#####
#
# big-mov-to-small-mp4
# 2025aug18
#
#####
# «big-mov-to-small-mp4» (to ".big-mov-to-small-mp4")
# (find-google-links "how do i convert a mov file to a cell phone video with ffmpeg")
# (find-fline "~/POLEDANCE/" "2025-08-12__brasa_jade_berardo.mp4")
# (find-fline "~/POLEDANCE/" "2025-08-12__brasa_jade_berardo.mov")
* (eepitch-shell3)
* (eepitch-kill)
* (eepitch-shell3)
# (find-fline "/tmp/")
cd /tmp/
cp -v ~/POLEDANCE/2025-08-12__brasa_jade_berardo.mov /tmp/a.mov
# ffmpeg -i input.mov -c:v libx264 -preset medium -crf 23 -c:a aac -b:a 128k -movflags +faststart output.mp4
time \
ffmpeg -i a.mov -c:v libx264 \
-vf scale=640:-1 \
-preset medium -crf 28 -c:a aac -b:a 128k \
-movflags +faststart b.mp4
* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
# (find-sh "cd /tmp/; ls *.mp4")
INPUTS=(
c2luc1.mp4
c2luc2.mp4
)
OUTFILE=2022jul10-apresentacao-C2.mp4
cd /tmp/
for i in $INPUTS; do echo "file '$i'"; done
for i in $INPUTS; do echo "file '$i'"; done > /tmp/vlist.txt
ffmpeg -f concat -i vlist.txt -c copy $OUTFILE
2022jul10-apresentacao-C2.mp4
# (find-video "/tmp/c2luc-all.mp4")
# (find-video "/tmp/out.mp4" "3:58")
# (find-ssr-links "2022c2apr1" "2022jul10-apresentacao-C2" "{hash}" "{time}")
https://trac.ffmpeg.org/wiki/Encode/MP3
https://trac.ffmpeg.org/wiki/Capture/Desktop
https://leixiaohua1020.github.io/#ffmpeg-development-examples
https://trac.ffmpeg.org/wiki/ExtractSubtitles
https://trac.ffmpeg.org/wiki/FFprobeTips
# (find-man "mpv")
# (find-man "mpv" ". Step forward")
# (find-man "ffmpeg")
# (find-man "ffmpeg" "-ar")
# (find-man "ffmpeg" "-b:a 128k")
https://unix.stackexchange.com/questions/113695/gif-screencasting-the-unix-way
http://blog.pkh.me/p/13-the-ffmpeg-libav-situation.html
# (find-fline "/tmp/" "in.mp3")
(ee-to-seconds "7:10")
# (find-status "mp3gain")
# (find-vldifile "mp3gain.list")
# (find-udfile "mp3gain/")
# (find-udfile "mp3gain/README.method")
# (find-status "normalize-audio")
# (find-vldifile "normalize-audio.list")
# (find-udfile "normalize-audio/")
# (find-udfile "normalize-audio/changelog.gz")
# (find-udfile "normalize-audio/README.gz")
# (find-udfile "normalize-audio/TODO")
# (find-udfile "normalize-audio/changelog.Debian.gz")
# (find-udfile "normalize-audio/copyright")
# (find-udfile "normalize-audio/README.Debian")
# (find-man "1 normalize-mp3")
# (find-man "1 normalize-audio")
# (find-fline "/usr/bin/normalize-ogg")
# (find-man "1 normalize-ogg")
normalize-audio
# (find-udfile "mp3gain/changelog.Debian.gz")
# (find-udfile "mp3gain/copyright")
# (find-udfile "mp3gain/README.Debian")
# (find-man "1 mp3gain")
normalize
# (find-fline "~/audios/")
cd ~/audios/
avconv -i 2013ago01-ict.3ga 2013ago01-ict.mp3
https://blog.scottlogic.com/2020/11/23/ffmpeg-webassembly.html
https://canvatechblog.com/a-journey-through-color-space-with-ffmpeg-3a129bfd9b05 ***
https://github.com/MaartenBaert/ssr#ffmpeg-vs-libav-confusion
https://news.ycombinator.com/item?id=33383023 Show HN: FFmpeg Command Visualizer and Editor (ffmpeg.guide)
https://ffmpeg.guide/
https://news.ycombinator.com/item?id=33771445 Guide to FFmpeg (img.ly) ***
https://www.paulox.net/2023/05/03/quickly_resize-a-video-with-ffmpeg-for-mastodon/
https://news.ycombinator.com/item?id=37199479 VidCutter: A program for lossless video cutting (github.com/ozmartian) - ffmpeg
https://news.ycombinator.com/item?id=34965535 FFmpeg 6.0 (ffmpeg.org)
https://news.ycombinator.com/item?id=34555465 A History of the FFmpeg Project (multimedia.cx)
https://xenodium.com/emacs-ffmpeg-and-macos-alias-commands/
https://news.ycombinator.com/item?id=31557809 Ffmpeg Buddy (evanhahn.github.io)
https://superuser.com/questions/624563/how-to-resize-a-video-to-make-it-smaller-with-ffmpeg
https://news.ycombinator.com/item?id=39938703 FFmpeg 7.0 (ffmpeg.org)
https://epiccoleman.com/posts/2023-03-19-ffmpeg-mp4-webm ***
https://github.com/mifi/lossless-cut
https://news.ycombinator.com/item?id=40829494 LosslessCut: The Swiss army knife of lossless video/audio editing (github.com/mifi)
https://news.ycombinator.com/item?id=40892812 Ask HN: Where are the good resources for learning audio processing?
https://indieweb.social/@xenodium/112841493311260010 M-x speed-up-video-fragment
https://www.reddit.com/r/emacs/comments/1ew1fmm/experimental_transient_interface_for_barebones/
https://lav.io/notes/ffmpeg-explorer/ ***
https://newbeelearn.com/tools/videoeditor/
https://news.ycombinator.com/item?id=42207002 Show HN: Video editor app that generates FFmpeg commands (newbeelearn.com)
https://publicdomainreview.org/essay/machiavelli-and-the-emergence-of-the-private-study/
https://www.newstatesman.com/culture/books/book-of-the-day/2024/11/political-afterlife-paradise-lost-milton-orlando-reade-review
https://news.ycombinator.com/item?id=42188816 The Political Afterlife of Paradise Lost (newstatesman.com)
https://x.com/Lowkey0nline/status/1858538899741503880 Fatema Zainab Rajwani has spent almost 100 days in jail accused of shutting down Elbit Systems with Palestine Action. Her mother read a poem she has written for Gaza in jail, and it moved me to tears.
https://x.com/FranceskAlbs/status/1858912366160998416 which sheds light on a persistent fallacy of Western media: accepting narratives shaped by the Israeli government/army as absolute truth ***
https://www.youtube.com/watch?v=v9_mzAzWnXA
https://www.youtube.com/watch?v=6oTS1EE0hWY
https://www.youtube.com/watch?v=evV9h7Jf99Q
https://lcamtuf.substack.com/p/a-15-minute-intro-to-involute-gears
https://news.ycombinator.com/item?id=42162673 A 15-minute intro to involute gears (lcamtuf.substack.com)
https://simonwillison.net/2024/Aug/21/usrbinenv-uv-run/
https://news.ycombinator.com/item?id=42198256 /usr/bin/env -S uv run (simonwillison.net)
https://steelcm.com/blog/generating-video-sprites-using-ffmpeg/
https://news.ycombinator.com/item?id=42258407 Generate video sprites using just FFmpeg (steelcm.com)
https://github.com/livingbio/typed-ffmpeg
https://news.ycombinator.com/item?id=44123098 Show HN: Typed-FFmpeg 3.0–Typed Interface to FFmpeg and Visual Filter Editor (github.com/livingbio)
https://taonaw.com/2025/06/07/compressing-mp-files-while-keeping.html
https://vidmix.app/ffmpeg-in-plain-english/
https://news.ycombinator.com/item?id=44520855 Show HN: FFmpeg in plain English – LLM-assisted FFmpeg in the browser (vidmix.app)
# Local Variables:
# coding: utf-8-unix
# modes: (fundamental-mode sh-mode)
# End: