音频从avconv命令中删除

我目前正在尝试将来自不同设备的多个video合并为一个video。 设置如下:

  1. 用户在手机上记录3个video(android或iOs)
  2. 系统将这些video(mp4格式)发送到我们的服务器
  3. 服务器移动文件并将它们转换成TS文件(为什么?因为我们认为将每个video格式化为这种格式会很好)

完成这些步骤后,我们希望将其与我们的4个video相结合。 这意味着,通过调用我们的video’ov’,最终的组合步骤将是:

ov1 > sent video 1 > ov2 > sent video 2 > ov3 > sent video 3 > ov4

这确实会带来一些问题。 我们一直在将每个video格式化为相同的格式,相同的音频通道以及这些行的所有内容(只有更改的是文件名)

 avconv -ss 0 -i "48_0.85825500-14815530815710.mp4" -vcodec libx264 -acodec aac -bsf:a aac_adtstoasc -bsf:v h264_mp4toannexb -f mpegts -strict experimental -y "tmp_48_0.ts" 

就我们而言,这意味着每个video都将被编译为相同的video(h264_mp4toannexb)和音频(aac_adtstoasc)格式。 在组合这些video的同时,音频解除器:

 avconv -i concat:"2connect-ae.ts|tmp_48_1.ts" -c copy -bsf:a aac_adtstoasc -bsf:v h264_mp4toannexb -y "output.mp4" 

我们一直试图改变我们以不同方式压缩/编译/转换video的方式,来自不同的来源,但我们没有成功。 我们从Final Cut Pro和Adobe After Effects获得了4个导出的.wov文件。 改变我们的工具不起作用。

不知何故,来自我们video的声音(ov1,ov2,ov3,ov4)与用户发送的video重叠,导致声音延迟,每秒都在不断增加。 我们是一种思绪,为什么这种情况一直在发生,任何帮助都将非常感激。

如果我们将发送的video附加到彼此,则没有延迟。 如果我们将自己的任何video添加到列表中,它会开始延迟音频。 如果您想了解更多信息,请告诉我们。

有关我们版本的信息:

avconv version 9.11-6:9.11-2ubuntu2, Copyright (c) 2000-2013 the Libav developers built on Mar 24 2014 06:12:33 with gcc 4.8 (Ubuntu 4.8.2-17ubuntu1) avconv 9.11-6:9.11-2ubuntu2 libavutil 52. 3. 0 / 52. 3. 0 libavcodec 54. 35. 0 / 54. 35. 0 libavformat 54. 20. 3 / 54. 20. 4 libavdevice 53. 2. 0 / 53. 2. 0 libavfilter 3. 3. 0 / 3. 3. 0 libavresample 1. 0. 1 / 1. 0. 1 libswscale 2. 1. 1 / 2. 1. 1


针对给定评论进行编辑:目前我们正尝试使用该选项将每个video转换为相同的尺寸: -filter:v 'scale=iw*min(1920/iw\,1080/ih):ih*min(1920/iw\,1080/ih), pad=1920:1080:(1920-iw*min(1920/iw\,1080/ih))/2:(1080-ih*min(1920/iw\,1080/ih))/2'

每个video都转换为1920×1080。 我们也试图取出我们拥有的每一个选项,然后重新构建我们必须看到它出错的地方。 但这似乎是一个巨大的步骤,也是一种绝望的一步。


EDIT2

这些是我们当前运行的命令:

 avconv -i "33_0.98002500-14821542538733.mp4" -f mpegts -filter:v 'scale=iw*min(1920/iw\,1080/ih):ih*min(1920/iw\,1080/ih), pad=1920:1080:(1920-iw*min(1920/iw\,1080/ih))/2:(1080-ih*min(1920/iw\,1080/ih))/2' "tmp_ruud_0.ts" avconv -i "33_0.57471800-14821542544448.mp4" -f mpegts -filter:v 'scale=iw*min(1920/iw\,1080/ih):ih*min(1920/iw\,1080/ih), pad=1920:1080:(1920-iw*min(1920/iw\,1080/ih))/2:(1080-ih*min(1920/iw\,1080/ih))/2' "tmp_ruud_1.ts" avconv -i "33_0.27939600-14821542541226.mp4" -f mpegts -filter:v 'scale=iw*min(1920/iw\,1080/ih):ih*min(1920/iw\,1080/ih), pad=1920:1080:(1920-iw*min(1920/iw\,1080/ih))/2:(1080-ih*min(1920/iw\,1080/ih))/2' "tmp_ruud_2.ts" avconv -i "templates/v2/wiebenik-v2.mov" -f mpegts "wiebenik-v5.ts" avconv -i "templates/v2/ikkanjehelpenmet-v2.mov" -f mpegts "ikkanjehelpenmet-v5.ts" avconv -i "templates/v2/ikbenopzoeknaar-v2.mov" -f mpegts "ikbenopzoeknaar-v5.ts" avconv -i concat:"wiebenik-v5.ts|tmp_ruud_0.ts|ikkanjehelpenmet-v5.ts|tmp_ruud_1.ts|ikbenopzoeknaar-v5.ts|tmp_ruud_2.ts" -strict experimental "test.mp4" 

编辑3; 我目前正在转换每个文件并将其大小更改为相同的格式并对其进行规范化,如下所示:

 avconv -i "public/videos/44_0.90768300-14822311688474.mp4" -filter:v "transpose=1, scale=iw*min(1920/iw\,1080/ih):ih*min(1920/iw\,1080/ih), pad=1920:1080:(1920-iw*min(1920/iw\,1080/ih))/2:(1080-ih*min(1920/iw\,1080/ih))/2" -c:a copy "public/videos/tmp_44_0.mp4" avconv -i public/videos/tmp_44_0.mp4 -c:v copy -c:a libmp3lame -b:a 128k -ac 2 -ar 48000 public/videos/tmp_44_0_normalized.mp4 avconv -i "public/videos/44_0.09416600-14822311719723.mp4" -filter:v "transpose=1, scale=iw*min(1920/iw\,1080/ih):ih*min(1920/iw\,1080/ih), pad=1920:1080:(1920-iw*min(1920/iw\,1080/ih))/2:(1080-ih*min(1920/iw\,1080/ih))/2" -c:a copy "public/videos/tmp_44_1.mp4" avconv -i public/videos/tmp_44_1.mp4 -c:v copy -c:a libmp3lame -b:a 128k -ac 2 -ar 48000 public/videos/tmp_44_1_normalized.mp4 avconv -i "public/videos/44_0.37376500-14822311735955.mp4" -filter:v "transpose=1, scale=iw*min(1920/iw\,1080/ih):ih*min(1920/iw\,1080/ih), pad=1920:1080:(1920-iw*min(1920/iw\,1080/ih))/2:(1080-ih*min(1920/iw\,1080/ih))/2" -c:a copy "public/videos/tmp_44_2.mp4" avconv -i public/videos/tmp_44_2.mp4 -c:v copy -c:a libmp3lame -b:a 128k -ac 2 -ar 48000 public/videos/tmp_44_2_normalized.mp4 

在这些变化之后,我将它们组合起来:

 MP4Box public/videos/templates/v2/wiebenik-v2.mp4 -cat public/videos/tmp_44_0_normalized.mp4 -cat public/videos/templates/v2/ikkanjehelpenmet-v2.mp4 -cat public/videos/tmp_44_1_normalized.mp4 -cat public/videos/templates/v2/ikbenopzoeknaar-v2.mp4 -cat public/videos/tmp_44_2_normalized.mp4 -cat public/videos/templates/v2/2connect-v2.mp4 -out public/pitches/44_9b374c31dcaa7433daf0f5163a3789dc.mp4 

但不知何故,即使只有2个文件,我也收到错误:

 Cannot concatenate files: Different AVC Level Indication between source (42) and destination (40) 

事实certificate我的文件有不同版本的高质量(4和4.2),不知道如何解决这个问题。

看来你遇到的问题与选择的错误组合有关。

您已选择MPEG传输流作为容器: 传输流往往以恒定比特率(CBR)广播,以保持一致的广播速率,当存在的数据不足时填充填充字节。 由于X264没有原生恒定比特率模式,因此选择x264作为编解码器似乎已经变得复杂了。 对我来说,这似乎是违反直觉的。

如果我负责这个项目,如果有什么我想要保险的话。

1)。 所有要连接的剪辑都必须标准化 (IEvideo尺寸相同,音频采样率相同,音频video比特率相同)

2)我选择的编解码器和容器格式具有兼容的特性。

使用特定比特率的无损样本进行所有编辑可能是谨慎的,以确保准确的定时。

当你开始使用有损压缩的aac时 ,你的音频时序将是有问题的。

进一步的研究表明, 当容器不是flv,m4a,mov或mp4时,-bsf有一个长期存在的aac复制问题:aac_adtstoasc。 您可能希望阅读该post中的最终评论。

对于实际的示例选项,请参阅此处的答案,如果您确实需要-f mpegts请在确认完整的A / V同步后执行该步骤。