V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
zeayes
V2EX  ›  FFmpeg

[求助] ffmpeg 转码失败

  •  
  •   zeayes · 2014-09-14 10:06:03 +08:00 · 7347 次点击
    这是一个创建于 3754 天前的主题,其中的信息可能已经有所发展或是发生改变。
    日志太长,详细内容:

    原始视频: 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,编译选项没看到和视频解码相关的库?
    26 条回复    2014-10-18 01:17:19 +08:00
    icylord
        1
    icylord  
       2014-09-14 11:07:24 +08:00
    如果用 mplayerx 或者 movist 播放正常不
    DylanRing0
        2
    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
        3
    DylanRing0  
       2014-09-14 12:28:03 +08:00
    在非Windows平台做这种事,还是开个Wine跑AVS用Windows的那套方法吧
    这里头坑太多,稍有不慎就被坑
    seki
        4
    seki  
       2014-09-14 13:13:14 +08:00 via Android
    谁写的负数的 sar 和 dar………

    用封装工具比如 mkvtoolnix 换成正的再去转码吧……
    zeayes
        5
    zeayes  
    OP
       2014-09-14 16:50:12 +08:00
    @DylanRing0 难道是差什么解码库?
    zeayes
        6
    zeayes  
    OP
       2014-09-14 16:51:03 +08:00
    @icylord QUICK TIME、MPLAYER和VLC都可以播放,就是FFMPEG转码失败。
    zeayes
        7
    zeayes  
    OP
       2014-09-14 16:51:42 +08:00
    @seki FFPROBE读到的负数。。。
    seki
        8
    seki  
       2014-09-14 17:24:36 +08:00
    @zeayes 所以是说一般人不会这么写负数的吧 - -
    你那边有 mediainfo 吗,它是怎么显示信息的?
    zeayes
        9
    zeayes  
    OP
       2014-09-14 20:30:08 +08:00
    @seki 你看下上面最后一个gist文件。
    msg7086
        10
    msg7086  
       2014-09-14 20:54:22 +08:00 via iPhone
    有没有手动指定sar/par的功能?
    seki
        11
    seki  
       2014-09-14 21:25:02 +08:00
    @zeayes 哦,看到了,自己试了一下的确 ffmpeg 无力,但是发现用 x264 (win32 jeeb 编译版)是能顺利视频转码的
    zeayes
        12
    zeayes  
    OP
       2014-09-14 22:02:41 +08:00
    @msg7086 ffmpeg读不了这个视频,设置不了sar/par。
    zeayes
        13
    zeayes  
    OP
       2014-09-14 22:03:21 +08:00
    @seki 我在OSX上编译里面加了x264库的。。。
    seki
        14
    seki  
       2014-09-14 22:09:09 +08:00
    @zeayes 我知道,我只是把我这边的情况告诉你。个人感觉并不是 libx264 不支持负数的 sar 和 dar
    ctexlive
        15
    ctexlive  
       2014-09-15 01:18:06 +08:00
    我觉得可以用mencoder解码,再用ffmpeg播放,或者干脆用mencoder编码。
    ctexlive
        16
    ctexlive  
       2014-09-15 01:18:30 +08:00
    我觉得可以用mencoder解码,再用ffmpeg编码,或者干脆用mencoder解编码。
    ctexlive
        17
    ctexlive  
       2014-09-15 05:58:19 +08:00   ❤️ 1
    ---------------方法
    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
        18
    zeayes  
    OP
       2014-09-15 13:05:23 +08:00
    @ctexlive 早上在弄,弄好了整理一份文档,非常感谢!
    ctexlive
        19
    ctexlive  
       2014-09-15 14:42:33 +08:00
    -flip 是让你的视频翻转回来.你的视频本身就是倒的
    ctexlive
        20
    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稍微慢点点.
    zeayes
        21
    zeayes  
    OP
       2014-09-16 09:26:38 +08:00
    @ctexlive
    @seki
    @seki
    @seki
    @DylanRing0
    @icylord
    同事最后改的稍微修改了一下ffmpeg的源代码,简单地把这个问题处理了。
    ctexlive
        22
    ctexlive  
       2014-09-16 11:10:52 +08:00 via Android
    @zeayes 请问有patch吗?这个应该有用
    Akagi201
        23
    Akagi201  
       2014-10-07 20:04:38 +08:00
    @zeayes 怎么改的?
    zeayes
        24
    zeayes  
    OP
       2014-10-08 19:20:54 +08:00   ❤️ 1
    @Akagi201

    # libavutil/opt.c:188
    if (o->min > num && strcmp(o->name, "pixel_aspect") == 0) {
    num = abs(num);
    }
    keery
        25
    keery  
       2014-10-17 15:31:27 +08:00
    按你的方法可以把视频转换,但是转换后视频是倒着的,需要倒转,请问应该如何实现呢?
    zeayes
        26
    zeayes  
    OP
       2014-10-18 01:17:19 +08:00
    @keery

    -vf vflip
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1108 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 18:43 · PVG 02:43 · LAX 10:43 · JFK 13:43
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.