FFMPEG 常用命令整理

MP4转ts


ffmpeg -i small_bunny_1080p_30fps.mp4  small_bunny_1080p_30fps.ts

 MP4转ts 不改变音视频编码格式

ffmpeg -i small_bunny_1080p_30fps.mp4   -c:v copy -c:a copy small_bunny_1080p_30fps.ts

MP4 转 vp9

ffmpeg -i small_bunny_1080p_30fps.mp4 -c:v libvpx-vp9 -c:a libvorbis small_bunny_1080p_30fps_vp9.webm

使用H.265 编码视频

ffmpeg -i small_bunny_1080p_30fps.mp4 -c:v libx265 small_bunny_1080p_30fps_h265.mp4

每一秒插入一个I帧(针对帧数为30帧的视频,其他帧数请调整参数

ffmpeg -i small_bunny_1080p_30fps.mp4 -c:v libx264 -x264-params keyint=30:min-keyint=30:no-scenecut=1 -c:a copy small_bunny_1080p_30fps_h264_keyframe_each_second.mp4

查看我们插入了多少个I帧

mediainfo --Details small_bunny_1080p_30fps_h264_keyframe_each_second.mp4 | grep "slice_type I" | wc -l

将视频平滑拆分,会根据关键帧的位置拆分,每两秒一个视频(如果关键帧间隔大于2秒,则拆分的视频也会大于2秒,可以每2秒插入一个关键帧(会增加文件大小)后再执行拆分

ffmpeg -fflags +genpts -i small_bunny_1080p_30fps.mp4 -map 0 -c copy -f segment -segment_format mp4 -segment_time 2 -segment_list video.ffcat -reset_timestamps 1 -v error chunk-%03d.mp4

合并平滑拆分的视频

ffmpeg -y -v error -i video.ffcat -map 0 -c copy output.mp4

生成只有一个I帧,剩下全是P帧的视频(主要用于测试,根据视频长度调整参数,这里的视频为10s 每秒30帧

ffmpeg -i small_bunny_1080p_30fps.mp4 -c:v libx264 -x264-params keyint=300:min-keyint=300:no-scenecut=1:bframes=0 -c:a copy small_bunny_1080p_30fps_single_I_rest_P.mp4

测试I,P,B帧的数量

mediainfo --Details small_bunny_1080p_30fps_single_I_rest_P.mp4 | grep "slice_type I" | wc -l

mediainfo --Details small_bunny_1080p_30fps_single_I_rest_P.mp4 | grep "slice_type P" | wc -l

mediainfo --Details small_bunny_1080p_30fps_single_I_rest_P.mp4 | grep "slice_type B" | wc -l

使用CAVLC(熵编码的一种,相较于CABAC更快,当然视频会更大)编码视频

ffmpeg -i small_bunny_1080p_30fps.mp4 -c:v libx264 -x264-params keyint=30:min-keyint=30:no-scenecut=1:no-cabac=1 -c:a copy small_bunny_1080p_30fps_h264_keyframe_each_second_CAVLC.mp4

使用CABAC编码视频

ffmpeg -i small_bunny_1080p_30fps.mp4 -c:v libx264 -x264-params keyint=30:min-keyint=30:no-scenecut=1:coder=1 -c:a copy small_bunny_1080p_30fps_h264_keyframe_each_second_CABAC.mp4

使用固定码率编码

ffmpeg -i small_bunny_1080p_30fps.mp4 -b:v 964K -minrate 964K -maxrate 964K -bufsize 2000K  small_bunny_1080p_30fps_transrating_964.mp4

使用编码率编码

ffmpeg -i small_bunny_1080p_30fps.mp4 -minrate 964K -maxrate 3856K -bufsize 2000K  small_bunny_1080p_30fps_transrating_964_3856.mp4

调整视频大小(不改变宽高比

ffmpeg -i small_bunny_1080p_30fps.mp4 -vf scale=480:-1 small_bunny_1080p_30fps_transsizing_480.mp4

提取音频(这里原始音频编码为aac,如果其他格式请自行调整音频编码器和输出格式

ffmpeg -i small_bunny_1080p_30fps.mp4 -vn -c:a copy small_bunny_audio.aac

音视频混合(音频叠加到视频

ffmpeg -i small_bunny_audio.aac -i /files/v/small_bunny_1080p_30fps.mp4 small_bunny_1080p_30fps_muxed.mp4

生成带YUV直方图的视频(相当于水印叠加,用于视频分析

ffmpeg -i small_bunny_1080p_30fps.mp4 -vf "split=2[a][b],[b]histogram,format=yuv420p[hh],[a][hh]overlay" small_bunny_yuv_histogram.mp4

将视频第一秒的视频提取为图片序列(跟帧率有关,30fps则生成30张图片

ffmpeg -y -i small_bunny_1080p_30fps.mp4 -t 00:00:01  smallest_bunny_1080p_30fps_%3d.jpg

使用单张图片生成一个10秒视频(采用默认帧率 25fps, 图片循环使用

ffmpeg -loop 1 -i smallest_bunny_1080p_30fps_001.jpg -c:v libx264 -pix_fmt yuv420p -t 10 frame_001.mp4

使用多张图片生成一个10秒视频(采用默认帧率 25fps,图片循环使用

ffmpeg -loop 1 -i smallest_bunny_1080p_30fps_%03d.jpg -c:v libx264 -pix_fmt yuv420p -t 10 from_images.mp4

生成一个单帧视频(只有一帧,用于视频分析

ffmpeg -i minimal.png -pix_fmt yuv420p minimal_yuv420.mp4
//默认采样yuv444
ffmpeg -i minimal.png  minimal_yuv444.mp4

使用图片生成视频(有几张图就有几帧画面,时长由图片的多少和帧率决定

ffmpeg -i solid_background_ball_%d.png -pix_fmt yuv420p solid_background_ball_yuv420.mp4

生成一个单帧的H264的比特流

ffmpeg -i minimal.png -pix_fmt yuv420p minimal_yuv420.h264

 查看H264的比特流数据

hexdump  minimal_yuv420.h264

ffmpeg制作gif

//1秒1帧 分辨率640x480
ffmpeg -r 1 -i test_%d.png -s 640x480 1.git

猜你喜欢

转载自blog.csdn.net/yunxiaobaobei/article/details/130090968