zoukankan      html  css  js  c++  java
  • 【转载】【重要】请高手指点ffmpeg和mencoder的一些简单问题

    这儿牛人多啊,来问一下
    我在使用ffmpeg和mencoder那些命令行编码程序时,遇到一些问题
    为什么ffmpeg用-ss和-t参数来截视频片段,然后封装为mp4格式,出现音画不同步的问题? 但如果封装成mkv,则不会不同步,但mkv的视频在最开始的第1帧是静止1段时间然后等大概音频到达的时候就开始同步播放了,大概等待0点几秒左右 因为现在我需要封装为mp4,所以有没有可以让mp4可以有mkv类似的处理方式呢?可以给出这样做法的详细参数吗? 还有ffmpeg的x264输入参数我想用x264opts输入一个字符串,里面有preset参数,另外还设定了其他的参数,但ffmpeg出现错误,总是说"maybe incorrect parameters",难道preset是不正确的参数吗? 但我用mencoder的x264encopts却可以输入preset作为字段
    还有mencoder也有些问题,我感觉mencoder编码出来的视频呈现出来的效果不是太符合我的眼睛,感觉有点生硬,ffmpeg出来的就不错,比较柔和 或许我习惯用的播放器mpc-hc里面的核心是ffdshow,与ffmpeg有比较多的关系吧,那么有滤镜可以做到ffmpeg输出的类似效果吗? 而且mencoder还有些bug,有些视频-ovc copy后出来的,居然有一些马赛克,一开始以为是帧速问题,但我调整过帧速,也没有任何改变, 总是在某个时间处出现一点马赛克,不是太多,但我用ffmpeg来转,同样时间段没有任何问题,这是为什么呢?
    希望大家帮忙,谢谢了...

     

    0

       
     
    • 岭上开花
    • zj262144
    • 98位粉丝
    • 四年级
      7
    •  

    2楼

    为什么ffmpeg用-ss和-t参数来截视频片段,然后封装为mp4格式,出现音画不同步的问题? ----------------------------------------------- 因为ffmpeg是分别截取video和audio的,video因为关键帧的缘故精确度受限较大,audio则能切割得精确得多,所以造成了这样的情况
    可以试下用mp4box切割

     

    3楼

    其实我想说的是,不用其他工具,只用ffmpeg能做吗?ffmpeg很多参数的吧,而且这问题只在mp4封装上出现,mkv上就第1帧是静止1段时间等待音频而后就同步的,我想让mp4也能像mkv那样的做法,参数复杂点也行,最重要的是我只能用命令行的ffmpeg

     

    4楼

    楼上说的办法很好,我以前也考虑过,这样不用让播放器或容器去支持什么audio delay, video delay之类的东西。不过这个需要改ffmpeg代码,官方应该不会采用这种东西,所以只能自己写自己编译了。

     

    5楼

    其实不需改动ffmpeg的代码吧 经过我的不断查找,终于发现了一个参数可以做到音画的同步,就是类似于mkv封装的做法,开始时暂停一会儿等待关键帧再音画同步播放的做法,当然这不太完美,但总算是做到了,就是-copyinkf参数(copy initial non-keyframes),就加上这个参数就可以了,很简单
    其实我就是想找个参数而已,什么自己写代码编译的,呵呵,我不太懂,官方的东西其实已经考虑到了,但往往ffmpeg参数太繁杂,没人会仔细地看

     
    • 岭上开花
    • zj262144
    • 98位粉丝
    • 四年级
      7
    •  

    6楼

    引用 Ash_Mood (5楼)

    其实不需改动ffmpeg的代码吧 经过我的不断查找,终于发现了一个参数可以做到音画的同步,就是类似于mkv封装的做法,开始时暂停一会儿等待关键帧再音画同步播放的做法,当然这不太完美,但总算是做到了,就是-copyinkf参数(copy initial non-keyframes),就加上这个参数就可以了,很简单 其...

    这样会有其他更严重的问题的
    你可以专门压个只有初始帧是IDR的视频,再用这个参数截取中间部分,再播放,就知道我说的是什么意思了

     

    7楼

    引用 zj262144 (6楼)

    这样会有其他更严重的问题的 你可以专门压个只有初始帧是IDR的视频,再用这个参数截取中间部分,再播放,就知道我说的是什么意思了

    这会出现什么问题呢?难道会花屏吗?我不知道怎样可以压个只有初始帧是IDR的视频,我真的不熟悉这些视频技术的名词。。。 不过这参数倒也是有一点问题的,当-ss参数放在-i输入文件之前(因为这样不用等待视频寻道),-copyinkf就失效了,一样不同步

     
    • 岭上开花
    • zj262144
    • 98位粉丝
    • 四年级
      7
    •  

    8楼

    ffmpeg -i "%~1" -vcodec libx264 -x264opts keyint=infinite:scenecut=0 -acodec copy -y "%~dpn1_.mp4"
    这样视频就只有第一帧是IDR了
    当然我这只是举了个极端的例子,用于说明截取时使用copyinkf可能引入的问题

     

    9楼

    引用 zj262144 (8楼)

    ffmpeg -i "%~1" -vcodec libx264 -x264opts keyint=infinite:scenecut=0 -acodec copy -y "%~dpn1_.mp4" 这样视频就只有第一帧是IDR了 当然我这只是举了个极端的例子,用于说明截取时使用copyinkf可能引入的问题

    我现在压制了一个第一帧是IDR的视频来测试,但截取再二次转换过后播放没发现有什么问题,截取的时间和秒数都很正确,也没什么花屏或不同步之类的问题 现在我知道你说的意思了(不知道是否准确),这个IDR帧后面的帧都是要依据其参考的,这种视频要拖动时间是很慢的,因为要从IDR帧到指定时间的所有帧都要重新处理,我觉得你说的问题就是第二次编码后加copyinkf后即使加ss参数也会总是从IDR帧开始播放,而不是从指定时间开始播放... 但我测试后,这样的问题并没有发生,除了编码时慢一些外(因为要重新处理IDR帧到指定时间的帧),其他都很好,没任何问题

     
    • 岭上开花
    • zj262144
    • 98位粉丝
    • 四年级
      7
    •  

    10楼

    引用 Ash_Mood (9楼)

    我现在压制了一个第一帧是IDR的视频来测试,但截取再二次转换过后播放没发现有什么问题,截取的时间和秒数都很正确,也没什么花屏或不同步之类的问题 现在我知道你说的意思了(不知道是否准确),这个IDR帧后面的帧都是要依据其参考的,这种视频要拖动时间是很慢的,因为要从IDR帧到指定时间...

    参数意思只是先这样编码出那样一个视频而已
    我的意思是这之后再截取
    ---- 重编码同时截取当然没问题,但是速度相当慢,并且还损失了质量,这样就损失了纯截取的意义了……当然你如果没问题的话就无所谓

     

    11楼

    哦,原来是这个意思,原来我是重编码了,现在我在那个视频上直接截取了,没重编码,发现视频黑屏了,音频则正常截取,不过我的大多数需求是二次转换而不是直接截取,这还能接受,不过这类视频确实很极端,应该很少见吧 那我想知道,如果在不重编码的情况下,按4楼的说法,就算改动ffmpeg的代码,也不可能对此类视频截取到的吧,就算是补帧,也会伤害视频的品质吗?

  • 相关阅读:
    回档|朴素的网络游戏
    回档|NOIP2010 关押罪犯
    回档|tyvj1091 等差数列
    python lambda 函数
    python map函数
    linux命令清除服务器缓存
    python 类
    距阵的运用
    有一种感动叫ACM(记WJMZBMR在成都赛区开幕式上的讲话)
    C语言strstr()函数:返回字符串中首次出现子串的地址
  • 原文地址:https://www.cnblogs.com/liyulong1982/p/2309695.html
Copyright © 2011-2022 走看看