# Schreibtisch als Arbeitsfolder bestimmen # Linux/Mac/Windows Terminal or WSL cd ~/Desktop # Windows locally cd Desktop # Windows on OneDrive Cloud cd OneDrive # Übungsdateien generieren ffmpeg -lavfi mandelbrot -c:v rawvideo -pix_fmt uyvy422 -t 10 mandelbrot.avi ffplay mandelbrot.avi ffmpeg -lavfi sine=frequency=440 -c:a pcm_s16le -ar 48k -ac 2 -t 10 la.wav ffplay la.wav ffmpeg -i mandelbrot.avi -i la.wav -c:v copy -c:a copy mandela.avi ffplay mandela.avi ffprobe mandela.avi ffprobe -show_format -show_streams mandela.avi ffprobe -show_format -show_streams -print_format flat mandela.avi ffprobe -show_format -show_streams -print_format xml mandela.avi ffprobe -show_format -show_streams -print_format json mandela.avi ffprobe -show_format -show_streams -print_format json mandela.avi > mandela.txt mediainfo mandela.avi ffmpeg -i mandelbrot.avi -c copy mandelbrot.mov ffplay mandelbrot.mov ffmpeg -i mandelbrot.avi -f framemd5 mandelbrot_avi_framemd5.txt ffmpeg -i mandelbrot.mov -f framemd5 mandelbrot_mov_framemd5.txt # Linux/Mac/Windows Terminal or WSL diff -s mandelbrot_avi_framemd5.txt mandelbrot_mov_framemd5.txt # Windows CMD fc mandelbrot_avi_framemd5.txt mandelbrot_mov_framemd5.txt # Hilfe finden ffmpeg -h ffmpeg -codecs ffmpeg -decoders ffmpeg -encoders ffmpeg -filters # Linux/Mac/Windows Terminal or WSL ffmpeg -filters | grep 'negate' # Windows CMD ffmpeg -filters | findstr "negate" ffmpeg -pix_fmts # Linux/Mac/Windows Terminal or WSL ffmpeg -pix_fmts | grep 'bayer' # Windows CMD ffmpeg -pix_fmts | findstr "bayer" # Linux/Mac/Windows Terminal or WSL ffmpeg -encoders | grep 'av1' # Windows CMD ffmpeg -encoders | findstr "av1" # Linux/Mac/Windows Terminal or WSL ffmpeg -decoders | grep 'av1' # Windows CMD ffmpeg -decoders | findstr "av1" ffmpeg -h decoder=libdav1d # Linux/Mac/Windows Terminal or WSL ffmpeg -decoders | grep '264' # Windows CMD ffmpeg -decoders | findstr "264" # Linux/Mac/Windows Terminal or WSL ffmpeg -encoders | grep '264' # Windows CMD ffmpeg -encoders | findstr "264" ffmpeg -h encoder=libx264 x264 -h x264 --fullhelp # Dufaycolor ffplay -loop 0 DUFAY_TIFF/Dufay_%06d.tif ffmpeg -f image2 -framerate 24 -i DUFAY_TIFF/Dufay_%06d.tif -filter:v "scale=1440:1080:flags=lanczos, pad=1920:1080:240:0" -c:v prores_ks -profile:v 3 ffmpeg -i Dufay_ProRes.mkv -pix_fmt yuv420p -c:v libx264 -preset veryslow -crf 35 Dufay_ProRes_H264.mp4 ffmpeg -i Dufay_ProRes.mkv -pix_fmt yuv420p -c:v libx264 -preset veryslow -crf 18 -movflags +faststart Dufay_ProRes_H264_web.mp4 ffplay -loop 0 DUFAY_TIFF/Dufay_%06d.tif ffmpeg -f image2 -i DUFAY_TIFF/Dufay_%06d.tif -f framemd5 Dufay_TIFF_framemd5.txt ffprobe -show_format -show_streams -print_format json DUFAY_TIFF/Dufay_000001.tif ffprobe -show_format -show_streams -print_format json DUFAY_TIFF/Dufay_%06d.tif mediainfo DUFAY_TIFF/Dufay_000001.tif mediainfo DUFAY_TIFF mediainfo --Details DUFAY_TIFF/Dufay_000001.tif mediainfo --Info-Parameters # Dateiumwandlungen ffmpeg -f image2 -framerate 24 -i DUFAY_TIFF/Dufay_%06d.tif -filter:v "scale=1440:1080:flags=lanczos, pad=1920:1080:240:0" -c:v prores_ks -profile:v 3 Dufay_ProRes.mkv ffmpeg -h encoder=dnxhd ffmpeg -f image2 -framerate 24 -i DUFAY_TIFF/Dufay_%06d.tif -filter:v "scale=1440:1080:flags=lanczos, pad=1920:1080:240:0" -c:v dnxhd -profile:v dnxhr_hqx -pix_fmt yuv422p10le Dufay_DNxHR.mxf ffmpeg -i Dufay_ProRes.mkv -c:v libx264 -preset veryslow -crf 18 -pix_fmt yuv420p -movflags +faststart Dufay_ProRes_H264_18.mp4 ffmpeg -i Dufay_ProRes.mkv -c:v libx264 -preset veryslow -crf 30 -pix_fmt yuv420p -movflags +faststart Dufay_ProRes_H264_30.mp4 ffmpeg -i Dufay_DNxHR.mxf -c:v libx264 -preset veryslow -crf 18 -pix_fmt yuv420p Dufay_DNxHR_H264_18.mp4 ffmpeg -i Dufay_DNxHR.mxf -c:v libx264 -preset veryslow -crf 30 -pix_fmt yuv420p Dufay_DNxHR_H264_30.mp4 ffmpeg -f image2 -framerate 24 -i DUFAY_TIFF/Dufay_%06d.tif -filter:v "scale=1440:1080:flags=lanczos, pad=1920:1080:240:0" -c:v libx264 -preset veryslow -crf 18 -pix_fmt yuv420p -movflags +faststart Dufay_master_H264_18.mp4 ffmpeg -f image2 -framerate 24 -i DUFAY_TIFF/Dufay_%06d.tif -filter:v "scale=1440:1080:flags=lanczos, pad=1920:1080:240:0" -c:v libx264 -preset veryslow -crf 30 -pix_fmt yuv420p -movflags +faststart Dufay_master_H264_30.mp4 # Geteilter Bildschirm benützen ffmpeg -i Dufay_master_H264_18.mp4 -i Dufay_ProRes_H264_18.mp4 -filter_complex "[0]crop=iw/2:ih:0:0[left]; [1]crop=iw/2:ih:iw/2:0[right]; [left][right]hstack" Dufay_split_ProRes_18.mp4 ffmpeg -i Dufay_master_H264_30.mp4 -i Dufay_ProRes_H264_30.mp4 -filter_complex "[0]crop=iw/2:ih:0:0[left]; [1]crop=iw/2:ih:iw/2:0[right]; [left][right]hstack" Dufay_split_ProRes_30.mp4 ffmpeg -i Dufay_ProRes_H264_18.mp4 -i Dufay_ProRes_H264_30.mp4 -filter_complex "[0]crop=iw/2:ih:0:0[left]; [1]crop=iw/2:ih:iw/2:0[right]; [left][right]hstack" Dufay_split_ProRes_18_30.mp4 ffmpeg -i Dufay_master_H264_18.mp4 -i Dufay_DNxHR_H264_18.mp4 -filter_complex "[0]crop=iw/2:ih:0:0[left]; [1]crop=iw/2:ih:iw/2:0[right]; [left][right]hstack" Dufay_split_DNxHR_18.mp4 ffmpeg -i Dufay_master_H264_30.mp4 -i Dufay_DNxHR_H264_30.mp4 -filter_complex "[0]crop=iw/2:ih:0:0[left]; [1]crop=iw/2:ih:iw/2:0[right]; [left][right]hstack" Dufay_split_DNxHR_30.mp4 ffmpeg -i Dufay_DNxHR_H264_18.mp4 -i Dufay_DNxHR_H264_30.mp4 -filter_complex "[0]crop=iw/2:ih:0:0[left]; [1]crop=iw/2:ih:iw/2:0[right]; [left][right]hstack" Dufay_split_DNxHR_18_30.mp4 ffmpeg -i Dufay_ProRes_H264_18.mp4 -i Dufay_DNxHR_H264_18.mp4 -filter_complex "[0]crop=iw/2:ih:0:0[left]; [1]crop=iw/2:ih:iw/2:0[right]; [left][right]hstack" Dufay_split_mezzanine_18.mp4 ffmpeg -i Dufay_ProRes_H264_30.mp4 -i Dufay_DNxHR_H264_30.mp4 -filter_complex "[0]crop=iw/2:ih:0:0[left]; [1]crop=iw/2:ih:iw/2:0[right]; [left][right]hstack" Dufay_split_mezzanine_30.mp4 # Differenzdatei benützen ffmpeg -i Dufay_master_H264_18.mp4 -i Dufay_ProRes_H264_18.mp4 -filter_complex "[0]format=yuva444p, lut=c3=128, negate[0_with_alpha]; [1][0_with_alpha]overlay" Dufay_delta_ProRes_18.mp4 ffmpeg -i Dufay_master_H264_30.mp4 -i Dufay_ProRes_H264_30.mp4 -filter_complex "[0]format=yuva444p, lut=c3=128, negate[0_with_alpha]; [1][0_with_alpha]overlay" Dufay_delta_ProRes_30.mp4 ffmpeg -i Dufay_ProRes_H264_18.mp4 -i Dufay_ProRes_H264_30.mp4 -filter_complex "[0]format=yuva444p, lut=c3=128, negate[0_with_alpha]; [1][0_with_alpha]overlay" Dufay_delta_18_30.mp4 ffmpeg -i Dufay_master_H264_18.mp4 -i Dufay_DNxHR_H264_18.mp4 -filter_complex "[0]format=yuva444p, lut=c3=128, negate[0_with_alpha]; [1][0_with_alpha]overlay" Dufay_delta_DNxHR_18.mp4 ffmpeg -i Dufay_master_H264_30.mp4 -i Dufay_DNxHR_H264_30.mp4 -filter_complex "[0]format=yuva444p, lut=c3=128, negate[0_with_alpha]; [1][0_with_alpha]overlay" Dufay_delta_DNxHR_30.mp4 ffmpeg -i Dufay_ProRes_H264_18.mp4 -i Dufay_DNxHR_H264_18.mp4 -filter_complex "[0]format=yuva444p, lut=c3=128, negate[0_with_alpha]; [1][0_with_alpha]overlay" Dufay_delta_mezzanine_18.mp4 ffmpeg -i Dufay_ProRes_H264_30.mp4 -i Dufay_DNxHR_H264_30.mp4 -filter_complex "[0]format=yuva444p, lut=c3=128, negate[0_with_alpha]; [1][0_with_alpha]overlay" Dufay_delta_mezzanine_30.mp4 # ANHANG # visualise motion in H.264 # # pf = forward predicted motion vectors of P pictures # bf = forward predicted motion vectors of B pictures # bb = backward predicted motion vectors of B pictures ffplay -loop 0 -flags2 +export_mvs -vf "codecview=mv=pf+bf+bb" Dufay_master_H264_18.mp4 ffplay -loop 0 -flags2 +export_mvs -vf "codecview=mv=pf+bf+bb" Dufay_master_H264_30.mp4 # visualise one bit-planes (exemple is 3) bitdepth=8 ; bit2play=3 ; ffplay -loop 0 -vf "lutyuv=y=bitand(val\,pow(2\,${bitdepth}-${bit2play}))*pow(2\,${bit2play}):u=(maxval-minval)/2:v=(maxval-minval)/2" Dufay_master_H264_18.mp4 # visualise 10 bit-planes ffplay -loop 0 -vf "format=yuv420p10le|yuv422p10le|yuv444p10le|yuv440p10le,split=10[b0][b1][b2][b3][b4][b5][b6][b7][b8][b9]; [b0]crop=iw/10:ih:(iw/10)*0:0,lutyuv=y=512:u=512:v=512:y=bitand(val\,pow(2\,10-1))*pow(2\,1)[b0c]; [b1]crop=iw/10:ih:(iw/10)*1:0,lutyuv=y=512:u=512:v=512:y=bitand(val\,pow(2\,10-2))*pow(2\,2)[b1c]; [b2]crop=iw/10:ih:(iw/10)*2:0,lutyuv=y=512:u=512:v=512:y=bitand(val\,pow(2\,10-3))*pow(2\,3)[b2c]; [b3]crop=iw/10:ih:(iw/10)*3:0,lutyuv=y=512:u=512:v=512:y=bitand(val\,pow(2\,10-4))*pow(2\,4)[b3c]; [b4]crop=iw/10:ih:(iw/10)*4:0,lutyuv=y=512:u=512:v=512:y=bitand(val\,pow(2\,10-5))*pow(2\,5)[b4c]; [b5]crop=iw/10:ih:(iw/10)*5:0,lutyuv=y=512:u=512:v=512:y=bitand(val\,pow(2\,10-6))*pow(2\,6)[b5c]; [b6]crop=iw/10:ih:(iw/10)*6:0,lutyuv=y=512:u=512:v=512:y=bitand(val\,pow(2\,10-7))*pow(2\,7)[b6c]; [b7]crop=iw/10:ih:(iw/10)*7:0,lutyuv=y=512:u=512:v=512:y=bitand(val\,pow(2\,10-8))*pow(2\,8)[b7c]; [b8]crop=iw/10:ih:(iw/10)*8:0,lutyuv=y=512:u=512:v=512:y=bitand(val\,pow(2\,10-9))*pow(2\,9)[b8c]; [b9]crop=iw/10:ih:(iw/10)*9:0,lutyuv=y=512:u=512:v=512:y=bitand(val\,pow(2\,10-10))*pow(2\,10)[b9c]; [b0c][b1c][b2c][b3c][b4c][b5c][b6c][b7c][b8c][b9c]hstack=10,format=yuv422p10le,drawgrid=w=iw/10:h=ih:t=2:c=cyan@1" Dufay_master_H264_18.mp4