linux - 使用 ffmpeg 将音频与图像和视频连接起来

标签 linux audio video ffmpeg

我有 1 张图片、1 个音频文件和 1 个视频。我想将它们全部合并制作一个视频,该视频将

  • 显示图像并播放前 10 秒的音频文件
  • 播放视频文件

这是我到目前为止尝试做的事情。

ffmpeg \
-loop 1 -framerate 24 -t 10 -i item1.jpg \
-i "https://audio-ssl.itunes.apple.com/apple-assets-us-std-000001/Music/66/58/f7/mzi.eoocfriy.aac.p.m4a" \
-i item4.mp4 \
-filter_complex \
"[0]scale=432:432,setdar=1[img1]; \
 [1]volume=1[aud1]; \
 [2]scale=432:432,setdar=1[vid1]; \ 
 [img1][aud1][vid1] concat=n=3:v=1:a=1" \
outputfile.mp4

我得到了错误:

[Parsed_setdar_4 @ 0x3063780] Media type mismatch between the 'Parsed_setdar_4' filter output pad 0 (video) and the 'Parsed_concat_6' filter input pad 1 (audio) [AVFilterGraph @ 0x30479a0] Cannot create the link setdar:0 -> concat:1 Error initializing complex filters. Invalid argument

我尝试用谷歌搜索但仍然无法弄清楚我做错了什么?

更新: 我运行了以下命令:

ffmpeg \
-loop 1 -framerate 24 -t 10 -i item1.jpg \
-t 10 -i "https://audio-ssl.itunes.apple.com/apple-assets-us-std-000001/Music/66/58/f7/mzi.eoocfriy.aac.p.m4a" \
-i item4.mp4 \
-f lavfi -t 1 -i anullsrc \
-filter_complex \
"[0]scale=432:432,setsar=1[img1]; \
[2]scale=432:432,setsar=1[vid1]; \ 
[img1][1][vid1][3] concat=n=2:v=1:a=1" \
outputfile.mp4

出现以下错误:

ffmpeg version 3.3.3 Copyright (c) 2000-2017 the FFmpeg developers
  built with gcc 4.8 (Ubuntu 4.8.4-2ubuntu1~14.04.3)
  configuration: --extra-libs=-ldl --prefix=/opt/ffmpeg --mandir=/usr/share/man --enable-avresample --disable-debug --enable-nonfree --enable-gpl --enable-version3 --enable-libopencore-amrnb --enable-libopencore-amrwb --disable-decoder=amrnb --disable-decoder=amrwb --enable-libpulse --enable-libfreetype --enable-gnutls --disable-ffserver --enable-libx264 --enable-libx265 --enable-libfdk-aac --enable-libvorbis --enable-libtheora --enable-libmp3lame --enable-libopus --enable-libvpx --enable-libspeex --enable-libass --enable-avisynth --enable-libsoxr --enable-libxvid --enable-libvidstab --enable-libwavpack --enable-nvenc --enable-libzimg
  libavutil      55. 58.100 / 55. 58.100
  libavcodec     57. 89.100 / 57. 89.100
  libavformat    57. 71.100 / 57. 71.100
  libavdevice    57.  6.100 / 57.  6.100
  libavfilter     6. 82.100 /  6. 82.100
  libavresample   3.  5.  0 /  3.  5.  0
  libswscale      4.  6.100 /  4.  6.100
  libswresample   2.  7.100 /  2.  7.100
  libpostproc    54.  5.100 / 54.  5.100
Input #0, image2, from 'item1.jpg':
  Duration: 00:00:00.04, start: 0.000000, bitrate: 8365 kb/s
    Stream #0:0: Video: mjpeg, yuvj420p(pc, bt470bg/unknown/unknown), 432x432 [SAR 1:1 DAR 1:1], 24 fps, 24 tbr, 24 tbn, 24 tbc
Input #1, mov,mp4,m4a,3gp,3g2,mj2, from 'https://audio-ssl.itunes.apple.com/apple-assets-us-std-000001/Music/66/58/f7/mzi.eoocfriy.aac.p.m4a':
  Metadata:
    major_brand     : M4A
    minor_version   : 0
    compatible_brands: M4A mp42isom
    creation_time   : 1983-06-16T23:20:44.000000Z
    iTunSMPB        :  00000000 00000840 00000000 00000000001423C0 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
  Duration: 00:00:29.98, start: 0.047891, bitrate: 285 kb/s
    Stream #1:0(eng): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 271 kb/s (default)
    Metadata:
      creation_time   : 1983-06-16T23:20:44.000000Z
Input #2, mov,mp4,m4a,3gp,3g2,mj2, from 'item4.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    creation_time   : 1970-01-01T00:00:00.000000Z
    encoder         : Lavf53.24.2
  Duration: 00:00:13.70, start: 0.000000, bitrate: 615 kb/s
    Stream #2:0(und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p, 320x240 [SAR 1:1 DAR 4:3], 229 kb/s, 15 fps, 15 tbr, 15360 tbn, 30 tbc (default)
    Metadata:
      creation_time   : 1970-01-01T00:00:00.000000Z
      handler_name    : VideoHandler
    Stream #2:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, 5.1, fltp, 382 kb/s (default)
    Metadata:
      creation_time   : 1970-01-01T00:00:00.000000Z
      handler_name    : SoundHandler
Input #3, lavfi, from 'anullsrc':
  Duration: N/A, start: 0.000000, bitrate: 705 kb/s
    Stream #3:0: Audio: pcm_u8, 44100 Hz, stereo, u8, 705 kb/s
[AVFilterGraph @ 0x3955e20] No such filter: ' '
Error initializing complex filters.
Invalid argument

最佳答案

当连接成对的流时,对于每个段,连接过滤器需要一对对应的输入。因此,如果您连接 1 个视频流和 2 个音频流,则每个片段输入都应为 [v][a][a]

因此,在这种情况下,需要一个虚拟音频与第二个视频配对。

ffmpeg \
-loop 1 -framerate 24 -t 10 -i item1.jpg \
-t 10 -i "https://audio-ssl.itunes.apple.com/apple-assets-us-std-000001/Music/66/58/f7/mzi.eoocfriy.aac.p.m4a" \
-i item4.mp4 \
-f lavfi -t 1 -i anullsrc \
-filter_complex \
"[0]scale=432:432,setsar=1[img1]; \
 [2]scale=432:432,setsar=1[vid1]; \
 [img1][1][vid1][3] concat=n=2:v=1:a=1" \
outputfile.mp4

anullsrc 提供虚拟音频。

介绍音频必须限制为图像持续时间,因为连接过滤器使用每个片段中较长流的持续时间。

使用 setsar 而不是 setdar 因为 SAR 是实际参数 changed并且有可能在化简为有理数后,SARs 可能不匹配。

concat 中的

n 应该是 2 因为它指定了配对段的数量,而不是输入的总数。

关于linux - 使用 ffmpeg 将音频与图像和视频连接起来,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50249695/

相关文章:

cocoa - 如何使用 QTKit 设置 QTMedia/QTTrack 的 Alpha 模式

c# - .NET 视频播放库允许更改播放速率?

linux - 根据文件名创建目录名

linux - 当/var 文件系统使用率达到阈值时发出警报的程序

linux - 从 linux dns 服务器重定向域名

ios - 如何将 MPMediaItemCollection 保存到数据库?

go - 使用go lang获取caf音频文件的持续时间

linux - 如何在centos 6上退出linux sendmail

audio - 无法为Wwise安装GVR Audio SDK

swift - 如何附加视频或电影文件然后快速发送电子邮件