【问题标题】:ffmpeg: concat video and audio filesffmpeg:连接视频和音频文件
【发布时间】:2016-09-06 21:23:33
【问题描述】:

是否可以连接多个文件,如果一些文件是带音频的视频,而有些是只有音频。最终结果应如下所示:

--------------------------------------------------------
|###(v/a)### | ### (a) ### | ### (a) ### | ###(v/a)### |
--------------------------------------------------------

v/a: video + audio
a  : audio only (blank screen)

我尝试使用以下命令:

ffmpeg 
-i chunk1.mp4 
-i chunk2.m4a 
-i chunk3.mp4
-filter_complex "[0:v:0] [0:a:0] [1:v:0] [1:a:0] [2:v:0] [2:a:0] concat=n=3:v=1:a=1 [v] [a]"
-map "[v]" -map "[a]" -strict -2 result.mp4

所以我尝试只使用输入 1 ([1:a:0]) 中的音轨,但不幸的是,我收到了以下错误消息:

Stream specifier ':v:0' in filtergraph description [0:v:0] [0:a:0] [1:v:0] [1:a:0] [2:v:0] [2:a:0] concat=n=3:v=1:a=1 [v] [a] matches no streams.

我认为这一定是可能的,因为我还可以将大音频文件和小视频与 ffmpeg 结合起来。结果将是一个视频文件,其中最后一帧只是冻结但音频仍在播放。我想用冻结的最后一帧或简单的黑色帧来实现相同的结果。这可能吗?

【问题讨论】:

  • 视频的分辨率和帧率是多少?
  • @Mulvya 我不知道分辨率。所有视频块肯定会有相同的块,但会因任务而异。帧率也是如此。所以我想,我希望 ffmpeg 只采用其他视频块的任何内容。如果这不可能,并且我需要明确指定帧速率和/或分辨率,我确信我可以通过 ffprobe 手动读取这些参数。

标签: audio video ffmpeg


【解决方案1】:

对于Q中给出的命令,使用

ffmpeg -i chunk1.mp4 -i chunk2.m4a -i chunk3.mp4 -filter_complex \
       "color=black:s=WxH:r=N:d=T[1v]; \
       [0:v:0] [0:a:0] [1v] [1:a:0] [2:v:0] [2:a:0] concat=n=3:v=1:a=1 [v] [a]"
-map "[v]" -map "[a]" -strict -2 result.mp4

其中WxH 是视频的分辨率,N 是帧速率,T 是音频文件的持续时间。

【讨论】:

  • 顺便说一句,我发现帧率和持续时间似乎都无关紧要。无论如何,ffmpeg 都会拉伸视频以适应音频的长度。那么,如果我每次都指定 r=20:d=1 有什么缺点吗?
猜你喜欢
  • 2012-03-09
  • 1970-01-01
  • 2023-04-06
  • 1970-01-01
  • 2012-10-02
  • 1970-01-01
  • 2016-05-25
  • 1970-01-01
  • 2017-04-26
相关资源
最近更新 更多