ffmpeg - 将音频文件与图像连接起来

标签 ffmpeg

我正在尝试使用一个命令将多个音频文件和一个图像连接到一个视频文件中。
我在目录中有 mp3 文件列表和播放列表文件 (.m3u)。

我设法做到了,但我的解决方案很糟糕:

  • 读取播放列表文件并以 ffmpeg 所需格式创建一个新的 .txt
  • 使用 .txt 将音频文件连接成 .mp3
  • 将大音频文件和静态图像连接成视频

  • 这会创建 2 个我必须删除的不必要文件。

    我尝试了不同的命令
    ffmpeg -loop 1 -framerate 1 -i myImage.jpg -i file1.mp3 -i file2.mp3 -i file3.mp3 -filter_complex '[0:0][1:0][2:0]concat=n=3:v=0:a=1' -tune stillimage -shortest output.mp4
    

    但是我得到一个 Error initializing complex filters. Invalid argument错误

    另一个问题是,我正在使用的系统在文件夹名称中有空格。
    我尝试使用 -i "concat:file1.mp3|file2.mp3|..."但是我不能使用双引号来引用路径,所以我得到一个无效的参数错误。

    非常感谢您的帮助。

    最佳答案

    方法一:concat demuxer

    制作 input.txt包含以下内容:

    file 'file1.mp3'
    file 'file2.mp3'
    file 'file3.mp3'
    

    运行ffmpeg :
    ffmpeg -loop 1 -framerate 1 -i myImage.jpg -f concat -i input.txt -filter_complex "[0]scale='iw-mod(iw,2)':'ih-mod(ih,2)',format=yuv420p[v]" -map "[v]" -r 15 -tune stillimage -map 1:a -shortest -movflags +faststart output.mp4
    

    输入到 concat demuxer 的所有 MP3 文件必须具有相同的 channel 布局和采样率。如果没有,则使用 -ac 转换它们。和 -ar选项,所以它们都是一样的。

    方法二:concat filter

    更新: -shortest 似乎有一个错误不使用 concat 过滤器(我一直忘记这一点)。使用 concat demuxer 见上述方法,或替换 -shortest-t . -t 的值应该等于所有三个 MP3 文件的总持续时间。
    ffmpeg -loop 1 -framerate 1 -i myImage.jpg -i file1.mp3 -i file2.mp3 -i file3.mp3 -filter_complex "[0]scale='iw-mod(iw,2)':'ih-mod(ih,2)',format=yuv420p[v];[1:a][2:a][3:a]concat=n=3:v=0:a=1[a]" -map "[v]" -r 15 -map "[a]" -tune stillimage -shortest -movflags +faststart output.mp4
    

    选项说明
  • scale filter 使图像具有均匀的宽度和高度,这是使用 libx264 输出 YUV 4:2:0 时所需的。
  • format filter 将色度子采样设置为 4:2:0,否则 libx264 会尝试限制子采样,但大多数玩家只能处理 4:2:0。
  • concat过滤器正在接受 file1.mp3 , file2.mp3 , 和 file3.mp3作为输入。您的原始命令试图将视频连接到音频,导致 Invalid argument .
  • -map "[v]"-filter_complex 中选择视频输出.
  • -r 15将输出帧速率设置为 15,因为大多数玩家无法处理 1 fps。这比设置 -framerate 15 更快。 .
  • -map "[a]"-filter_complex 中选择音频输出.
  • -map 1:a从输入 #1 中选择音频(作为计数的第二个输入从 0 开始)。
  • -movflags +faststart编码完成后,此选项将一些数据从 MP4 输出文件的末尾移动到开头。这样可以更快地开始播放,否则必须先下载完整的文件。
  • 关于ffmpeg - 将音频文件与图像连接起来,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62245304/

    相关文章:

    video - ffmpeg 使用 -movflags faststart

    ffmpeg - 如果流编码是 rawvideo,如何按流方式转换 mkv 文件?

    windows - 如何处理文件夹名称中的空格

    ffmpeg 在 CentOS 6.4 上输出空白图像文件

    video - 使用 fps 过滤器的 ffmpeg 时间戳信息与 ffprobe 不一致

    Python VTK,如何录制视频?

    c# - 通过 c#/dotnet 核心中的命名管道卸载到 ffmpeg

    ffmpeg - AV_CODEC_FLAG2_FAST 在解码 H.264 中的作用

    javascript - 流式传输不同语言的 mp4 视频 (ExpressJs)

    ffmpeg - omxplayer - 目录的无缝循环