1.我们选用单个命令
这面 -hwaccel auto,-threads auto,-preset ultrafast,-y都是为加速视频解析!
第一步去音频在截取
ffmpeg -ss 0 -t 283 -i a.mp4 -an -codec copy -crf 18 -y output_video.mp4
第二步音乐自增长截取
ffmpeg -hwaccel auto -i b.mp3 -i b.mp3 -threads auto -filter_complex concat=n=2:v=0:a=1 -ss 0 -t 283 -gpu 1 -preset ultrafast -y output_audio.mp3
第三步视频音乐音频融合,调节音量
ffmpeg -hwaccel auto -i output_video.mp4 -i output_audio.mp3 -i c.wav -threads auto -filter_complex [1:a]volume=0.100[a1];[2:a]volume=2.000[a2];[a1][a2]amix=inputs=2:duration=longest[a] -map 0:v -map [a] -c:v copy -preset ultrafast -c:a aac -gpu 1 -y output2_video.mp4
第四步图片设置居中标题
ffmpeg -hwaccel auto -i f.png -threads auto -vf drawtext=textfile='d.txt':fontcolor=yellow:fontsize=70:fontfile='7.ttf':x=(W-text_w)/2:y=(H-text_h)/2:shadowx=2:shadowy=2:shadowcolor=black -gpu 1 -preset ultrafast -y output_image.jpg
第五步视频设置封面
ffmpeg -i a.mp4 -i output_image.jpg -map 1 -map 0 -c copy -disposition:0 attached_pic -y test_output.mp4
第六步得到视频长宽
ffprobe -v error -select_streams v:0 -show_entries stream=width,height -of csv=s=x:p=0 a.mp4
第七步调整图片长宽与视频保持一致
ffmpeg -i output_image.jpg -vf scale=716:1276,setdar=4:3 -strict -2 -y output_image2.jpg
第八步视频设置封面
ffmpeg -hwaccel auto -i output2_video.mp4 -i output_image2.jpg -threads auto -filter_complex [0:v][1:v]overlay=0:0:enable='eq(n,0)' -gpu 1 -preset ultrafast -y result.mp4
这里第五步和第八步,都是加封面,只是意义不一样
2 合并命令,使用滤镜
这里假设我得到了音频的时间283秒
13命令和在一起
ffmpeg -hwaccel auto -i a.mp4 -i output_audio.mp3 -i c.wav -threads
auto -filter_complex "[0:v]trim=start=0:end=274,setpts=PTS-
STARTPTS[v2];[1:a]volume=0.5[a1];[2:a]volume=1.0[a2];[a1]
[a2]amix=inputs=2:duration=longest[a]" -map "[v2]" -map "[a]" -c:a
aac -q:v 18 -preset veryfast -strict -2 -gpu 1 -preset
ultrafast -y result_1.mp4
138命令和在一起
ffmpeg -hwaccel auto -i a.mp4 -i output_audio.mp3 -i c.wav -i
output_image2.jpg -threads auto -filter_complex "
[0:v]trim=start=0:end=283,setpts=PTS-STARTPTS[v2];[v2]
[3:v]overlay=0:0:enable='eq(n,0)'[v3];[1:a]volume=0.5[a1];
[2:a]volume=1.0[a2];[a1][a2]amix=inputs=2:duration=longest[a]" -map
"[v3]" -map "[a]" -c:a aac -q:v 18 -preset veryfast -strict -2
-gpu 1 -preset ultrafast -y result_2.mp4
1238 命令和在一起
ffmpeg -hwaccel auto -i a.mp4 -i b.mp3 -i c.wav -i output_image2.jpg
-i b.mp3 -threads auto -filter_complex "
[0:v]trim=start=0:end=283,setpts=PTS-STARTPTS[v2];[v2]
[3:v]overlay=0:0:enable='eq(n,0)'[v3];[1:a]
[4:a]concat=n=2:v=0:a=1[a4];[a4]atrim=duration=283[a5];
[a5]volume=0.5[a1];[2:a]volume=1.0[a2];[a1]
[a2]amix=inputs=2:duration=longest[a]" -map "[v3]" -map "[a]" -c:a
aac -q:v 18 -preset veryfast -strict -2 -gpu 1 -preset
ultrafast -y result_3.mp4
解释
当我们解析这个 FFmpeg 命令时,我们可以按顺序来理解它的各个部分:
-hwaccel auto:这个选项告诉 FFmpeg 使用自动选择的硬件加速。
-i a.mp4 -i b.mp3 -i c.wav -i output_image2.jpg -i b.mp3:这里列出了输入文件,分别是 a.mp4(视频文件)、b.mp3(音频文件,两次出现)、c.wav(音频文件)和 output_image2.jpg(图片文件)。
-threads auto:这个选项告诉 FFmpeg 使用自动选择的线程数。
-filter_complex:这个选项后面是一个复杂的滤镜图,用来处理多个输入流。
[0:v]trim=start=0:end=283,setpts=PTS-STARTPTS[v2]:从第一个输入视频中裁剪出前 283 秒,并将其设置为 v2。
[v2][3:v]overlay=0:0:enable='eq(n,0)'[v3]:将裁剪后的视频 v2 和第四个输入图片 3:v 进行叠加,并且在视频的第一帧上叠加图片,最后得到 v3。
[1:a][4:a]concat=n=2:v=0:a=1[a4]:将第二个音频 1:a 和第五个音频 4:a 进行连接,得到 a4。
[a4]atrim=duration=283[a5]:裁剪连接后的音频,只保留前 283 秒,得到 a5。
[a5]volume=0.5[a1]:将裁剪后的音频的音量设置为原来的一半,得到 a1。
[2:a]volume=1.0[a2]:将第三个音频的音量设置为原来的一倍,得到 a2。
[a1][a2]amix=inputs=2:duration=longest[a]:将音频 a1 和 a2 进行混合,并且将混合后的音频时长设置为最长的输入音频,得到最终音频 a。
-map "[v3]" -map "[a]":这里指定了要使用的视频流和音频流,分别是 v3 和 a。
-c:a aac:指定音频编码器为 AAC。
-q:v 18:指定视频质量。
-preset veryfast:指定视频编码速度为 veryfast。
-strict -2:这个选项告诉 FFmpeg 在使用某些编码器(如 AAC)时使用兼容性模式。
-gpu 1:这个选项指定要使用的 GPU 设备编号。
-preset ultrafast:指定视频编码速度为 ultrafast。
-y:覆盖输出文件而不询问。
result_3.mp4:指定输出文件名为 result_3.mp4。
这个命令的目的是从 a.mp4 中提取视频,从 b.mp3 和 c.wav 中提取音频,将图片 output_image2.jpg 叠加在视频的第一帧上,调整音频的音量,最后将视频和音频混合成一个文件 result_3.mp4。