ffmpeg实践

395 阅读3分钟

前言

Mac 给 ffmpeg 配置环境变量:

执行命令行:

`open -e ~/.bash_profile

export PATH=$PATH:/Users/luna/Downloads/ffmpeg

source ~/.zshrc || source ~/.bash_profile // ~/.zshrc~/.bash_profile (取决于你使用的 shell)来永久地修改 PATH`

如果在执行source ~/.zshrc时报错,可以尝试先清下缓存再试。

运行命令: brew cleanup

常用命令:

open -e ~/.bash_profile

source ~/.bash_profile

echo $PATH

案例1

批量将 /Users/luna/Desktop/vlog/file 文件夹下的多个mp3文件和image.jpeg图片合成多个mp4文件

cd /Users/luna/Desktop/vlog/file

for audio in *.mp3 do ffmpeg -loop 1 -i image.jpeg -i "$audio" -c:v libx264 -tune stillimage -c:a aac -b:a 192k -pix_fmt yuv420p -shortest "${audio%.*}.mp4" done

说明

  • -loop 1:使得图片在视频中循环播放
  • -i image.jpeg:输入的图片文件
  • -i "$audio":输入的音频文件
  • -c:v libx264-c:a aac:设置视频和音频的编码格式
  • -tune stillimage:优化设置以适应静态图片
  • -b:a 192k:设置音频的比特率
  • -pix_fmt yuv420p:设置像素格式
  • -shortest:使输出的视频长度与最短的输入流(这里是音频流)长度一致
  • "${audio%.*}.mp4":输出的 mp4 文件的名称,文件名与输入的音频文件相同,只是扩展名改为 .mp4

案例2

将/Users/luna/Desktop/vlog/file 目录下多个mp3文件合成一个output.mp3

for f in *.mp3; do echo "file '$f'" >> mylist.txt; done ffmpeg -f concat -safe 0 -i mylist.txt -c copy output.mp3

说明

  • 把每一个 mp3 文件的文件名添加到 mylist.txt 文件中,前面加上 "file " 这是为了创建一个 ffmpeg 可以识别的播放列表
  • -f concat:设置输入格式为 concat,这是 ffmpeg 的一个特殊的输入格式,用于连接多个文件
  • -safe 0:关闭 ffmpeg 的安全检查,这是因为我们的输入文件列表来自于我们自己创建的 mylist.txt,我们知道它是安全的
  • -i mylist.txt:设置输入文件为 mylist.txt,这个文件包含了我们要合并的所有 mp3 文件的文件名
  • -c copy:复制输入流到输出,不进行转码,这样可以保持原始质量并减少处理时间
  • output.mp3:设置输出文件名为 output.mp3

案例3

将output.mp3文件和image.jpeg 图片合成output.mp4

ffmpeg -loop 1 -i image.jpeg -i output.mp3 -c:v libx264 -tune stillimage -c:a aac -b:a 192k -pix_fmt yuv420p -shortest output.mp4

说明

  • ffmpeg:这是命令行工具 ffmpeg 的调用命令,用于处理多媒体内容,如音频,视频和图像。
  • -loop 1:表示将输入的图片循环播放。
  • -i image.jpeg:表示输入的图片文件是 image.jpeg。
  • -i output.mp3:表示输入的音频文件是 output.mp3。
  • -c:v libx264:表示将视频流(v)编码为 libx264 格式。libx264 是一种广泛使用的高效视频编码格式。
  • -tune stillimage:对编码设置进行优化,使其适合静态图像输入。
  • -c:a aac:表示将音频流(a)编码为 aac 格式。aac 是一种常用的音频编码格式。
  • -b:a 192k:表示设置音频流的比特率为192千比特/秒,用来控制音频质量。
  • -pix_fmt yuv420p:表示设置像素格式为 yuv420p。yuv420p 是一种常用的像素格式,它具有良好的兼容性。
  • -shortest:这个参数的作用是将输出的视频长度与最短的输入流(在这个情况下,应该是音频流)保持一致。
  • output.mp4:表示输出的视频文件名是 output.mp4,文件格式为 mp4。

案例4

将output.mp4截取前两分钟

ffmpeg -i output.mp4 -t 00:02:00 -c copy output2.mp4

说明

  • -i output.mp4-i 参数后面是输入文件的名称,这里的输入文件是 output.mp4
  • -t 00:02:00-t 参数后面是你想从输入文件中提取的内容的长度。在这里,我们设定提取的长度为两分钟。
  • -c copy-c 参数后面跟的是你想用于输出文件的编解码器。使用 copy 作为参数值表示我们想直接复制输入文件的编解码器,也就是说,不对输入的视频或音频流进行转码。
  • output2.mp4:这是输出文件的名称。