大家好:
我是烤鸭。最近在搞视频体验优化脑袋大。再搞能搞过阿b和某音么。
查看基本信息
ffprobe 1.mp4
输出结果:
Duration: 00:02:33.37, start: 0.000000, bitrate: 3104 kb/s
Stream #0:0[0x1](eng): Video: h264 (High) (avc1 / 0x31637661), yuv420p(progressive), 1280x720 [SAR 1:1 DAR 16:9], 2999 kb/s, 30 fps, 30 tbr, 15360 tbn (default)
时长:2分33秒,码率:3104kb/s,编码格式:h264,分辨率 1280*720,帧率 30fps
查看视频头文件大小
ffprobe -v trace -i 1.mp4
type:'mdat' parent:'root' sz: 59357245 167556 59524793
中间那个值就是头文件大小 167556/1024 = 163KB
视频处理
从 00:00:05 开始,持续5秒。
ffmpeg -ss 00:00:05 -i ./source.mp4 -to 00:00:05 ./target.mp4
从 00:00:05 到 00:00:10。
ffmpeg -ss 00:00:05 -to 00:00:05 -i ./source.mp4 ./target.mp4
mp4转码flv
ffmpeg -y -i ./source.mp4 -crf 20 -vf scale=1080:-1 -c:v libx264 -r 25 -b:v 3000k -b:a 128k ./target-transcode.flv
crf:固定码率因子
vf:视频滤镜
scale:缩放(1080:-1 表示 高度等比例缩放,使得宽度为 1080 像素)
-c:v :编码器(上面表示使用 libx264 编码)
-r:提取图像的频率
-b:v :码率(3000K)
-b:a :音频码率(128K)
flv转码普通mp4
ffmpeg -y -i .\target-transcode.flv -c:v copy -c:a copy .\target-transcode.mp4
flv转码fragment mp4
ffmpeg -y -i .\target-transcode.flv -c:v copy -c:a copy -strict -2 -movflags frag_keyframe+empty_moov .\target-transcode.mp4
movflags:添加快速启动
frag_keyframe:在每个关键帧都开始一个新的碎片
empty_moov:写入一个空的moov atom到文件开始,而没有任何样品描述
strict:[0,51] (实验参数,2表示 aac音频编码)
视频分割片段
ffmpeg -y -i .\source.mp4 -c copy -map 0 -f segment -segment_time 10 -segment_list .\playlist.csv -reset_timestamps 1 -movflags frag_keyframe+empty_moov -segment_format mp4 .\segment\output%03d.mp4
segment_time:片段时长
segment_list:输出到文件(playlist.csv)
reset_timestamps:1|0 在每个段都重新开始时间戳。所以每个段都有接近于0的时间戳。这有利于片段的播放,但很多混合器/编码器不支持, 默认为0