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