[求助] ffmpeg 转码失败

2014-09-14 10:06:03 +08:00
 zeayes
日志太长,详细内容: https://gist.github.com/zeayes/44b12d42c30020574135

原始视频: http://pan.baidu.com/s/1mgIBxgO

目前情况是这样的:
1、ffmpeg读取视频就失败了,用ffprobe查看视频信息,其中SAR -1:1 DAR -71:40,应该是这2个值有负数导致读取失败。
2、用MPLAYER是可以直接播放的,QUICK TIME需要转码才能播放。
3、MPLAYER播放的视频画面是倒的,QUICK TIME转码后是画面正常的。
4、尝试过avconv和mencoder,都会转码失败。
5、QUICK TIME转码后的视频信息中的encoder信息乱码了,用谷歌也没找到。。。

是不是ffmpeg缺少MPLAYER和QUICK TIME解码视频的某个库?
PS:MPLAYER是brew安装的,查看起FORMULA,编译选项没看到和视频解码相关的库?
7345 次点击
所在节点    FFmpeg
26 条回复
icylord
2014-09-14 11:07:24 +08:00
如果用 mplayerx 或者 movist 播放正常不
DylanRing0
2014-09-14 12:25:01 +08:00
在Windows上用FFMS导入视频走x264转码OK
AVS如下:
LoadPlugin("D:\Program Files (x86)\PressTools\MeGUI_2418_x86\tools\ffms\ffms2.dll")
FFVideoSource("D:\recordUnity3D.mov", fpsnum=29853, fpsden=1000, threads=1)
Turn180()
FlipHorizontal()
输出视频(已用mmg合并音频):
https://onedrive.live.com/redir?resid=D4FF896B9B126B5!478&authkey=!AFkla6JCqWJBBK8&ithint=file%2cmkv
DylanRing0
2014-09-14 12:28:03 +08:00
在非Windows平台做这种事,还是开个Wine跑AVS用Windows的那套方法吧
这里头坑太多,稍有不慎就被坑
seki
2014-09-14 13:13:14 +08:00
谁写的负数的 sar 和 dar………

用封装工具比如 mkvtoolnix 换成正的再去转码吧……
zeayes
2014-09-14 16:50:12 +08:00
@DylanRing0 难道是差什么解码库?
zeayes
2014-09-14 16:51:03 +08:00
@icylord QUICK TIME、MPLAYER和VLC都可以播放,就是FFMPEG转码失败。
zeayes
2014-09-14 16:51:42 +08:00
@seki FFPROBE读到的负数。。。
seki
2014-09-14 17:24:36 +08:00
@zeayes 所以是说一般人不会这么写负数的吧 - -
你那边有 mediainfo 吗,它是怎么显示信息的?
zeayes
2014-09-14 20:30:08 +08:00
@seki 你看下上面最后一个gist文件。
msg7086
2014-09-14 20:54:22 +08:00
有没有手动指定sar/par的功能?
seki
2014-09-14 21:25:02 +08:00
@zeayes 哦,看到了,自己试了一下的确 ffmpeg 无力,但是发现用 x264 (win32 jeeb 编译版)是能顺利视频转码的
zeayes
2014-09-14 22:02:41 +08:00
@msg7086 ffmpeg读不了这个视频,设置不了sar/par。
zeayes
2014-09-14 22:03:21 +08:00
@seki 我在OSX上编译里面加了x264库的。。。
seki
2014-09-14 22:09:09 +08:00
@zeayes 我知道,我只是把我这边的情况告诉你。个人感觉并不是 libx264 不支持负数的 sar 和 dar
ctexlive
2014-09-15 01:18:06 +08:00
我觉得可以用mencoder解码,再用ffmpeg播放,或者干脆用mencoder编码。
ctexlive
2014-09-15 01:18:30 +08:00
我觉得可以用mencoder解码,再用ffmpeg编码,或者干脆用mencoder解编码。
ctexlive
2014-09-15 05:58:19 +08:00
---------------方法
mencoder -flip -ofps 29.853 -ovc x264 -ffourcc H264 -x264encopts bitrate=800:threads=auto -oac faac -faacopts br=64 -channels 2 -o temp.avi recordUnity3D.mov
ffmpeg -i temp.avi -acodec copy -vn temp.aac
ffmpeg -i temp.avi -vcodec copy -an temp.h264
MP4Box temp.mp4 -add temp.h264 -fps 29.853 -add temp.aac
----------------
zeayes
2014-09-15 13:05:23 +08:00
@ctexlive 早上在弄,弄好了整理一份文档,非常感谢!
ctexlive
2014-09-15 14:42:33 +08:00
-flip 是让你的视频翻转回来.你的视频本身就是倒的
ctexlive
2014-09-15 14:51:47 +08:00
mencoder只能导出avi,这个avi只有mplayer才能支持.必须音视频轨道分离后再封装成其他格式(mp4,mkv).
选择ffmpeg分离是因为速度快且兼容性好. 不建议用mencoder和mplayer分离(有点兼容性问题).
封装mp4最好用mp4box或者MP4cteater,最标准,兼容性好. (用ffmpeg和mencoder也能封装mp4,不推荐)

注意为了保证音视频同步,一定要注意必须指定 帧率.(mencoder的 ofps 和 mp4box的 -fps).

ps. 其实还有一个更方便的gui编码工具,https://handbrake.fr/ 专门制作mp4和mkv的视频. 编码速度相比mencoder稍微慢点点.

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

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

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

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

© 2021 V2EX