一、引言
近日,用moviepy扩展库处理视频,遇到一个奇怪的现象,手机竖屏拍的视频,到了电脑上播放没问题,但用moviepy处理之后,保存的视频就变了,从瘦高哥咋变成矮胖哥了?
环境:64位Win 10中文版 + 64位Python 3.6.5 + 64位Office 2010
《Python程序设计(基于计算思维和新文科建设)》,ISBN:9787121435577,胡凤国,电子工业出版社,2022年6月。本书是电子工业出版社在国内较早采用纸质版+电子版的创新图书发行模式的第一次尝试。本书是这套创新图书的纸质版部分,与之内容互补的电子版图书将稍后出版。基础篇介绍Python程序设计的入门知识,共12章,包括:⑵ Python软件的安装和Python程序运行;⑶ Python的基本概念(对象、数据类型、表达式、内置函数);排错篇总结初学者常遇到的错误并介绍程序调试方法,包含2章:与本书内容互补的电子版图书包含文本篇和应用篇两部分:文本篇:介绍字符集、编码和文本文件读写的知识,包含了对国家规范《通用规范汉字表》8105个汉字当中难以输入和难以显示的汉字的处理。应用篇:介绍Word、Excel、PPT、PDF、图片等常用办公文件的处理,是大家提高办公和科研效率的好帮手。本书配套有详细的PPT和教学大纲,还有全部例题的程序代码和绝大部分思考题的程序代码。本书配套PPT里面还加入了配套电子版图书中的部分内容,比如字符集和编码,不同编码的文本文件的读写,Word、Excel、PPT、PDF等一些常用办公文件的读写。1、大学文科生, 可选本书当Python教材或自学Python的参考书。2、大学理工科学生, 可选本书当自学Python的参考书。可拿本书当工具书,本书的配套程序会为您节省效率,在当前大数据和新文科的背景下,本书可以为相关领域的量化研究提供技术支持。本书配套的电子版图书中的编码和文本处理知识也可以作为理工科教师和科研人员处理文本数据的参考资料之一,毕竟专门开辟章节介绍国家标准《通用规范汉字表》汉字处理的程序设计图书并不多见。
本书有专门的海龟画图章节,有大量的有趣数学题目,可以培养学生的计算思维,适合对编程感兴趣的中小学生阅读,也适合打算让娃参加编程辅导班的家长朋友参考。本书在各大实体书店和网店均有销售。京东、天猫、当当的购买渠道如下(可扫码直达购买页面)。
三、问题说明
后来,想用moviepy转换成wmv格式,就写了如下的代码:

瘦高个子的视频怎么变成矮胖个子了?估计视频中的演员滚滚同学第一个不乐意了:我胖胖胖,也不至于胖的这么夸张吧?赶紧给我恢复成瘦高个吧。
这很奇怪啊,明明在Win 10中播放的时候就是瘦高个子的视频,跟手机上播放效果一样,为啥用moviepy转换一下视频格式,就变成矮胖个子了?代码就这么三四行,不至于有猫腻吧?仔细看下来,还真有猫腻,不是代码的猫腻,是照片的猫腻。我们在Win 10中鼠标点右键看MP4视频的属性,切换到详细信息选项卡,发现视频的宽度和高度很诡异:
宽×高=1280×720。从这个宽高数据来看,这不就是矮胖个子的视频嘛?可是,在Win 10中为啥播放的时候是瘦高个子呢?另外,手机上竖屏拍摄视频的时候,也是瘦高个子嘛。为啥一看属性就变成了矮胖个子了?还有一个好玩的就是,把这个视频复制到Win 7的电脑上,用Windows Media Player播放器播放一下,发现视频画面居然整体逆时针旋转了90度。效果如下:从Win 7上看,这还真是矮胖个子的视频。可是,在Win 10下,同样用Windows Media Player播放器播放,效果就是瘦高个子的视频呢?或许,矮胖个才是它的真面目,瘦高个是Win 10包装出来的。那么,问题来了,到底是什么原因使得这个手机拍的瘦高个视频传到电脑上以后变成了矮胖个视频呢?情况真的复杂,我们不得而知,后来做了很多实验,手机上竖屏拍的瘦高个视频,转到电脑上居然都还是瘦高个,宽度比高度小。探讨原因估计比较麻烦,现在的问题是:我们能不能解决这个瘦高个变矮胖个的问题?要不然,用moviepy生成的视频有宽高混乱的,怎么能让人放心使用呢?如何在使用moviepy时避免这样的瘦高个变矮胖个的问题,目前还在探索中,若有知道解决方案的同学或读者朋友,欢迎指教。四、来自FFmpeg的解决方案
虽然暂未找到moviepy的解决方案,但不用moviepy的话,问题倒很好解决,救星就是伟大的FFmpeg。FFmpeg是一个命令行的音视频处理工具,用它来进行视频格式转换最方便不过,它转换的视频,不存在瘦高哥变矮胖哥的问题。FFmpeg主页在https://ffmpeg.org/,在这里我们下载FFmpeg,解压缩,把ffmpeg.exe所在的目录添加到系统环境变量Path中。然后我们打开Windows的命令行窗口,将当前目录切换到test.mp4所在的目录,转为wmv格式可以运行如下的命令:ffmpeg -i test.mp4 result.wmvOK,搞定,生成的result.wmv依然是瘦高哥,不再是矮胖哥了。五、联系交流
由于本号文章以辅助教学为主,笔者不建议自己的学生直接拿代码运行,而是建议在理解了思路之后自己敲代码来加深印象,所以本号一般不直接贴代码。如果其他读者朋友有需要代码,请关注本号,加笔者微信联系。欢迎关注微信公众号“语和言”,本公众号将不定期发布对图书《Python程序设计(基于计算思维和新文科建设)》中的Python知识点进行解读和补充的内容。语和言公众号还有读者交流群,读者朋友可以入群一起讨论问题。
欢迎跟图书《Python程序设计(基于计算思维和新文科建设)》的作者胡凤国老师进行交流,电邮:cuchufengguo@163.com。
六、图书目录
图书《Python程序设计(基于计算思维和新文科建设)》目录如下(手机端可以用手指上下滑动下面灰色区域的文字来查看全部目录,电脑端可以用鼠标滚动滚轮或拖动下面文本框右边的滚动条来浏览全部目录):
8.2.4 关于元素可比较的有序序列类对象的通用操作10.3.3 用上下文管理语句with来管理文本文件读写12.12.1 datetime标准库定义的常用类参考文献