FFmpeg:连接 .webm 文件,有些是视频,有些是音频,有些是两者兼而有之

问题描述

就我而言,我有 3 个 .webm 文件,第一个是音频,第二个是视频,第三个是音频和视频。

我想将它们连接成一个文件,该文件显示音频部分的黑屏,显示视频部分的视频,并同时播放有音频和视频的部分。

视频编解码器为 VP8,音频编解码器为 Opus。

concat.txt 包含三个文件的条目

我正在使用以下命令连接它们。

ffmpeg -f concat -safe 0 -i ./concat.txt -c copy -y output.webm

此命令创建输出文件,当我播放它时,它只播放第一个纯音频部分,并在到达纯视频部分时崩溃。

我还尝试将虚拟图片添加到纯音频文件中,但是当我尝试连接时该命令失败。

欢迎提供任何帮助/批评。

谢谢!

有关输入文件的更多信息

Input #0,matroska,webm,from 'original1.webm':
  Metadata:
    title           : -
    ENCODER         : Lavf58.45.100
  Duration: 00:00:09.99,start: 0.000000,bitrate: 34 kb/s
    Stream #0:0: Audio: opus,48000 Hz,stereo,fltp (default)
    Metadata:
      DURATION        : 00:00:09.990000000
Input #1,from 'original2.webm':
  Metadata:
    title           : -
    ENCODER         : Lavf58.45.100
  Duration: 00:00:09.75,bitrate: 954 kb/s
    Stream #1:0: Video: vp8,yuv420p(tv,bt470bg/unkNown/unkNown,progressive),1680x1050,SAR 1:1 DAR 8:5,1k tbr,1k tbn,1k tbc (default)
    Metadata:
      DURATION        : 00:00:09.754000000
Input #2,from 'original3.webm':
  Metadata:
    title           : -
    ENCODER         : Lavf58.45.100
  Duration: 00:00:10.02,bitrate: 912 kb/s
    Stream #2:0: Audio: opus,fltp (default)
    Metadata:
      DURATION        : 00:00:10.023000000
    Stream #2:1: Video: vp8,1k tbc (default)
    Metadata:
      DURATION        : 00:00:09.965000000

解决方法

要连接的所有文件都必须具有 same attributes 和流顺序。

  1. 向纯音频文件添加黑色视频:

    ffmpeg -i audio.webm -f lavfi -i color=s=1680x1050 -r 1000 -map 0 -map 1 -c:a copy -c:v libvpx -shortest output1.webm
    
  2. 向纯视频文件添加静音音频:

    ffmpeg -f lavfi -i anullsrc=r=48000:cl=stereo -i video.webm -map 0 -map 1 -c:a libopus -c:v copy -shortest output2.webm
    
  3. 使用以下内容制作input.txt

    file 'output1.webm'
    file 'output2.webm'
    file 'original3.webm'
    
  4. 与 concat 分离器连接:

    ffmpeg -f concat -safe 0 -i concat.txt -c copy output.webm