FFmpeg常用一些命令整理
常见的视频分辨率:
- 480p:640x480
- 720p:1280x720
- 1080p:1920x1080
- 2K:2560x1440
- 4K:3840x2160
查看视频信息
ffmpeg -i 文件名
提取音频
ffmpeg -i input.mp4 -vn -acodec aac -q:a 2 output.m4a
将提取出的音频文件合并进一个没有视频轨道的MP4文件中
ffmpeg -i video.mp4 -i audio.m4a -c copy -map 0:v -map 1:a -shortest output.mp4
在这个命令中:
-i video.mp4
是指定没有音频的视频文件。-i audio.m4a
是指定要合并的音频文件。-c copy
表示直接复制视频和音频流,不进行重新编码,这样可以保持最高质量并加快处理速度。-map 0:v
是指定使用第一个输入文件(视频.mp4)的第一个视频流(v)。-map 1:a
是指定使用第二个输入文件(audio.m4a)的第一个音频流(a)。-shortest
选项告诉FFmpeg在遇到较短的输入文件时停止编码,这样可以确保输出的视频长度与最短的输入文件相同。output.mp4
是合并后的输出文件名。
将当前目录下所有的avi文件转为mp4,并保留原avi文件名前(不带扩展名)
这一行定义了一个名为aviFile的变量,该变量的值是当前目录下所有扩展名为“.avi”的文件的名称
for aviFile in *.avi; do ffmpeg -i "$aviFile" -c:v libx264 -c:a aac -b:v 1M -maxrate 1M -bufsize 1M "${aviFile%.*}.mp4"; done
- -i: 指定输入文件路径。由于我们在循环中迭代不同的AVI文件,所以这里使用的是$aviFile环境变量。
- -c:v libx264: 将视频编码为H.264格式。
- -c:a aac: 将音频编码为AAC格式。
- -b:v 1M: 将视频比特率设置为1兆位每秒。
- -maxrate 1M: 设置最大数据速率限制。
- -bufsize 1M: 设置缓冲区大小。
- "${aviFile%.*}.mp4": 是另一个Bash参数展开操作,用于创建新的文件名。它移除$aviFile中的扩展名并以“.mp4”结尾。这样就得到了一个包含原始文件名前缀的新文件名
将当前目录下所有的mp4文件取一帧视频图像做封面图片,并按视频文件名命名图片
for f in *.mp4; do
ffmpeg -i "$f" -ss 00:00:01 -vframes 1 -vf scale=-1:320 "${f%.*}.jpg"
done
以下是该命令的详细解释:
for f in *.mp4; do
:这是一个循环,用于遍历当前目录下的所有mp4文件。ffmpeg -i "$f" -ss 00:00:01 -vframes 1 -vf scale=-1:320
:这是ffmpeg命令,用于从视频中提取第一帧并保存为图像文件。-i "$f"
:指定输入视频文件。-ss 00:00:01
:指定从视频的第1秒开始截取第一帧。-vframes 1
:指定只输出一帧图像。-vf scale=-1:320
:指定输出图像的分辨率为320x240。
利用FFMPEG剪辑功能之批量掐头去尾指定长度并清除metadata媒体信息
从一些DJ网站下载的音乐,很多开头或者结尾带有网站广告,且音乐文件内包含的全是广告信息...
于是有了这个脚本,注意:此脚本会删除原始文件,不需要此功能删除&& rm "$i"
其中18为片尾18秒的广告时间
for i in *.mp3 ; do
ffmpeg -i "$i" -ss 18 -i "$i" -c copy -map 0:a -map 1:a -shortest -f nut - | ffmpeg -y -f nut -i - -c copy -map 0:0 -map_metadata -1 "out/$i" && rm "$i"
done
重新编码或调整 MP4 文件,使其与 macOS 兼容,保持 MP4 格式但使其可预览
使用 ffmpeg
将视频重新编码为 macOS 兼容的格式。通常,macOS 默认支持 H.264 视频编码和 AAC 音频编码。以下命令会将视频重新编码为 H.264 视频和 AAC 音频,同时保持 MP4 格式:
ffmpeg -i input.mp4 -c:v libx264 -c:a aac -movflags +faststart output.mp4
参数说明:
-i input.mp4
:输入文件input.mp4
。-c:v libx264
:将视频编码为 H.264 格式。-c:a aac
:将音频编码为 AAC 格式。-movflags +faststart
:这一步很重要,它会将 MP4 文件中的元数据放在文件的开头,允许视频在尚未完全下载时就可以进行流式播放和预览。output.mp4
:输出文件名。
仅调整元数据(无重新编码)
如果视频文件已经使用 H.264 和 AAC 编码,但无法预览,可以仅通过 -movflags +faststart
来调整 MP4 元数据,而无需重新编码:
ffmpeg -i input.mp4 -c copy -movflags +faststart output.mp4
参数说明:
-c copy
:不重新编码视频和音频流,只复制流。-movflags +faststart
:调整 MP4 文件的元数据位置,使其支持快速启动和预览。
将当前目录下的所有mp4视频合并成一个新的mp4文件,并修复不能预览的情况
1.生成包含所有 MP4 文件的列表
for f in *.mp4; do echo "file '$f'" >> filelist.txt; done
2.使用 ffmpeg 合并 MP4 文件
ffmpeg -f concat -safe 0 -i filelist.txt -c copy output.mp4
-f concat
:告诉ffmpeg
使用文件合并模式。-safe 0
:防止ffmpeg
由于路径安全问题而报错。-i filelist.txt
:指定输入文件列表。-c copy
:直接拷贝视频和音频流,不进行重新编码,确保合并速度快且无损。output.mp4
:输出文件名。
至于无法预览的问题,看上面的记录...
将视频文件转为gif动画
你可以使用 ffmpeg
将 .mov
视频转换为 .gif
格式,以下是一个基本的命令示例:
ffmpeg -i input.mov -vf "fps=10,scale=320:-1:flags=lanczos" -loop 0 output.gif
命令解释:
-i input.mov
: 指定输入文件。-vf "fps=10,scale=320:-1:flags=lanczos"
: 使用视频过滤器,设置帧率为10帧每秒,并将宽度缩放到320像素(-1
表示按比例调整高度),lanczos
是缩放时的高质量过滤器。-loop 0
: 表示生成的 GIF 循环播放(0
表示无限循环)。
你可以根据需要调整帧率 (fps
)、输出 GIF 的尺寸 (scale
) 等参数,以适应你的视频内容和文件大小。
版权声明:本文为原创文章,版权归 全栈开发技术博客 所有。
本文链接:https://www.lvtao.net/tool/ffmpeg-use.html
转载时须注明出处及本声明