FFmpeg常用命令/参数
常用命令
-
ffmpeg -s:v 1920x1080 -r 25 -i input.yuv -vf scale=960:540 -c:v rawvideo -pix_fmt yuv420p out.yuv
#
-
ffmpeg -s:v 1920x540 -r 25 -i updecode_1920x540_50.yuv -c:v libx265 out.h265
使用libx265编码器编码yuv数据
-
ffmpeg -i input.mp4 -vf crop=720:720:280:0 output.mp4
从 (280,0) 坐标处裁剪大小为720x720的视频
-
ffmpeg -i input_file -s 320*240 output_file
改变输出视频尺寸
-
ffmpeg -c:v hevc_cuvid -i input -f rawvideo out_3840x2160.RGB
硬件加速解码视频为原始RGB数据
-
-pix_fmt yuv_420p (yuv420p10le / yuv420p12le / rgb24)
设定原始数据格式
-
ffmpeg -i input.ts -s 4096x2160 -pix_fmt rgb24 out_4096x2160.rgb
解码视频为rgb24格式并设置size为4096x2160
-
ffmpeg -f rawvideo -pix_fmt rgb24 -s 4096x1080 -i out_Odd_4096x1080.RGB -r 59.94 -s 4096x1080 -b:v 50m -c:v hevc_nvenc out_Odd_4096x1080.avi
编码视频
-
ffmpeg -h encoder=libx264
查看编码器信息
-
ffmpeg -ss 00:03:00 -t 00:04:00 -i In_4K.UHDTV.HEVC.10bit.HDR.DD5.1-FLTTH.ts -s 4096x2160 -c:v libx265 -b:v 100m -r 50 -pix_fmt yuv420p AerialChina/out_4096x2160.ts -y
将10bit的HDR视频从第三分钟开始截取1分钟并转为8bit视频
-
ffmpeg -i test.mp4 -y -f image2 -s 960x540 test/%05d.jpg
按帧截取存为图片
-
ffmpeg -f image2 -i test\%05d.jpg -vcodec libx264 -r 25 -b 382k -pix_fmt yuv420p test.mp4
-
ffmpeg -i %8d.png -pix_fmt yuv420p -vsync 0 001.yuv -y
多张png图片合成yuv数据
-
ffmpeg -s:v 3840x2160 -c:v rawvideo -pix_fmt yuv420p10le -i 10bit.yuv -c:v rawvideo -pix_fmt gbrp10le gbrp10le_out.rgb
10bit yuv转rgb
-
ffmpeg -i 10021502.mp4 -vf "select=between(n\,84\,208)*not(mod(n\,4))" -vsync 0 ./pkl/image_%05d.jpg
抽帧
-
ffmpeg -i src.mp4 -i dst.mp4 -lavfi '[0:v]split=3[v1][v2][v3];[1:v]split=3[r1][r2][r3];[v1][r1]psnr=shortest=1;[v2][r2]ssim=shortest=1;[v3][r3]libvmaf=n_subsample=1:n_threads=8:model_path=bin/model/vmaf_v0.6.1.pkl:shortest=1' -f null - 2>result.log 1>/dev/null
# 计算ssim,psnr,vmaf
-
ffmpeg -i src.mp4 -i dst.mp4 -lavfi '[0:v]split=2[v1][v2];[1:v]split=2[r1][r2];[v1][r1]psnr=shortest=1;[v2][r2]ssim=shortest=1' -f null -
#计算psnr,ssim
-
ffmpeg -i src.png -f image2 -vcodec mjpeg -qmax 2 -qmin 1 -pix_fmt rgb24 dst.jpeg -y
使用mjpeg进行图像编码,控制编码质量
-
ffmpeg -start_number 01209600 -framerate 24/1 -i src_path/%8d.dpx -vf setsar=1:1 -vcodec hevc_nvenc -preset slow -cq:v 19 -pix_fmt yuv420p -r 24 -vtag hvc1 -y dst_path/video.mp4
dpx转mp4
视频编码
ffmpeg -s:v 1920x1080 -i BasketballDrive_000to049.yuv -c:v h264 -vframes 50 -qp 37 BasketballDrive_qp37_h264.h264 -psnr -y 1>>BasketballDrive_qp37_h264.txt 2>&1
264定qp编码ffmpeg -i BasketballDrive_qp37_h264.h264 -pix_fmt yuv420p BasketballDrive_qp37_rec_h264.yuv -y
解码
视频截取
ffmpeg -i input.wmv -ss 00:00:30.0 -c copy -t 00:00:10.0 output.wmv # 从30s开始截取10s
ffmpeg -i input.wmv -ss 30 -c copy -t 10 output.wmv
ffmpeg -i input.wmv -ss 30 -c copy -to 40 output.wmv # 从30s截取到40s
视频拼接
ffmpeg -i noisy.mp4 -i denoise.mp4 -filter_complex "nullsrc=size=1280x360[base]; [0:v]scale=640x360,drawtext=fontcolor=white:fontsize=30:fontfile=/Library/Fonts/Arial.ttf:text='Origin':x=30:y=30[left]; [1:v]scale=640x360,drawtext=fontcolor=white:fontsize=30:fontfile=/Library/Fonts/Arial.ttf:text='HDR':x=30:y=30[right]; [base][left] overlay=shortest=1[tmp1]; [tmp1][right] overlay=shortest=1:x=640" -sws_flags bicubic demo0.mp4
#拼接视频并添加logo
常用参数
ffmpeg -pix_fmts
显示支持的像素格式-b:v 64k
设置视频码率为64kbps (-b:a 设置音频)-c:v h264_qsv
ffmpeg -hwaccels
显示硬编码器-y
覆盖原文件-an
去除声音-ss
开始时间-t
持续时间-to
结束时间
ffprobe
ffprobe -v error -show_format -show_streams input.mp4
获取视频信息ffprobe -show_format inputFile
获取视频封装信息ffprobe -show_streams inputFile
获取音视频流信息ffprobe -show_packets -select_streams v input | grep pts_time
获取视频ptsffprobe -hide_banner -show_frames -i input | egrep pkt_pts
获取视频ptsffprobe -v error -count_frames -select_streams v:0 -show_entries stream=nb_read_frames -of default=nokey=1:noprint_wrappers=1 inputFile
统计视频帧数ffprobe -v error -select_streams v:0 -show_entries stream=r_frame_rate -of json inputFile
统计视频帧率
参考资料
ImageMagick
mogrify -format jpg *.webp
# 批量格式转换,转换webp格式为png格式