我正在尝试拍摄视频提取帧和音频。然后我对帧进行一些压缩,然后我想将图像帧与音频组合以创建视频。
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.如何将音频与图像序列组合
答案 0 :(得分:1)
您似乎已经了解如何从视频中提取音频流,因此我们将跳过该步骤。
假设您有一个名为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