使用FFmpeg将MP4无损转图片序列并转回 实现60fps转30fps方案咨询
60fps MP4转30fps 一步无中间文件方案(最省空间)
无需额外存储中间图片或原始比特流,直接完成丢一半帧+无损输出操作,FFmpeg命令如下:
ffmpeg -i input_60fps.mp4 -vf "fps=30,format=yuv420p" -c:v libx264 -crf 0 -c:a copy output_30fps.mp4
参数说明:-crf 0 开启x264真无损编码模式,fps=30自动从60fps源中均匀丢弃一半帧,-c:a copy直接复制原音轨不做重编码
分步操作方案(满足提取帧+转码两个独立需求)
操作1:无损提取帧为图片序列
使用无损压缩格式PNG存储帧,占用空间远低于原始比特流方案,命令如下:
# 提前新建frames文件夹用于存储图片 ffmpeg -i input_60fps.mp4 -vf "select=mod(n\,2)==0" -vsync 0 frames/%06d.png
参数说明:select=mod(n\,2)==0 表示选取所有偶数帧,需要保留奇数帧可将==0改为==1,最终输出000001.png、000002.png依次排序的图片序列
操作2:图片序列无损转回30fps MP4
命令如下:
ffmpeg -framerate 30 -i frames/%06d.png -c:v libx264 -crf 0 -pix_fmt yuv420p output_30fps.mp4
参数说明:-framerate 30 指定输出视频帧率为30fps,-crf 0保证输出视频画质与提取的图片完全一致
注:若对体积有要求可将-crf 0调整为-crf 18,人眼几乎无法区分画质差异,文件体积会大幅缩小
内容的提问来源于stack exchange,提问作者Cinderella Costallas
相关产品推荐
相关产品推荐

