匿名用户 发表于 2019-3-27 18:14

请教下 ffmpeg 合并视频的问题

本帖最后由 匿名用户 于 2019-3-27 18:44 编辑

没怎么用过 ffmpeg,也很缺乏视频编码知识,在操作中遇到了些问题。

一、需求:
我有一段视频,想在前面加一张持续几秒的静态图片。

二、我的操作:
我的想法是先把图片转成视频,然后进行合并。
图片转视频我用的命令是:
ffmpeg -loop 1 -f image2 -i sc.png -vcodec libx264 -t 6 intro.mp4

之后用 concat 将 filelist.txt 中列出的两个文件进行合并:
ffmpeg -f concat -i filelist.txt -c copy output.mp4

三、问题:
合并后的输出文件,变成了慢动作。(理论上应该是 4 分多钟的视频,变成了 28 分钟。)
我查看了下合并前的两个视频,编码信息分别如下:
intro.mp4:25 fpsbitrate: 351 kb/s
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'intro.mp4':
Metadata:
    major_brand   : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf58.24.101
Duration: 00:00:06.00, start: 0.000000, bitrate: 351 kb/s
    Stream #0:0(und): Video: h264 (High 4:4:4 Predictive) (avc1 / 0x31637661), yuv444p, 1920x1080 , 347 kb/s, 25 fps, 25 tbr, 12800 tbn, 50 tbc (default)

content.mp4:60 fpsbitrate: 40294 kb/s   
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'content.mp4':
Metadata:
    major_brand   : mp42
    minor_version   : 0
    compatible_brands: isommp42
    creation_time   : 2019-03-26T10:12:39.000000Z
    date            : 2019
Duration: 00:04:50.08, start: 0.000000, bitrate: 40294 kb/s
    Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, smpte170m/smpte170m/bt470m), 1920x1080 , 39890 kb/s, 60 fps, 60 tbr, 90k tbn, 120 tbc (default)
    Metadata:
      creation_time   : 2019-03-26T10:12:39.000000Z
      handler_name    : VideoHandle
    Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 196 kb/s (default)
    Metadata:
      creation_time   : 2019-03-26T10:12:39.000000Z
      handler_name    : SoundHandle
    Stream #0:2(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 195 kb/s (default)
    Metadata:
      creation_time   : 2019-03-26T10:12:39.000000Z
      handler_name    : SoundHandle

请问下合并后输出视频慢动作,是因为两个源视频帧率和码率不一直造成的吗?

如果是的话,是应该在图片转视频的时候就设定好码率/帧率和另一视频一致吗?
我试过用 -r 60 -b 40294 k,但仍然无效。

还是我在合并时,需要设定参数按后一个视频的码率/帧率进行输出?
当然,如果有其他方便的方案可以解决一开始的需求的话,也可以提出来。


villsian 发表于 2019-3-27 18:55

用绘声绘影类似的软件吧,研究参数比较费心。

elxy 发表于 2019-3-27 19:13

-r是指的输入端的fps,要改变fps,用下面的命令:
ffmpeg -loop 1 -i a.png -vf 'fps=60' -vcodec libx264 -t 6 intro.mp4

纯情小鸭鸭 发表于 2019-3-27 22:05

路过问一下在视频网站下载的分段视频用ffmpeg合并能直接源码输出吗?
还有一段视频需要剪掉开头和结尾的广告,也能源码吗?

elxy 发表于 2019-3-27 22:08

纯情小鸭鸭 发表于 2019-3-27 22:05
路过问一下在视频网站下载的分段视频用ffmpeg合并能直接源码输出吗?
还有一段视频需要剪掉开头和结尾的广 ...

可以,最后加上-c copy即可。

纯情小鸭鸭 发表于 2019-3-28 00:33

elxy 发表于 2019-3-27 22:08
可以,最后加上-c copy即可。

那么合并和剪辑(提取)的具体代码是什么呢?
谢谢~

y2z 发表于 2019-3-28 01:46

纯情小鸭鸭 发表于 2019-3-28 00:33
那么合并和剪辑(提取)的具体代码是什么呢?
谢谢~

裁剪
ffmpeg -i input.mp4 -ss 起始时间 -t 视频时长 -acodec copy -vcodec copy output.mp4
时间格式是 秒 或者 时:分:秒

合并
新建个文本文档filelist.txt,里面内容
file '01.mp4'
file '02.mp4'
ffmpeg -f concat -i filelist.txt -c copy output.mp4

都不用对视频重新编码,所以速度很快,不过裁剪的时间点可能并不是完全精确
以上命令建议你写成bat方便调用

SmterC 发表于 2019-3-28 04:07

路过问一下,最近恰好有和主楼差不多的尝试,想把多张图片合成一个视频
在导入的时候是-r 1/6来让每个图片显示6秒的,时长也正确
但无论输出成webm还是mp4,播放时速度都非常奇怪,并不是平均的
4张图片,第2张在3秒就出现,一直延续到第12秒后后两张图片快速闪过,进度条还没走完播放就结束了
是哪里参数设置得不对吗

—— 来自 OnePlus ONEPLUS A3000, Android 9上的 S1Next-鹅版 v2.1.2

elxy 发表于 2019-3-28 08:26

SmterC 发表于 2019-3-28 04:07
路过问一下,最近恰好有和主楼差不多的尝试,想把多张图片合成一个视频
在导入的时候是-r 1/6来让每个图片 ...

试试把FPS设高一点,图片转的视频大小没啥影响。

—— 来自 Xiaomi MI 6, Android 9上的 S1Next-鹅版 v2.1.2
页: [1]
查看完整版本: 请教下 ffmpeg 合并视频的问题