audio - 将图像序列与音频结合并制作视频

标签 audio video ffmpeg

我正在尝试提取视频帧和音频。然后我对帧进行一些压缩,然后我想将图像帧与音频结合起来创建视频。

1.基于fps(无损)从视频中创建帧

ffmpeg  -i  big_buck_bunny_480p_surround-fix.avi -q:v 1 ./vidtest/out%d.jpg

这里的问题是图像的质量是94基于 graphicsmagick ,我怎样才能以原始质量提取帧。

2.获取音频
ffmpeg -i big_buck_bunny_480p_surround-fix.avi  -vn -acodec copy  big_buck_bunny_480p_surround-fix.ac3

3.如何将音频与图像序列结合起来

最佳答案

您似乎已经了解如何从视频中提取音频流,因此我们将跳过该步骤。

假设您有一个名为 video.mp4 的视频文件。和一个名为 audio.mp3 的音频文件.您想从视频中截取静止图像并使用 audio.mp3 创建幻灯片作为音轨。

首先,我们将提取静止图像。 fps=1/10表示每十秒提取一次帧。 -ss 00:00:5意味着我们将从开始五秒开始。视频的第一位通常是包含大部分黑色的淡入,因此可能需要跳过它。

ffmpeg -ss 00:00:5 -i video.mp4 -vf fps=1/10 image%03d.png

接下来我们将计算产生了多少图像。这将很容易知道我们何时指定幻灯片的帧速率。
imgcount=$(find . -maxdepth 1 -name "image*" | wc -l)

echo $imgcount

音轨的持续时间也很高兴知道。对于 MP3 和类似格式,尤其是在以可变比特率编码时,持续时间的估计可能令人担忧。为了解决这个问题,可以将音频文件转换为 WAV 文件 f.ex,然后估计持续时间。
adur=$(ffprobe -v error -select_streams a:0 -show_entries stream=duration \
  -of default=noprint_wrappers=1:nokey=1 audio.mp3)

echo $adur

现在我们将图像重新组合成幻灯片。 $imgcount/$adur指定静止图像的显示速率,以便持续时间与音频文件的持续时间相当匹配。 -r 25指定视频的实际帧速率。并非所有格式和视频播放器都接受不寻常的帧速率。
ffmpeg -framerate $imgcount/$adur -i image%03d.png -c:v libx264 -r 25 \
  -pix_fmt yuv422p slideshow.mp4

这将混合音频文件和幻灯片文件并修剪到两者中最短的持续时间。如果容器格式支持音频文件的编解码器,则此方法有效,否则必须重新转换音频文件或选择其他容器格式。我发现 Matroska (.mkv) 非常有用。在 .avi 的情况下和 .ac3.mp4.mp3应该没有问题。
ffmpeg -i slideshow.mp4 -i audio.mp3 -codec copy -shortest slideshow-sound.mp4

关于audio - 将图像序列与音频结合并制作视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43293976/

相关文章:

python - 比较两个音频文件的信号的功能

android - 访问内部存储的媒体文件 - Android 上的 MediaPlayer

audio - 如何使用 ffmpeg 更改音频帧速率?

java - 使用java和Web Socket在Web浏览器中显示RTSP直播流

ffmpeg - 在 Windows 上连接会抛出 "Invalid data found when processing input",而它适用于 Mac 和 Linux

linux - FFMPEG Bash 自动化

php - 在PHP中上传文件到服务器错误

javascript - 通过在移动设备上最大化 plyr.io 来强制横向模式?

opencv - JibJab 类面部置换

audio - 如何使用 ffmpeg 叠加/缩混两个音频文件