3

我有两个大小相似的 .OGG 文件,FPS 和持续时间。我的目标是使用 FFMPEG 将它们组合成一个并排的演示文稿。为此,我尝试了以下 cmd:

ffmpeg -i subject.ogg -vf "[in]pad=3*iw:3*ih[left];movie=clinician.ogg[right];[left] [right]overlay=100:0[out]" 组合.ogg

可以说生成的视频是不可播放的。在组合过程中,FFMPEG 打印出许多错误,如下所示:

[Parsed_overlay_2 @ 0x1eb7d3e0] 缓冲区队列溢出,丢弃

这是在告诉我什么?

笔记:

  • 两个源文件都可以播放
  • 为了理解参数,我将“输出”填充得相当大
  • 第二个视频在 100:0 的位置是任意的。一旦我让 cmd 工作,我会将它移动到输出中更好的位置。
  • 这两个视频都是从网络摄像机录制的 .FLV 开始的。我将它们转换为 .ogg,因为 FFMPEG 不想合并两个 .FLV 文件。如果有更好的途径,请告诉我。

那么 - 我的参数有什么问题,我在做什么来导致这些 FFMPEG 错误?

编辑:
ffmpeg -i Clinician.ogg

输入 #0,ogg,来自 'clinician.ogg':
持续时间:00:05:20.98,开始:0.001000,比特率:2273 kb/s
流 #0:0:视频:theora,yuv420p,500x500 [SAR 1:1 DAR 1:1],1k tbr,1k tbn,1k tbc
元数据:
服务器:Red5 服务器 1.0.0 RC1 $Rev:4193 $
CANSEEKTOEND:真
编码器:Lavf54.31.100
流 #0:1:音频:vorbis,8000 Hz,立体声, s16
元数据:
服务器:Red5 服务器 1.0.0 RC1 $Rev:4193 $
CANSEEKTOEND:真
编码器:Lavf54.31.100

ffmpeg -i 主题.ogg

输入 #0,ogg,来自“subject.ogg”:
持续时间:00:05:17.60,开始:0.001000,比特率:1341 kb/s
流 #0:0:视频:theora,yuv420p,300x300 [SAR 1:1 DAR 1:1],83.33 tbr,1k tbn,1k tbc
元数据:
服务器:Red5 服务器 1.0.0 RC1 $Rev:4193 $
CANSEEKTOEND:真
编码器:Lavf54.31.100
流 #0:1:音频:vorbis,8000 Hz,立体声, s16
元数据:
服务器:Red5 服务器 1.0.0 RC1 $Rev:4193 $
CANSEEKTOEND:真
编码器:Lavf54.31.100

4

2 回答 2

2

转换为 x264 是一个很好的建议。这似乎扭转了局势。

以下是一些后人的注意事项:

  • 将 flv 转换为 x264 并纠正音频同步问题:

ffmpeg -y -i subject_s_2242_r_1658.flv -async 1 -ac 2 -strict -2 -acodec vorbis \
-c:v libx264 -preset slow -crf 22 subject.mkv

  • 将两个 x264 文件合并到一个并排文件中,并将两个单声道音轨放入结果文件中的立体声:

ffmpeg -y -i Clinician.mkv -vf: "movie=subject.mkv[right];pad=iw*2:ih:0:0[left];[left][right]overlay=500:0" \
- filter_complex "amovie=clinician.mkv[l];amovie=subject.mkv[r];[l][r] amerge" final.mkv

我无法安装 AVISYNTH(在 CentOS 6.2 上运行),但它看起来确实是一个很好的解决方案。

于 2012-11-28T19:34:36.627 回答
0

使用Avisynth可能最容易做到这一点。

制作以下 input.avs 文件:

a = AviSource("first.avi")
b = AviSource("second.avi")
StackHorizontal(a,b)

然后运行 ​​ffmpeg -i input.avs output.avi ... 以及您想要的任何其他选项。

编辑:另一种方法(不快)是将两个文件中的帧转储到 png 并将它们与 ImageMagick (例如montage)或类似的图像处理工具结合起来。

#!/bin/bash
ffmpeg -i first.avi first_%05d.png
ffmpeg -i second.avi second_%05d.png
for file in first_*.png ; do montage ${file} ${file/first/second} ${file/first/output} ; done
ffmpeg -i output_%05d.png output.avi

这实际上使您可以进行更多的图像处理,而不仅仅是并排,您可以进行任意比例/叠加/背景/等。问题是来自一个文件的第 N 帧可能与来自另一个文件的第 N 帧不完全相同,如果它们是可变帧速率,那么 AviSynth 可以完美地为您处理。如果剪辑是恒定的帧速率,那不是问题。

通过制作包含这样的新剪辑(无论是否通过avisynth)来组合剪辑需要重新压缩视频,并降低视频质量/增加文件大小。

我不确定如何将 ogg 文件读入 Avisynth,但可能有一种方法。检查输入格式的常见问题解答

旁注:theora/ogg 的选择很奇怪。更好:mp4 容器中的 H.264。

于 2012-11-27T20:33:50.307 回答