est
V2EX  ›  汽车

去一个景点开了一圈,想用行车记录仪存档,所以有个奇怪的需求

  •  
  •   est · Jan 3, 2016 · 4421 views
    This topic created in 3965 days ago, the information mentioned may be changed or developed.
    去一个景点开了一圈,风景还行,想留个纪念。从行车记录仪拷出来,发现为了防止漏秒,每个视频都多了 1 秒。。。。 1080p 合并出来 5G 多,也太大了。折腾了一下 ffmpeg 压缩 720p ,发现速度只有 32fps 。这尼玛慢死人了啊。

    家里没有 i7 的强力 PC ,只能用 mbp 慢慢处理。郁闷啊。


    想达到以下目的:

    1. 4x 倍速播放
    2. 60fps
    3. 减小体积, 720p 足够了。
    4. 去掉多出的 1 秒。。。。

    有没有能一次性做完这些步骤的软件啊?
    Supplement 1  ·  Jan 5, 2016

    特大喜讯, ffmpeg git 版本支持新的 concatdec_select 这个 vf ,一次性全搞定了。不用临时文件

    先建立个 list.txt 例如

    file 'input1.mp4'
    outpoint 300
    file 'input2.mp4'
    outpoint 300
    file 'input3.mp4'
    outpoint 300
    ...
    file 'inputn.mp4'
    outpoint 300
    

    然后:

    ffmpeg -f concat -i "list.txt" -r 48 -vf "select=concatdec_select,scale=1280x720,setsar=1,setpts=0.125*PTS" -sws_flags lanczos -c:v libx264 -crf 23 -an "merged-720p.mp4"
    

    我来逐个解释下参数意思:

    • -r 48 帧 frame per second
    • -vf video filter
    • select=concatdec_select 好像是合并+解码+选择
    • scale=1280x720 拉伸分辨率
    • setsar 拉伸选项
    • setpts 提速
    • sws_flags 这里是选重采样算法。 lanczos 是著名的效果好的。
    • -c:v 这里是选择牛逼的 x264
    • -crf 这里不是选择恒定码率,而是选择恒定质量 23 算一个比较常见的设定
    • -an 去掉声音

    我实验了,效果很好。

    58 replies  •  2016-01-05 23:17:56 +08:00
    old9
    old9
    Jan 3, 2016 via Android
    1
    也就 ffmpeg 了……
    loading
    loading
    Jan 3, 2016 via Android
    2
    windows 有绘声绘影这些。
    osx 应该也有的,就是视频编辑器。

    adobe after effect 上手难度有点高…
    skydiver
    skydiver
    Jan 3, 2016
    3
    比较好上手功能又强的软件,我用过一个 Sony Vegas ,不知道现在还有不
    loading
    loading
    Jan 3, 2016 via Android
    4
    工具是有,但是 ffmpeg 是根本,算法摆在那里,快不起来的。

    网速快就传到 youtube 上,等它转好,下个流畅版本…哈哈
    tanyuxiang
    tanyuxiang
    Jan 3, 2016 via Android
    5
    为啥不用 1080p 30fps
    est
    est
    OP
    Jan 3, 2016
    6
    @loading youtube 没法合并视频,这里还要去掉每个视频之间多出的冗余 1 秒。如果暴力合并,会发现视频抖一下。


    @tanyuxiang 节省体积。没那个必要。况且 720p 效果已经很好了。行车记录仪的 1080p 很粗糙的。
    est
    est
    OP
    Jan 3, 2016
    7
    而且我发现我 15 分钟的 720p ,就是 500MB 。而且画面大多数都是路面。。。。按理来说重复度很高啊。

    真心觉得网上压电视剧的, 400M 近一个小时的 H.264 ,真心技术牛逼啊。我是不是哪里参数没调对啊。。。 orz 。。。。。。。。。。况且我还去掉了声音的啊。

    我的参数:

    ffmpeg --i "original_1080p.mp4" -vf scale=1280x720,setsar=1 -sws_flags lanczos -c:v libx264 -crf 23 -an "720p.mp4"
    old9
    old9
    Jan 3, 2016 via Android
    8
    crf 可再大点,可先压个 1 分钟看看可能接受。
    多出来的一秒,考虑到关键帧的问题,估计很难切完美,将就将就吧
    old9
    old9
    Jan 3, 2016 via Android
    9
    4x 要再加个 filter
    60fps 也没看明白,这需求 25fps 就够了吧?
    est
    est
    OP
    Jan 3, 2016
    10
    @old9 弄个倍速播放的。比如 15 分钟看完原来 1 个小时的行程这种。估计要 60fps 才流畅?

    crf 我再调调试试。主要是手工去掉视频最后一秒太痛苦了。还有一大堆临时中间文件。
    old9
    old9
    Jan 3, 2016 via Android
    11
    理论上 60fps 是流畅点,但是行车记录仪估计 25fps 也看不出什么区别…

    写个脚本用 ffmpeg 切,就是切的效果未必好。
    XianZaiZhuCe
    XianZaiZhuCe
    Jan 3, 2016 via Android
    12
    没看懂,就是处理视频的需求? premiere pro 6 ?
    Eleutherios
    Eleutherios
    Jan 3, 2016
    13
    @est 为何不先拿 Y2B 转换格式再手动删除冗余+合并视频?
    sennes
    sennes
    Jan 4, 2016❤️1
    14


    先拼起来.然后 50ms 左右间隔取图像出来做 gif 可以么?
    不过不管怎么做,想节省处理的总时间还是有点难度的。
    momou
    momou
    Jan 4, 2016 via Android
    15
    貌似会声会影可以做到,许久不用了
    sennes
    sennes
    Jan 4, 2016❤️3
    16
    我这个视频 48 秒,然后刚刚以 1000ms 为间隔取图像出来做 gif



    虽然看起来挺卡的,不过用来给风景留个纪念应该还可以吧?
    不知道能不能帮到您。

    @livid 抱歉打扰下,我刚刚上传这个 gif 一直提示上传错误。最后发现其实都有上传而且铜板也重复扣了 8 次,心疼。
    xuhaoyangx
    xuhaoyangx
    Jan 4, 2016❤️1
    17
    crf 输出的大小,是根据画面复杂程度,清晰程度等等而定。
    高清,画面简单, crf 23 有可能就才 100M.
    清晰度不高,画面复杂(举个例:动作片,晚会灯光狂闪), crf 23 有可能就要几个 G
    其次 X264 的其他参数也会影响

    ffmpeg --i "original_1080p.mp4" -vf scale=1280x720,setsar=1 -sws_flags lanczos -c:v libx264 -crf 23

    加-preset 9 -x264opts ref=5:bframes=5:me=umh:merange=24:aq-strength=0.8:qcomp=0.5:aq-mode=2 -psy-rd 0.3:0

    -an "720p.mp4"

    比较通用的高压参数
    xuhaoyangx
    xuhaoyangx
    Jan 4, 2016
    18
    忘了说 1280:720 这样比较规范,或者直接用-1 : 720 保留原视频的长宽比
    KexyBiscuit
    KexyBiscuit
    Jan 4, 2016 via Android❤️2
    19
    Try Microsoft Hyperlapse
    20150517
    20150517
    Jan 4, 2016
    20
    aws 上好像有一个服务是视频压缩的,不过取决于你上传又要多久....
    yangff
    yangff
    Jan 4, 2016
    21
    用 GPU 压吧……
    est
    est
    OP
    Jan 4, 2016
    22
    @yangff 质量差。。。
    est
    est
    OP
    Jan 4, 2016
    23
    @KexyBiscuit 居然出 mac 版了。上次去看还只有 win 版的。
    yangff
    yangff
    Jan 4, 2016
    24
    @est 码率调高就好了,并不差……
    congeec
    congeec
    Jan 4, 2016
    25
    ffmpeg 能搞定你全部的需求,效果不理想是你参数没调好
    est
    est
    OP
    Jan 4, 2016
    26
    @congeec 目前用的就是 ffmpeg 。去掉那一秒有中间文件,合并视频又一个中间文件,想要一个能直接一次性搞定的办法。
    ruoyu0088
    ruoyu0088
    Jan 4, 2016
    27
    用 blender 的视频编辑,用 Python 写一个脚本自动生成时间线。至于处理效率就不清楚了,不过只需要写一次程序,就可以大批量编辑视频了,而且没有中间文件。
    chinuno
    chinuno
    Jan 4, 2016
    28
    写个 avs 脚本,可以直接预览结果确认效果可以了用 megui 压制。第一个需求我没用过不太清楚能不能实现,不过下面三个肯定可以了
    mhycy
    mhycy
    Jan 4, 2016
    29
    如果是刚好一秒且帧率恒定(例如都是多出 24 帧)
    可通过写 AVS 解决,所有文件按顺序编号命名,写个小脚本生成 AVS 的链接处理语句。
    然后调用 ffmpeg 编码这个 avs ,如果是 win ,建议使用 megui ,即便没有 win ,也能虚拟机装一个生成命令。
    水果有没有 x264 编码器就不知道了。

    具体压制参数,有很多论坛讨论。。。
    但是,高质量的都很慢。

    另: 5G 很大么?
    est
    est
    OP
    Jan 4, 2016
    30
    @mhycy 5G 的视频,才不到一个小时。我觉得很大啊。网上 720p 的电影, 2 个小时,也不过 2G 么。。。。。。。。。。为啥差距这么大。
    MindPunk
    MindPunk
    Jan 4, 2016
    31
    @est 感觉 720 只是分辨率,和清晰度没关系。所以和压缩质量有关吧?
    dong3580
    dong3580
    Jan 4, 2016
    32
    微软不是开发过一个 apple 版本的照相应用么,不知道现在有没有那种硬件,
    AdamMaggie
    AdamMaggie
    Jan 4, 2016
    33
    用 Adobe Premiere Pro+Adobe Media Encoder
    mhycy
    mhycy
    Jan 4, 2016
    34
    @est
    时间换质量。。。
    和时间换空间一个道理

    看你的参数貌似没有设定码率。。囧
    还是上 MEGUI 吧,方便,参数对照说明改改也能有不错的效果。
    不过 MBP13 估计时间会很长就是了
    est
    est
    OP
    Jan 4, 2016
    35
    @mhycy 码率会有 2pass 貌似会更慢。我这里是恒定质量。 MEGUI 不错。谢谢推荐。
    skydiver
    skydiver
    Jan 4, 2016
    36
    Mac 上还可以用 handbrake 吧
    est
    est
    OP
    Jan 4, 2016
    37
    @skydiver 就用的这货。输出的文件还是很大。速度很慢。比我命令行的还慢。
    skydiver
    skydiver
    Jan 4, 2016
    38
    @est 没办法,这个东西就是纯靠 CPU 的,当年做一个短片结果 30 分钟的短片渲染了 2 小时。。想要快,换个 CPU 强劲的台式机吧。。
    mhycy
    mhycy
    Jan 4, 2016
    39
    @est 时间换空间,必须的。。。
    stanzgy
    stanzgy
    Jan 4, 2016
    40
    @est 几年前用过 megui 压制视频,记得就是一个 x264 的 GUI 版本,方便调整各种参数,配合 avs 脚本对视频进行各种裁剪滤镜等操作挺方便的,用命令行敲命令都要累死人了。。设置码率记得 1-3pass 都可以, 2pass 是压制高清视频时平衡压制时间与视频质量的最常用设置。至于压制时间完全就是看 cpu ,没有什么可以取巧的地方。
    est
    est
    OP
    Jan 4, 2016
    41
    @stanzgy 看来  megui  是个神器。
    stanzgy
    stanzgy
    Jan 4, 2016
    42
    @est 说起来感觉你的 32fps 的压制速度已经不错了。记得以前用一台 amd phenom II 925 [email protected] 机器, 8M 左右码率、 2pass 、 avs 做简单的 trim 锐化处理来压制视频,经常只有个位数的 fps ,一部 2 小时左右的电影压制 1080p 经常要不关机跑 2 天左右。现在硬件进步了,应该时间能快很多,你这里行车记录仪采集的图像应该质量不会很高,不需要的视频片段都可以用 avs 脚本裁掉,码率设置比较低的话,速度应该能快很多。
    shyrock
    shyrock
    Jan 4, 2016
    43
    记录仪原始视频帧率多少?你想弄成 60fps 估计需要重采样,当然又大又慢。。。
    est
    est
    OP
    Jan 4, 2016
    44
    @KexyBiscuit 用了这货。进度跑打雷 84%报了个 Unknown error 就退出了。我勒个大艹!
    est
    est
    OP
    Jan 4, 2016
    45
    @KexyBiscuit microsoft hyperlapse 有个最大的 bug 是只能利用单核。。 libx264 是双核 4 线程完全跑满的。
    JamesRuan
    JamesRuan
    Jan 4, 2016
    46
    60fps 的,同样时间大小就是 25fps 的四倍, 5G 也就相对于一般的 1G 左右的视频。
    一个小时 x264 1G 还是 720p 的,画面已经不怎么清晰了。
    @est 我觉得你对于技术有些过于乐观了,我当年剪辑 DV 的时候,无损压缩 20G 15min 左右的片子最终道出成 480p 的 Release 版本约 300M ,已经是酷睿 2 的时代了,还用了 5 个多小时!
    est
    est
    OP
    Jan 4, 2016
    47
    @JamesRuan 嗯。我已经意识到现在压制视频很慢了!

    综合了一下,感觉这个命令输出的视频质量足够而且体积很小

    ffmpeg -i 1080p.mp4 -r 48 -vf "setpts=0.125*PTS,scale=1280x720" -c:v libx264 -sws_flags lanczos -an -crf 24 -preset slow out.mp4

    压缩前: 50 分钟 30fps 的 1080p ,体积 4.45GB
    压缩后: 5 分钟 48fps 的 720p ,体积 132MB , 8 倍速播放。

    细节基本没丢失。

    当然,要体验压制过程个位数 fps ,加上 deshake 这个 filter 即可。
    vimutt
    vimutt
    Jan 5, 2016 via Android
    48
    用 premiere 吧 分分钟搞定 h264 1080#720 均可 帧率 30 (这东西不是越大越好 要符合播放设备的标准 和实时渲染的动画不同) 具体的输出质量在 pr 内有可调参数 慢进快进效果也都非常简单 一小时的片子输出几百 Mb 也不成问题
    est
    est
    OP
    Jan 5, 2016
    49
    @vimutt 分分钟搞定目前看来不太可能啊。除非黑科技。压片都很慢的。
    vimutt
    vimutt
    Jan 5, 2016 via Android
    50
    @est 哈哈 说的夸张了点 我的意思是用 pr 的话这些需求都能解决 也不难 网上查查就能解决
    xuhaoyangx
    xuhaoyangx
    Jan 5, 2016
    51
    @vimutt pr 的画质还是一般, pr 一般都是搭桥出来用 x264 或者其他的编码器输出

    @est preset 的级别就是保证画质好坏的比较主要的参数,可以考虑直接在 slow 后面 加-x264opts ref=5:bframes=5:me=umh:merange=24:aq-strength=0.8:qcomp=0.5:aq-mode=2 -psy-rd 0.3:0 这一段

    压动漫电影=。=,志强双路经常只有 0.5fps 的速度,你们这些算很快了
    est
    est
    OP
    Jan 5, 2016
    52
    @xuhaoyangx 回去一定试试。谢谢。

    0.5fps 还能忍啊?我直接扔了。
    est
    est
    OP
    Jan 5, 2016
    53
    找了个 PC , i7 4790 ,发现 fps 只有 22 。。。一样的 ffmpeg 参数。我心里平衡了!
    xuhaoyangx
    xuhaoyangx
    Jan 5, 2016
    54
    @est 因为要做很多处理, 0.5fps 很正常,特别是动漫。
    est
    est
    OP
    Jan 5, 2016
    55
    @old9
    @loading
    @xuhaoyangx
    @congeec
    @mhycy

    特大喜讯, ffmpeg git 版本支持新的 concatdec_select 这个 vf ,一次性全搞定了。不用临时文件

    先建立个 list.txt 例如

    file 'input1.mp4'
    outpoint 300
    file 'input2.mp4'
    outpoint 300
    file 'input3.mp4'
    outpoint 300
    ...
    file 'inputn.mp4'
    outpoint 300

    然后:

    ffmpeg -f concat -i "list.txt" -r 48 -vf "select=concatdec_select,scale=1280x720,setsar=1,setpts=0.125*PTS" -sws_flags lanczos -c:v libx264 -crf 23 -an "merged-720p.mp4"


    http://superuser.com/a/1020455/15252

    我实验了,效果很好。
    congeec
    congeec
    Jan 5, 2016
    56
    @est 呀,谢谢提醒,我都忘了。还有个 gifify 脚本很好用,里面也用到了这些东西。参考一下写个脚本也不错
    https://github.com/jclem/gifify/
    xuhaoyangx
    xuhaoyangx
    Jan 5, 2016
    57
    @est megui 只是个 gui ,也是调用类似 ffmpeg X264 这些命令行的工具
    xuhaoyangx
    xuhaoyangx
    Jan 5, 2016
    58
    @est 外国友人的回答真详细
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   3772 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 75ms · UTC 09:52 · PVG 17:52 · LAX 01:52 · JFK 04:52
    ♥ Do have faith in what you're doing.