去一个景点开了一圈,想用行车记录仪存档,所以有个奇怪的需求 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
est
V2EX    汽车

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

  •  
  •   est 2016-01-03 21:33:13 +08:00 3420 次点击
    这是一个创建于 3589 天前的主题,其中的信息可能已经有所发展或是发生改变。
    去一个景点开了一圈,风景还行,想留个纪念。从行车记录仪拷出来,发现为了防止漏秒,每个视频都多了 1 秒。。。。 1080p 合并出来 5G 多,也太大了。折腾了一下 ffmpeg 压缩 720p ,发现速度只有 32fps 。这尼玛慢死人了啊。

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


    想达到以下目的:

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

    有没有能一次性做完这些步骤的软件啊?
    第 1 条附言    2016-01-05 22:33:35 +08:00

    特大喜讯, 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 条回复    2016-01-05 23:17:56 +08:00
    old9
        1
    old9  
       2016-01-03 21:47:21 +08:00 via Android
    也就 ffmpeg 了……
    loading
        2
    loading  
       2016-01-03 21:48:53 +08:00 via Android
    windows 有绘声绘影这些。
    osx 应该也有的,就是视频编辑器。

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

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


    @tanyuxiang 节省体积。没那个必要。况且 720p 效果已经很好了。行车记录仪的 1080p 很粗糙的。
    est
        7
    est  
    OP
       2016-01-03 21:57:10 +08:00
    而且我发现我 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
        8
    old9  
       2016-01-03 22:02:37 +08:00 via Android
    crf 可再大点,可先压个 1 分钟看看可能接受。
    多出来的一秒,考虑到关键帧的问题,估计很难切完美,将就将就吧
    old9
        9
    old9  
       2016-01-03 22:04:27 +08:00 via Android
    4x 要再加个 filter
    60fps 也没看明白,这需求 25fps 就够了吧?
    est
        10
    est  
    OP
       2016-01-03 22:05:52 +08:00
    @old9 弄个倍速播放的。比如 15 分钟看完原来 1 个小时的行程这种。估计要 60fps 才流畅?

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

    写个脚本用 ffmpeg 切,就是切的效果未必好。
    XianZaiZhuCe
        12
    XianZaiZhuCe  
       2016-01-03 22:17:08 +08:00 via Android
    没看懂,就是处理视频的需求? premiere pro 6 ?
    Eleutherios
        13
    Eleutherios  
       2016-01-03 23:50:54 +08:00
    @est 为何不先拿 Y2B 转换格式再手动删除冗余+合并视频?
    sennes
        14
    sennes  
       2016-01-04 00:41:05 +08:00   1


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



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

    @livid 抱歉打扰下,我刚刚上传这个 gif 一直提示上传错误。最后发现其实都有上传而且铜板也重复扣了 8 次,心疼。
    xuhaoyangx
        17
    xuhaoyangx  
       2016-01-04 01:39:56 +08:00   1
    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
        18
    xuhaoyangx  
       2016-01-04 01:42:42 +08:00
    忘了说 1280:720 这样比较规范,或者直接用-1 : 720 保留原视频的长宽比
    KexyBiscuit
        19
    KexyBiscuit  
       2016-01-04 02:55:37 +08:00 via Android   2
    Try Microsoft Hyperlapse
    20150517
        20
    20150517  
       2016-01-04 04:36:57 +08:00
    aws 上好像有一个服务是视频压缩的,不过取决于你上传又要多久....
    yangff
        21
    yangff  
       2016-01-04 09:05:38 +08:00
    用 GPU 压吧……
    est
        22
    est  
    OP
       2016-01-04 09:15:05 +08:00
    @yangff 质量差。。。
    est
        23
    est  
    OP
       2016-01-04 09:22:18 +08:00
    @KexyBiscuit 居然出 mac 版了。上次去看还只有 win 版的。
    yangff
        24
    yangff  
       2016-01-04 09:27:10 +08:00
    @est 码率调高就好了,并不差……
    congeec
        25
    congeec  
       2016-01-04 09:31:17 +08:00
    ffmpeg 能搞定你全部的需求,效果不理想是你参数没调好
    est
        26
    est  
    OP
       2016-01-04 09:39:48 +08:00
    @congeec 目前用的就是 ffmpeg 。去掉那一秒有中间文件,合并视频又一个中间文件,想要一个能直接一次性搞定的办法。
    ruoyu0088
        27
    ruoyu0088  
       2016-01-04 10:06:49 +08:00
    用 blender 的视频编辑,用 Python 写一个脚本自动生成时间线。至于处理效率就不清楚了,不过只需要写一次程序,就可以大批量编辑视频了,而且没有中间文件。
    chinuno
        28
    chinuno  
       2016-01-04 10:09:24 +08:00
    写个 avs 脚本,可以直接预览结果确认效果可以了用 megui 压制。第一个需求我没用过不太清楚能不能实现,不过下面三个肯定可以了
    mhycy
        29
    mhycy  
       2016-01-04 10:20:05 +08:00
    如果是刚好一秒且帧率恒定(例如都是多出 24 帧)
    可通过写 AVS 解决,所有文件按顺序编号命名,写个小脚本生成 AVS 的链接处理语句。
    然后调用 ffmpeg 编码这个 avs ,如果是 win ,建议使用 megui ,即便没有 win ,也能虚拟机装一个生成命令。
    水果有没有 x264 编码器就不知道了。

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

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

    看你的参数貌似没有设定码率。。
    还是上 MEGUI 吧,方便,参数对照说明改改也能有不错的效果。
    不过 MBP13 估计时间会很长就是了
    est
        35
    est  
    OP
       2016-01-04 14:13:42 +08:00
    @mhycy 码率会有 2pass 貌似会更慢。我这里是恒定质量。 MEGUI 不错。谢谢推荐。
    skydiver
        36
    skydiver  
       2016-01-04 15:05:37 +08:00
    Mac 上还可以用 handbrake 吧
    est
        37
    est  
    OP
       2016-01-04 15:34:44 +08:00
    @skydiver 就用的这货。输出的文件还是很大。速度很慢。比我命令行的还慢。
    skydiver
        38
    skydiver  
       2016-01-04 15:48:27 +08:00
    @est 没办法,这个东西就是纯靠 CPU 的,当年做一个短片结果 30 分钟的短片渲染了 2 小时。。想要快,换个 CPU 强劲的台式机吧。。
    mhycy
        39
    mhycy  
       2016-01-04 16:37:29 +08:00
    @est 时间换空间,必须的。。。
    stanzgy
        40
    stanzgy  
       2016-01-04 17:23:13 +08:00
    @est 几年前用过 megui 压制视频,记得就是一个 x264 的 GUI 版本,方便调整各种参数,配合 avs 脚本对视频进行各种裁剪滤镜等操作挺方便的,用命令行敲命令都要累死人了。。设置码率记得 1-3pass 都可以, 2pass 是压制高清视频时平衡压制时间与视频质量的最常用设置。至于压制时间完全就是看 cpu ,没有什么可以取巧的地方。
    est
        41
    est  
    OP
       2016-01-04 18:11:18 +08:00
    @stanzgy 看来  megui  是个神器。
    stanzgy
        42
    stanzgy  
       2016-01-04 18:47:10 +08:00
    @est 说起来感觉你的 32fps 的压制速度已经不错了。记得以前用一台 amd phenom II 925 [email protected] 机器, 8M 左右码率、 2pass 、 avs 做简单的 trim 锐化处理来压制视频,经常只有个位数的 fps ,一部 2 小时左右的电影压制 1080p 经常要不关机跑 2 天左右。现在硬件进步了,应该时间能快很多,你这里行车记录仪采集的图像应该质量不会很高,不需要的视频片段都可以用 avs 脚本裁掉,码率设置比较低的话,速度应该能快很多。
    shyrock
        43
    shyrock  
       2016-01-04 20:46:18 +08:00
    记录仪原始视频帧率多少?你想弄成 60fps 估计需要重采样,当然又大又慢。。。
    est
        44
    est  
    OP
       2016-01-04 21:44:06 +08:00
    @KexyBiscuit 用了这货。进度跑打雷 84%报了个 Unknown error 就退出了。我勒个大艹!
    est
        45
    est  
    OP
       2016-01-04 21:45:39 +08:00
    @KexyBiscuit microsoft hyperlapse 有个最大的 bug 是只能利用单核。。 libx264 是双核 4 线程完全跑满的。
    JamesRuan
        46
    JamesRuan  
       2016-01-04 23:06:51 +08:00
    60fps 的,同样时间大小就是 25fps 的四倍, 5G 也就相对于一般的 1G 左右的视频。
    一个小时 x264 1G 还是 720p 的,画面已经不怎么清晰了。
    @est 我觉得你对于技术有些过于乐观了,我当年剪辑 DV 的时候,无损压缩 20G 15min 左右的片子最终道出成 480p 的 Release 版本约 300M ,已经是酷睿 2 的时代了,还用了 5 个多小时!
    est
        47
    est  
    OP
       2016-01-04 23:48:19 +08:00
    @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
        48
    vimutt  
       2016-01-05 00:51:06 +08:00 via Android
    用 premiere 吧 分分钟搞定 h264 1080#720 均可 帧率 30 (这东西不是越大越好 要符合播放设备的标准 和实时渲染的动画不同) 具体的输出质量在 pr 内有可调参数 慢进快进效果也都非常简单 一小时的片子输出几百 Mb 也不成问题
    est
        49
    est  
    OP
       2016-01-05 09:01:22 +08:00
    @vimutt 分分钟搞定目前看来不太可能啊。除非黑科技。压片都很慢的。
    vimutt
        50
    vimutt  
       2016-01-05 10:26:17 +08:00 via Android
    @est 哈哈 说的夸张了点 我的意思是用 pr 的话这些需求都能解决 也不难 网上查查就能解决
    xuhaoyangx
        51
    xuhaoyangx  
       2016-01-05 13:59:56 +08:00
    @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
        52
    est  
    OP
       2016-01-05 14:02:53 +08:00
    @xuhaoyangx 回去一定试试。谢谢。

    0.5fps 还能忍啊?我直接扔了。
    est
        53
    est  
    OP
       2016-01-05 14:51:17 +08:00
    找了个 PC , i7 4790 ,发现 fps 只有 22 。。。一样的 ffmpeg 参数。我心里平衡了!
    xuhaoyangx
        54
    xuhaoyangx  
       2016-01-05 14:52:10 +08:00
    @est 因为要做很多处理, 0.5fps 很正常,特别是动漫。
    est
        55
    est  
    OP
       2016-01-05 22:28:54 +08:00
    @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
        56
    congeec  
       2016-01-05 22:58:11 +08:00
    @est 呀,谢谢提醒,我都忘了。还有个 gifify 脚本很好用,里面也用到了这些东西。参考一下写个脚本也不错
    https://github.com/jclem/gifify/
    xuhaoyangx
        57
    xuhaoyangx  
       2016-01-05 23:16:48 +08:00
    @est megui 只是个 gui ,也是调用类似 ffmpeg X264 这些命令行的工具
    xuhaoyangx
        58
    xuhaoyangx  
       2016-01-05 23:17:56 +08:00
    @est 外国友人的回答真详细
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     898 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 19:51 PVG 03:51 LAX 12:51 JFK 15:51
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86