手机摄像模组越做越好用了,但录制的视频也越来越大了。最近新换一手机,最高支持8K60P录制,但录好了现在也没设备播放。目前也就显示器是4K分辨率,最适合的还是录制4K60P,看了60fps加上防抖的视频再看以前录的普通30fps的视频差距就太大了。视频的质量上来了大小也上来了。x264编码的4K60P视频默认码率是100mbps,改成x265编码后也是50mbps,稍微录长一点文件就上GB了,再大的手机空间都不够装。

以前手机录制的视频也有这个问题,但前几年一般都是1080p@30fps视频,手机屏幕也是1080p左右,把原视频拷贝到电脑上,自己用ffmpeg重新压制一下,再放回手机里面就可以。一般用x264 4mbps压完在手机上看和原视频没啥区别。现在变成4K60P,为了尽量减小体积得用x265压,压起来也慢多了。

最后经过调试发现在2K分辨率的手机屏幕上4K60P的视频用x265 8mbps左右的码率看起来比较合适。用默认的medium就行,但x265的profile没有high,只有main,main10是针对10bit的视频,用不上。如果直接用 profile=main:level=5.1会报错,但用profile=high:level=5.1反而会通过,最后压完看视频信息仍然是Format profile : Main@L5.1@Main。

发一个自己用的批处理压制代码,为节约空间,用了x265,两次编码,音频128kbps就行。

if not exist converted (md trans)
for %%g in (*.mp4) do (
ffmpeg -y -i "%%g"  -c:v libx265 -x265-params "profile=high:level=5.1" -b:v 8M -maxrate 16M -bufsize 8M  -pass 1 -an -f mp4 NUL
ffmpeg -i "%%g"  -c:v libx265 -x265-params "profile=high:level=5.1" -b:v 8M -maxrate 16M -bufsize 8M  -pass 2 -c:a aac -b:a 128k "trans\%%~ng_trans.mp4"
)
rem delete ffmpeg temp files
del ffmpeg2pass*
exit /b 

上面是cmd版本的,因为压得比较慢,有时我也把视频丢到linux服务器上,linux版本的批处理代码如下:

#!/bin/bash -e
for i in *.mp4;
do 
	ffmpeg -y -i "${i%.*}.mp4" -c:v libx265 -x265-params "profile=high:level=5.1" -b:v 8M  -maxrate 16M -bufsize 8M -pass 1 -an -f mp4 /dev/null && \
	ffmpeg -i "${i%.*}.mp4" -c:v libx265 -x265-params "profile=high:level=5.1" -b:v 8M  -maxrate 16M -bufsize 8M -pass 2 -c:a aac -b:a 128k "${i%.*}trans.mp4"
	rm ffmpeg2pass*
done

这样处理完后再把视频拷回手机,在手机上看效果和原来几乎一样,而文件大小可以减少80%以上。

标签: , ,

留下回复(本站有评论邮件通知功能)