FFmpeg常用一些命令整理

常见的视频分辨率:

  1. 480p:640x480
  2. 720p:1280x720
  3. 1080p:1920x1080
  4. 2K:2560x1440
  5. 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) 等参数,以适应你的视频内容和文件大小。

标签: FFmpeg

相关文章

跨平台高效无损视频剪辑神器-LosslessCut

LosslessCut,顾名思义是"无损剪切"工具,基于功能强大的FFmpeg引擎。与传统的视频剪辑工具不同,LosslessCut让你无需学习复杂的命令行操作就可以快速高效地完成视频裁剪。它最...

图片Base64编码

CSR生成

图片无损放大

图片占位符

Excel拆分文件