中国建筑总公司网站,wordpress仿朋友圈,制作一个软件,网站品牌词如何优化视频格式#xff1a;mkv#xff0c;flv#xff0c;mov#xff0c;wmv#xff0c;avi#xff0c;mp4#xff0c;m3u8#xff0c;ts等等 FFmpeg的转码工具#xff0c;它的处理流程是这样的#xff1a;
从输入源获得原始的音视频数据#xff0c;解封装得到压缩封装的音…视频格式mkvflvmovwmvavimp4m3u8ts等等 FFmpeg的转码工具它的处理流程是这样的
从输入源获得原始的音视频数据解封装得到压缩封装的音视频包对音视频包进行解码得到原始的音视频帧对原始音视频帧进行后期特效处理对处理后的音视频帧重新进行编码封装得到处理后的音视频包对重新编码封装的音视频包进行封装输出音视频文件或直播推流 主要的编解码类型包括H.264, H.265, VP8, VP9, MPEG-2, AAC, MP3, AC-3等。 主要的封装Mux/Demux类型包括flvavirmvbmp4movmkvtsm3u8等
在FFmpeg中有些基本概念 1、容器Container在这里它是指一种文件格式如flvmkv等 2、流Stream在这里是指视频数据信息的传输方式常见的有5种音频 3、帧Frame在这里指的是一张静止的图像它分为I、P、B三种帧 4、编解码器Codec可以对视频进行压缩、解压缩 5、复用/解复用Mux/Demux把不同的流按照某种容器的规则放入容器称为复用把不同的流从某种容器中解析出来称为解复用 6、帧率帧频率指的是视频文件中每一秒的帧数人的眼睛如果想要看到连续移动的图像每秒至少需要15帧。 7、码率bitrate per second bps又叫比特率是指每秒处理的比特数用于衡量视频或音频质量的一个参数。码率越高视频质量就越高。
ffmpeg命令工具的使用
常见参数介绍
-i指定输入流如文件、网络媒体流-f指定输出格式如mp4flvmkvtsimage2gif-ss指定截取视频片段的开始时间-t指定截取视频片段的时长单位是秒-b指定视频码率默认是200kb/s-r指定帧率默认是25-s指定画面的宽度和高度e.g -s 1080x720-aspect指定画面的比例-vn不处理视频将视频流过滤掉-vcodec指定视频编码器若未指定则使用与输入流相同的编码器-vcodec copy表示复制输入流的编码器-ar指定采样率常见采样率220504410048000-ac指定声道数-acodec指定声音编码器若未指定则使用与输入流相同的编码器-acodec copy表示复制输入流的声音编码器-target type指定目标文件类型VCDSVCDDVDDVDV50 type可以带上pal-ntsc-film-等前缀以便能够使用相应的标准-ps指定RTP负载数据的字节数默认为0
例子
// MP4 转 TS音频和视频都不用重新编码使用输入流的就行封装格式从MP4转换成TS
ffmpeg -i input.mp4 -acodec copy -vcodec copy -f mpegts output.ts
// 下面这个命令与上面的命令等价-c copy表示音频和视频都不用重新编码直接复制输入流的编码
ffmpeg -i input.mp4 -c copy -f mpegts output.ts// MP4 转 TS音频和视频都不用重新编码使用输入流的就行封装格式从MP4转换成TS如果output.ts已存在就直接覆盖旧文件
ffmpeg -i input.mp4 -acodec copy -vcodec copy -y output.ts// avi转gif
ffmpeg -i input.avi output.gif// avi转gif,从第6秒开始共截取20秒数据
ffmpeg -ss 6 -i input.avi -t 20 output.gif// avi转dv,标准的数字化PAL电视标准的分辨率为720x576帧率25.因此 -s pal 就是 -s 720x576 -r pal就是-r 25
ffmpeg -i input.avi -s pal -r pal -aspect 4:3 -ar 48000 -ac 2 -y output.dv// avi 转 DVD 音频和视频都不用重新编码使用输入流的就行封装格式从MP4转换成TS
ffmpeg -i input.avi -target pal-dvd -ps 1000000000 -aspect 16:9 output.mpeg视频缩略图
1、生成所有帧的视频缩略图
// %06d.jpg输入文件的格式这里指定6位数字范围是000001.jpg999999.jpg
ffmpeg -i input.avi -f image2 %06d.jpg2、指定缩略图的宽和高为防止出现图片变形应尽量保持原来视频中的宽高比。
// %06d.jpg输入文件的格式这里指定6位数字范围是000001.jpg999999.jpg
ffmpeg -i input.avi -f image2 -s 1024x768 %06d.jpg3、指定时段的视频缩略图
// 视频前5秒的缩略图
ffmpeg -i input.avi -t 5 -f image2 %06d.jpg
//视频第30开始到第50秒结束的缩略图
ffmpeg -i input.avi -ss 0:0:30 -to 0:0:50 -f image2 %06d.jpg4、指定缩略图提取速率
// 这里的-r 1表示每秒提取一张缩略图-y表示覆盖同名文件
ffmpeg -i input.avi -r 1 -f image2 -y %06d.jpg5、指定帧数的缩略图
// 提取视频前20帧的视频缩略图
ffmpeg -i input.avi -vframes 20 -f image2 -y %06d.jpg// 提取视频前20帧的视频缩略图,格式为gif
ffmpeg -i input.avi -vframes 20 -f gif -y output.gif拼图成视频
前面我们使用了ffmpeg将视频生成了很多单张的图片同理它也可以将大量的单张图片拼接成一个视频。为了方便将图片拼接成视频我们需要对图片名字进行一下预处理文件名用数字将其次序标记出来我们可以通过用文件重命名的方式来完成。 如有以下这些图片 000001.jpg 000002.jpg 000003.jpg … 000010.jpg 000011.jpg 000012.jpg … 000100.jpg 000111.jpg 000112.jpg … 001000.jpg 001111.jpg 001112.jpg
// %06d是数字占位符ffmpeg会按次序加载000001.jpg001112.jpg图片注意1.jpg是无法匹配的。
ffmpeg -f image2 -i %06d.jpg -s 640x480 output.mp4上面的命令如果没有指定其他参数那么那些参数都会用默认值如帧率25帧每秒使用H.264编码等。
调整帧率,让其每秒拼接10张图片如果不指定的话它就是每秒拼接25张图片
ffmpeg -r 10 -f image2 -i %06d.jpg -s 640x480 output.mp4-r 10放在-i %06d.jpg的前面和后面的意思是不一样的如上面它是每秒拼接10张图片如果放后面如下面所示则表示输出视频的帧率是10帧每秒但是输入的还是默认的25帧每秒。
ffmpeg -f image2 -i %06d.jpg -r 10 -s 640x480 output.mp4调整输出视频的码率
ffmpeg -r 10 -f image2 -i %06d.jpg -b:v 4M output.mp4-b:v表示Bitrate of Video一般来说如果原始图片比较大使用默认参数生成的视频都会比较大所以我们可以适当调整一下码率。但是要清楚一点那就是高码率不意味着就一定高清晰这取决于使用的视频编码格式如H.265编码可以用更小的码率生成H.264同等的视频质量。 调整视频质量 ffmpeg有一个参数可以用来平衡视频质量和文件大小的参数-crf Constant Rate Factor取值范围是051取值越大内容损失越大视频质量也就越差这个参数的默认值是23推荐值1728
ffmpeg -r 10 -f image2 -i %06d.jpg -crf 30 -y output.mp4调整视频的编码 -c:v Codec of Video通过这个参数来指定新的编码ffmpeg对MP4的封装一般默认使用H.264编码根据上述提到的码率与视频清晰度的关系我们要以使用H.265来代替H.264来获得同等质量的视频的同时还可以减少视频文件大小
ffmpeg -r 10 -f image2 -i %06d.jpg -c:v libx265 -y output.mp4libx265, libx264这些编码库需要在ffmpeg使用它们之间集成进来。
调整视频的分辨率
ffmpeg -r 10 -f image2 -i %06d.jpg -s 640x480 -y output.mp4我们用上面的命令直接将视频分辨率调整为640x480 但是如果原始图片不是4:3就会出现图像被拉伸所以我们可以用下面的命令使其可以等比例缩放 -vf scale Video Filter Scale
ffmpeg -r 10 -f image2 -i %06d.jpg -vf scale-1:480 -y output.mp4-vf scale-1:480 的意思是高度定为480而宽度则等比例缩放反之-vf scale640:-1 宽度定为640而高度则等比例缩放