记一件好事: "帮我把这个视频发到微信群里"

2017-04-05 21:50:47 +08:00
 banxi1988

2 号下午,老婆拿着一台手机跑过来跟我说,"为什么这个视频发不了微信? " 在她演示给我看的时候,我知道了可能的原因.微信提示"导入失败", 但是实际原因是可能视频过大. 找到要发送的文件一看大小,居然有: 2.48G, 虽然只有 19 分钟左右的长度. 然后我就有了把这个视频发送到微信群上的任务. 不过还好不是修电脑,我想我应该可以搞定.

  1. 先把视频传输到电脑上 开始尝试使用蓝牙来传,但是半天没有响应. 然后还是打开开发者模式(用完之后记得关闭) 使用 adb 来传. adb pull /storage/emulated/0/DCIM/Camera/20170402_151526.mp4 (其实 adb pull 也不怎么快)

  2. 初尝 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 的就差不多了. 但是试了几个参数都差强人意.

  3. 换用 QuickTime Player 导出有惊喜 这个时候我想起,好像 QuickTime Player 好像也支持将视频导出成小格式. 于是试了下, 选择导出成 480p, 令我很意外的是,从原来的 2.48 G 的视频导出成 480p 的视频,只花了 1 分钟左右的时间 , 最后导出的大小是 大概 500 多 M mov 格式视频.,比 ffmpeg 快多了.

  4. 使用 ffmpeg 再压缩 然后再将 QuickTime Player 导出的 mov 格式的视频用 ffmpeg 再压缩一下. ffmpeg -i 20170402_151526.mov -vcodec libx264 -preset slow 15153.mp4 这个压缩之后只有 100 M 左右了. 查了下微信的限制大概是 25M. 但是再压的话也压不到 25M 以下,毕竟有 19 分钟的长度. 然后我想着把这个视频分 5 段输出.

  5. 视频旋转 分段之前先将原来横屏的视频,翻转 90 度. ffmpeg -i 15153.mp4 -vf rotate=PI/2 15153_r.mp4

  6. 使用 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

  7. 将各分段视频推送到手机上 adb push vp{0,1,2,3,4}.mp4 /sdcard/

推送到手机上是因为没有 WiFi, 需要使用手机流量来发送.(还好我流量够用)

7089 次点击
所在节点    程序员
32 条回复
chanssl
2017-04-05 22:10:13 +08:00
为什么要用 adb 来拉文件。。。 MTP 不好么
ys0290
2017-04-05 22:42:26 +08:00
USB 插到电脑上看不到存储盘吗?
Arrowing
2017-04-05 22:45:34 +08:00
我上次也遇到类似的问题,结果我发了个在线视频地址过去就完事了。。。
2333333333333
如果是本地视频,可以上传到第三方视频平台吧。
Athrob
2017-04-05 22:46:07 +08:00
为什么不传到腾讯视频再分享?
xspoco
2017-04-05 22:47:41 +08:00
微信视频的时长最长是多少。。
orzfly
2017-04-05 22:48:39 +08:00
@chanssl #1
1. OS X 并不支持 MTP ,虽然可以装 Google 官方的 https://www.android.com/filetransfer/ 应用来传输 MTP
2. MTP (对我而言)很不稳定(——看个人使用情况,不用讨论)
hundan
2017-04-05 22:49:50 +08:00
其实,能不能 ffmpeg 再 quicktime 再 ffmpeg 再 q 再 f …重复执行
manhere
2017-04-05 22:51:44 +08:00
安卓手机的话可以弄个 ES 文件管理器,用 FTP 方式管理文件
nicevar
2017-04-05 22:51:54 +08:00
那天下午,老婆跟几个闺蜜在家看综艺节目,突然跑过来跟我说,“ xxtv 这个要会员才能看呢”,我一看是有预览时间的,应该可以搞定
1.直接 adb connect 192.168.2.105:5555 连上电视
2.接着 adb shell tcpdump -p -vv -s 0 -w /sdcard/video.pcap 进行抓包,切换一下视频清晰度之后中断
3.然后 adb pull /sdcard/video.pcap ,用 wireshark 打开过滤 http 协议竟然直接找到几个 m3u8 地址
4.打开一个原来的 DLNA 测试工程,代码中写死播放地址,然后运行选择电视直接 push 过去让她们先看着,但是这样每个视频搞一次不是累死?
5.趁她们看电视的时候直接从系统找到那个 apk ,发现除了混淆外没做什么安全防护,反编译之, java 和 smali 各一份
6.在 java 代码中分析播放器模块播放进度逻辑部分,很快找到一个 progress 的回调跳转判定
7.再到 smali 文件定位这个地方,修改跳转逻辑重新打包安装测试没发现问题,速替换掉电视上的包,真是神不知鬼不觉,但是 who care?
速速回到书房发现世界之树已经被拆了,竟然扣了 14 分!!!冲了一个月的分啊
ichubei
2017-04-05 22:53:17 +08:00
上传到优酷 发视频链接最简单
banxi1988
2017-04-05 23:00:22 +08:00
@Arrowing
@Athrob
@ichubei
考虑到是一个比较私密的视频,不方便放到这些视频网站.
helixzz
2017-04-05 23:04:05 +08:00
@nicevar 这个才是最强的……
kassadin
2017-04-06 00:18:49 +08:00
我可能做的是假 Android 开发
ryd994
2017-04-06 02:10:43 +08:00
你这个参数当然慢了
ffmpeg -i 20170402_151526.mp4 -vcodec libx264 -preset slower -crf 28 -acodec libmp3lame -ab 128k 15151.mp4
faster 以下压缩效果都差不太多,时间就要爆炸了
而且你这里也没降分辨率啊, 480p 没多少的
crf28 也有点过了,默认 23 ,其实 20 都能看的
音频不要 mp3 , aac 才是标准
NoAnyLove
2017-04-06 04:19:34 +08:00
adb pull 虽然慢,但是稳定啊
msg7086
2017-04-06 04:52:27 +08:00
压片不用 Handbrake ?
Valyrian
2017-04-06 06:10:51 +08:00
@ryd994 crf 是数字越小画质越好。。
ryd994
2017-04-06 06:43:48 +08:00
@Valyrian 是我记错了……
我就是记得比默认设置更差的 crf 其实编码出来也不是不能看而已
xeis
2017-04-06 07:38:50 +08:00
这是顺手破解了 xxtv 的会员啊。。。
21grams
2017-04-06 08:42:16 +08:00
一个格式工厂就能搞定的事。。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/352770

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX