我正在使用 FFMPEG 进行多项操作。我有5个文件。
我正在做的是将所有 480P 视频与黑色背景合并。
第 1 步:合并 intro_image.jpg 和 intro_audio.mp3 以创建 intro_video.mp4
ffmpeg -loop 1 -i #{params[:intro_image].path} -i #{params[:intro_audio].path} -vf 'scale=640:480:force_original_aspect_ratio=decrease,pad=640:480:-1:-1:color=black' -c:v libx264 -c:a aac -strict experimental -b:a 192k -shortest #{dir}/#{intro_video_name}
第 2 步:合并 outro_image.jpg 和 outro_audio.mp3 以创建 outro_video.mp4
ffmpeg -loop 1 -i #{params[:outro_image].path} -i #{params[:outro_audio].path} -vf 'scale=640:480:force_original_aspect_ratio=decrease,pad=640:480:-1:-1:color=black' -c:v libx264 -c:a aac -strict experimental -b:a 192k -shortest #{dir}/#{outro_video_name}
第 3 步:我检查user_video.mp4
. 如果不是那么:
ffmpeg -i #{params[:video].path} -f lavfi -i anullsrc -c:v copy -c:a aac -shortest #{video_path}
第 4 步:根据提供的start_time
&修剪用户视频end_time
。
ffmpeg -i movie.mp4 -ss 00:00:03 -t 00:00:08 -async 1 cut.mp4
第 5 步:合并所有三个视频。
ffmpeg -y -i #{dir}/#{intro_video_name} -i #{video_path} -i #{dir}/#{outro_video_name} -filter_complex '[0:v]scale=640x480,setsar=1[v0];[1:v]scale=640:480:force_original_aspect_ratio=decrease,pad=640:480:-1:-1:color=black,setsar=1[v1];[2:v]scale=640x480,setsar=1[v2];[v0][0:a][v1][1:a][v2][2:a]concat=n=3:v=1:a=1' -ab 48000 -ac 2 -ar 22050 -s 640x480 -vcodec libx264 -crf 27 -preset ultrafast -vsync vfr #{dir}/#{final_video_name}
如果总文件大小为 10 MB,所有这些步骤大约需要 40 秒。我正在寻找一种在不损失视频质量的情况下优化这些命令的方法。
为了正确连接,所有输入必须具有相同的属性,因此在连接之前使用多个过滤器使它们完全相同:
ffmpeg -loop 1 -t 7 -framerate 25 -i intro_image.jpg -i intro_audio.mp3 -loop 1 -t 7 -framerate 25 -i outro_image.jpg -i outro_audio.mp3 -i user_video.mp4 -filter_complex "[0:v]scale=640:480:force_original_aspect_ratio=decrease,pad=640:480:-1:-1:color=black,format=yuv420p,setsar=1[introv];[2:v]scale=640:480:force_original_aspect_ratio=decrease,pad=640:480:-1:-1:color=black,format=yuv420p,setsar=1[outrov];[4:v]scale=640:480:force_original_aspect_ratio=decrease,pad=640:480:-1:-1:color=black,format=yuv420p,fps=25,setsar=1[userv];[1:a]aformat=r=44100:cl=stereo[introa];[4:a]aformat=r=44100:cl=stereo[usera];[3:a]aformat=r=44100:cl=stereo[outroa];[introv][introa][userv][usera][outrov][outroa]concat=n=3:v=1:a=1[v][a]" -map "[v]" -map "[a]" -movflags +faststart output.mp4
scale=640:480:force_original_aspect_ratio=decrease,pad=640:480:-1:-1:color=black
-缩放和填充过滤器以使图像/视频适合 640x480,如使用 ffmpeg 调整视频大小以适合静态大小中所示
format=yuv420p
-格式过滤器使色度子采样相同。或者,您可以在 concat 的输出中仅使用一个格式过滤器实例。
setsar=1
- setar过滤器使纵横比相同。concat 过滤器要求所有段具有相同的纵横比。
fps=25
- fps过滤器用于设置用户视频的帧速率以匹配图像的帧速率。因为您的输入是任意的,所以您需要使用 fps 过滤器来设置特定的帧速率。
aformat=r=44100:cl=stereo
- 一种格式过滤器,使所有音频具有相同的采样率和通道布局。
[introv][introa][userv][usera][outrov][outroa]concat=n=3:v=1:a=1[v][a]
concat过滤器将所有段连接/连接成单个输出。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句