Elb*_*lby 2 ffmpeg ubuntu-12.04
我想使用FFMPG连接 2 个或更多视频,但加入视频后出现音频/视频同步问题,我使用了以下代码
ffmpeg -i input1.flv -qscale:v 1 intermediate1.mpg
ffmpeg -i input2.flv -qscale:v 1 intermediate2.mpg
ffmpeg -i input3.flv -qscale:v 1 intermediate3.mpg
ffmpeg -i input4.flv -qscale:v 1 intermediate4.mpg
cat intermediate1.mpg intermediate2.mpg intermediate3.mpg intermediate4.mpg > intermediate_all.mpg
ffmpeg -i intermediate_all.mpg -qscale:v 2 output.avi
Run Code Online (Sandbox Code Playgroud)
output.avi 中的音频轨道位于视频轨道之前。
cat这样使用可能会导致不可预测的问题。幸运的是,有两种非常有用的方法可以使用 ffmpeg 连接文件。
如果您的所有输入都是相同类型的文件(相同的编解码器等),那么您可以使用 concat demuxer。这可能是对您的问题更有用的答案,因为它与 -c copy 兼容(因此应该是无损的,并且只需很短的时间即可完成)。
首先,创建一个名为的文件,inputs.txt其中包含以下内容:
file '/path/to/input1.flv'
file '/path/to/input2.flv'
file '/path/to/input3.flv'
file '/path/to/input4.flv'
Run Code Online (Sandbox Code Playgroud)
然后使用以下命令:
ffmpeg -f concat -i inputs.txt -c copy output.flv
Run Code Online (Sandbox Code Playgroud)
如果这不起作用,或者您想合并不同类型的视频,您可以使用
ffmpeg -i input1.flv -i input2.flv -i input3.flv -i input4.flv \
-filter_complex '[0:0] [0:1] [1:0] [1:1] [2:0] [2:1] [3:0] [3:1] concat=n=4:v=1:a=1 [v] [a]' \
-map '[v]' -map '[a]' -c:v libx264 -crf 22 -preset veryfast -c:a libfdk_aac -vbr 3 -afterburner 1 output.mp4
Run Code Online (Sandbox Code Playgroud)
此示例使用我首选的编码设置,显然更改最后一行以使用您想要的任何内容。
我将分解 -filter_complex 部分,以便更容易理解。
'[0:0] [0:1] [1:0] [1:1] [2:0] [2:1] [3:0] [3:1]
Run Code Online (Sandbox Code Playgroud)
该片段告诉 ffmpeg 将哪些流发送到 concat 过滤器;在这种情况下,来自输入 0 的流 0 和 1(ffmpeg 从 0 开始计数,因此这是第一个输入文件(本例中为 input1.flv)的第一个和第二个流),以及来自每个输入的流 0 和 1,直到第四(根据ffmpeg输入3,从0开始计数)。
concat=n=4:v=1:a=1 [v] [a]'
Run Code Online (Sandbox Code Playgroud)
这是串联过滤器本身。n=4 告诉过滤器有四个输入文件;v=1 告诉它将会有一个视频流;a=1 告诉它将会有一个音频流(我知道我说过 ffmpeg 从 0 开始计数,但显然这个过滤器的作者决定这样做)。
[v] 和 [a] 是输出流的名称,以允许 ffmpeg 行的其余部分使用 concat 过滤器的输出。我认为它们可以有任意的名字;哪一个是视频,哪一个是音频可能是由它们的相对位置决定的,但我还没有测试过。
请注意,整个过滤器部分周围的单引号“”是必需的。
-map '[v]' -map '[a]'
Run Code Online (Sandbox Code Playgroud)
这告诉 ffmpeg 使用 concat 过滤器的结果而不是直接来自输入文件的流。
请注意,过滤器与流复制不兼容;您不能将 -c copy 与此方法一起使用。我还认为它无法处理软字幕,尽管我还没有测试过:文档中没有任何提示,但 ffmpeg 文档通常不完整或模糊,所以这都不是一个确定的标志。
这可以连接以不同格式编码的文件(我已经使用 h264/aac MP4 和 vpx/vorbis WEBM 进行了测试,工作完美),尽管它们需要相同的视频帧大小和音频深度(可能还有其他东西)。
另请参阅此处。
| 归档时间: |
|
| 查看次数: |
2174 次 |
| 最近记录: |