2 号下午,老婆拿着一台手机跑过来跟我说,"为什么这个视频发不了微信? " 在她演示给我看的时候,我知道了可能的原因.微信提示"导入失败", 但是实际原因是可能视频过大. 找到要发送的文件一看大小,居然有: 2.48G, 虽然只有 19 分钟左右的长度. 然后我就有了把这个视频发送到微信群上的任务. 不过还好不是修电脑,我想我应该可以搞定.
先把视频传输到电脑上
开始尝试使用蓝牙来传,但是半天没有响应. 然后还是打开开发者模式(用完之后记得关闭) 使用 adb 来传.
adb pull /storage/emulated/0/DCIM/Camera/20170402_151526.mp4
(其实 adb pull 也不怎么快)
初尝 ffmpeg 压缩
用手机拍的原始视频,由于没有压缩过体积都很大. 首先我想到用 ffmpeg 来压缩一下.
ffmpeg -i 20170402_151526.mp4 -vcodec libx264 -preset slower -crf 28 -acodec libmp3lame -ab 128k 15151.mp4
执行这条命令大概过了一个小时压缩完成,压缩到了 500 多 M,我看了下效果,肉眼看起来没什么差别. 但是还是太大了.然后想着,换用其他参数再试,感觉太慢了, 我想直接在 15151.mp4 这个结果之上再压缩. 首先原来的分辩率是 1920 x1080 发微信用不了这么大,发 480p 的就差不多了. 但是试了几个参数都差强人意.
换用 QuickTime Player 导出有惊喜 这个时候我想起,好像 QuickTime Player 好像也支持将视频导出成小格式. 于是试了下, 选择导出成 480p, 令我很意外的是,从原来的 2.48 G 的视频导出成 480p 的视频,只花了 1 分钟左右的时间 , 最后导出的大小是 大概 500 多 M mov 格式视频.,比 ffmpeg 快多了.
使用 ffmpeg 再压缩
然后再将 QuickTime Player 导出的 mov 格式的视频用 ffmpeg 再压缩一下.
ffmpeg -i 20170402_151526.mov -vcodec libx264 -preset slow 15153.mp4
这个压缩之后只有 100 M 左右了. 查了下微信的限制大概是 25M. 但是再压的话也压不到 25M 以下,毕竟有 19 分钟的长度. 然后我想着把这个视频分 5 段输出.
视频旋转
分段之前先将原来横屏的视频,翻转 90 度. ffmpeg -i 15153.mp4 -vf rotate=PI/2 15153_r.mp4
使用 ffmpeg 分段.
for ((i=0;i<5;i++)); do ffmpeg -ss $((i * 230)) -i 15153_r2.mp4 -c copy -t 230 vp$i.mp4; done;
我这里使用了一个 for 循环,其实也可以不用循环,多执行几次就 OK 了.
比如第一段: -ss 0
参数后面表示偏移时间为 0(秒), -t 230
表示时长 230 秒.
ffmpeg -ss 0 -i 15153_r2.mp4 -c copy -t 230 vp1.mp4
将各分段视频推送到手机上
adb push vp{0,1,2,3,4}.mp4 /sdcard/
推送到手机上是因为没有 WiFi, 需要使用手机流量来发送.(还好我流量够用)
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.