# project-peakgif-machine ## plan - generate csv of levels - transform into object containing frame values too - or have - obj - vframerate - aframerate - width - height - audioData: [] - smoothPeak: in seconds - peakAudioFrames: - peakVideoFrames: - peakTimecode: - audioPeak: (smoothPeak - 1sec) - peakStill: - peakGifStart: - peak of smoothed array (moment 1 second offset if nothing else changed) - smooth the array with 2-second moving average - find max frame - find camera and have custom filters for each location? - have slack listen for filter requests---or text/caption requests - ## references and notes normalize `normalize=blackpt=black:whitept=white:smoothing=50:independence=0` curves `ffmpeg -i input.vid -vf "curves=all='0/0 0.5/1 1/1'" -codec:a copy -codec:v libx264 -y output.vid` eq `ffplay -vf eq=gamma=1.5:saturation=1.3 original.vid # render ffmpeg -i original.vid -vf eq=gamma=1.5:saturation=1.3 \ -c:a copy outfile.vid` ``` ffmpeg -ss 5037.165510727297 -i /Volumes/10_01/_footage/2022_06/24/20220624.0.001_LL.SummerSystem.Planning/hyper.a.h264/20220624.0.001_LL.SummerSystem.Planning_hyper.a.h264.0001.mp4 -t 2.0 -y -pix_fmt yuv420p -vf "pp=al, normalize=blackpt=black:whitept=white:smoothing=50:independence=0" /Volumes/_resolve/_exports/_peakgifs/20220624.0.001_LL.SummerSystem.Planning_hyper.a.h264.0001_segment.mov ``` some references ``` ffmpeg -i in.mp3 -af astats=metadata=1:reset=1,ametadata=print:key=lavfi.astats.Overall.RMS_level:file=log.txt -f null - ``` ``` ffmpeg -i mywav.wav -af asetnsamples=44100,astats=metadata=1:reset=1,ametadata=print:key=lavfi.astats.Overall.RMS_level:file=log.txt ``` ``` ffmpeg -af ``` ffmpeg -t 10 -i "/Users/mk/Desktop/zkcddd.mov" -af "volumedetect" -f null /dev/null ffmpeg -i "/Users/mk/Desktop/20220512.0.001_TDM90DR.HDPInterview.Recording_hyper.b.h264.0001.mp4" -ss 00:05:00 -t 00:05:00 -af "volumedetect" -f null /dev/null ffprobe -i "/Users/mk/Desktop/20220512.0.001_TDM90DR.HDPInterview.Recording_hyper.b.h264.0001.mp4" -af asetnsamples=44100,astats=metadata=1:reset=1,ametadata=print:key=lavfi.astats.Overall.RMS_level:file="/Users/mk/Desktop/log.txt" this works: ``` ffprobe -f lavfi -i amovie=/Users/mk/Desktop/zkcddd.mov,astats=metadata=1:reset=1 -show_entries frame=pkt_pts_time:frame_tags=lavfi.astats.Overall.RMS_level -of csv=p=0 ffprobe -f lavfi -i amovie=/Users/mk/Desktop/zkcddd.mov,astats=metadata=1:reset=1 -show_entries frame=pkt_pts_time:frame_tags=lavfi.astats.Overall.RMS_level -of csv=p=0 ``` now every second ``` ffprobe -f lavfi -i amovie=/Users/mk/Desktop/zkcddd.mov,astats=metadata=1:reset=24 -show_entries frame=pkt_pts_time:frame_tags=lavfi.astats.Overall.RMS_level -of csv=p=0 1> /Users/mk/Development/ll-studio-bot/_temp/out.txt 2> /Users/mk/Development/ll-studio-bot/_temp/err.txt ``` ``` ffprobe -f lavfi -i amovie=/Users/mk/Desktop/zkcddd.mov,astats=metadata=1:reset=1 -show_entries frame=pkt_pts_time:frame_tags=lavfi.astats.Overall.RMS_level,lavfi.astats.1.RMS_level,lavfi.astats.2.RMS_level -of csv=p=0 # 1> /Users/mk/Desktop/every-frame.txt ffprobe -f lavfi -i amovie=/Users/mk/Desktop/zkcddd.mov,astats=metadata=1:reset=1 -show_entries frame=pkt_pts_time:frame_tags=lavfi.astats.Overall.RMS_level,lavfi.astats.1.RMS_level,lavfi.astats.2.RMS_level -of csv=p=0 ``` https://superuser.com/questions/1183663/determining-audio-level-peaks-with-ffmpeg ``` ffprobe -f lavfi -i amovie=/Users/mk/Desktop/zkcddd.mov,astats=metadata=1:reset=1 frame=pkt_pts_time:frame_tags=lavfi.astats.Overall.RMS_level,lavfi.astats.1.RMS_level,lavfi.astats.2.RMS_level -of csv=p=0 1> /Users/mk/Desktop/every-frame.txt ``` /Users/mk/Desktop/20220512.0.001_TDM90DR.HDPInterview.Recording_hyper.b.h264.0001.mp4 ``` ffprobe -f lavfi -i amovie=/Users/mk/Desktop/20220512.0.001_TDM90DR.HDPInterview.Recording_hyper.b.h264.0001.mp4,astats=metadata=1:reset=1 -show_entries frame=pkt_pts_time:frame_tags=lavfi.astats.Overall.RMS_level,lavfi.astats.1.RMS_level,lavfi.astats.2.RMS_level -of csv=p=0 1> /Users/mk/Desktop/every-frame.txt ``` https://ottverse.com/ffprobe-comprehensive-tutorial-with-examples/#Per-Frame_information_using_ffprobe ffmpeg -i in.mp3 -af as ffmpeg -i /Users/mk/Desktop/zkcddd.mov -af astats=metadata=1:reset=1,ametadata=print:key=lavfi.astats.Overall.RMS_level:file=/Users/mk/Development/ll-studio-bot/_temp/out-5.txt -f null - ``` ffprobe -f lavfi -i amovie=/Users/mk/Desktop/20220512.0.001_TDM90DR.HDPInterview.Recording_hyper.b.h264.0001.mp4,astats=metadata=print:reset=1 -show_entries frame=pkt_pts_time:frame_tags=lavfi.astats.Overall.RMS_level,lavfi.astats.1.RMS_level,lavfi.astats.2.RMS_level -of csv=p=0 1> /Users/mk/Desktop/every-frame.txt ``` ffmpeg -i loudSoft.mp3 -af astats=metadata=1:reset=1,ametadata=print:key=lavfi.astats.Overall.RMS_level:file=- 2> result.txt ffprobe -v quiet -f lavfi -print_format json -i "movie=test.mp4" -show_frames -show_entries frame=pkt_pts_time ### python options https://github.com/slhck/ffmpeg-normalize