【问题标题】:ffmpeg images and audio to videoffmpeg 图像和音频到视频
【发布时间】:2016-02-21 08:08:53
【问题描述】:

我有几个图像(幻灯片)和几个音频文件,我想使用 C#、AForge 和 ffmpeg 或您可能建议的任何其他东西进行组合。 有几个音频文件,每个文件都读取一个图像中的文本。

图像分为两组 - 具有相应音频文件的图像和没有相应音频文件的图像。

  1. 没有音频的图像应该显示一段预定义的时间(对于 例如 4 秒)。
  2. 应该显示带有音频的图像,音频在它们出现时开始播放 只要相应的音频播放,就会出现。

逻辑和机制很简单,就是不知道怎么实现。
我将使用哪些类或对象?
我需要在两个图像之间绘制每一帧吗?

注意:图片代表幻灯片,即 PowerPoint 演示文稿,其中每张幻灯片都保存为 jpeg 图片。

编辑:示例 假设我有 5 张图片,其中两张有对应的音频文件,因此有两个音频文件。

图像 1 显示 4 秒。

图像 2 出现,音频 1 播放,音频停止,图像 2 消失。

图像 3 显示 4 秒。

图像 4 显示 4 秒。

图像 5 出现,音频 2 播放,音频停止,图像 5 消失。

【问题讨论】:

  • 我假设所有图像都具有相同的属性,但音频文件是否也相似,或者它们在通道布局、采样率、采样格式等方面会有所不同?此外,如果您显示有关您的典型输入和您的ffmpeg 信息的一些详细信息,它将提供信息。请显示完整的输出:ffmpeg -i image.jpg -i audio.foo
  • 不幸的是,我不明白你说的大部分内容(我是新手)。音频文件将是 mp3 或 wav,都是相同的,并以类似的方式创建(因此您谈到的所有这些细节都应该相同)。我的输入是几个相似的 Jpeg 图像和几个相似的音频文件(长度不同,虽然很短)。
  • 这可能是:输入 #1,mp3,来自“audio.mp3”:持续时间:00:01:02.64,开始:0.000000,比特率:32 kb/s 流 #1:0:音频: mp3, 22050 Hz, 单声道, s16p, 32 kb/s
  • 谢谢。奇怪的是图像有.jpg 后缀,但ffmpeg 表示它们是PNG。

标签: c# ffmpeg


【解决方案1】:

连接

您可以使用concat filter。使用您在示例中提供的参数:

ffmpeg \
-f lavfi -t 1 -i anullsrc=channel_layout=stereo:sample_rate=44100 \
-loop 1 -t 4 -i 01.jpg \
-loop 1 -t 3 -i 02.jpg \
-i 02.wav \
-loop 1 -t 4 -i 03.jpg \
-loop 1 -t 4 -i 04.jpg \
-loop 1 -t 6 -i 05.jpg \
-i 05.wav \
-filter_complex \
"[1:0][0:0][2:0][3:0][4:0][0:0][5:0][0:0][6:0][7:0]concat=n=5:v=1:a=1[vv][a]; \
 [vv]format=yuv420p[v]" \
-map "[v]" -map "[a]" \
-c:v libx264 -c:a aac -movflags +faststart output.mp4

获取持续时间

您可以使用ffprobe 获取每个音频输入的持续时间:

ffprobe -v error -select_streams a:0 -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 02.wav

结果输出可用作ffmpeg 命令中相应-t 的变量。

注意事项

    1234563 05.jpg。
  • 您没有提到所需的输出格式,所以我在 MP4 容器中选择了 H.264 视频和 AAC 音频。如果这不是您想要的,请移除 -movflags +faststart,移除格式过滤器,然后重命名视频地图。

  • anullsrc filter 生成静音音频。它的持续时间只需要比您最短的音频输入短:concat 过滤器将自动填充其余部分以匹配相应的视频片段。如果需要,您可以调整 channel_layout 和 sample_rate 以匹配您的音频输入。请注意,如果它们不同,则 concat 过滤器将自动选择通用的采样率、采样格式和通道布局,因此如果输出与预期不同,那就是原因。

  • 或者,您可以使用流说明符将输入命名为 concat 过滤器。我通常会这样做,但在脚本命令中它可能不太有意义。无论如何,在这种情况下,它将是:

    [1:v][0:a][2:v][3:a][4:v][0:a][5:v][0:a][6:v][7:a]
    
  • 调整这些示例以使用您最喜欢的脚本语言由您决定。

【讨论】:

  • 感谢您的快速而有帮助的回答。不幸的是我的问题不够清楚,我会编辑它。很抱歉给您带来麻烦,再次感谢。
  • @user5830891 我改了答案。
  • 非常感谢。我试着做这项工作,但我有一个我无法解决的问题。 pastebin.com/reVYwJqf 它给出了错误:无法为'\'\找到合适的输出格式:无效参数。
  • @user5830891 您需要显示命令的完整控制台输出。
  • 当然,pastebin.com/i6XzURyE。谢谢
猜你喜欢
  • 1970-01-01
  • 2016-04-26
  • 2023-03-23
  • 2016-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-19
相关资源
最近更新 更多