ffmpeg常用命令(获取视频缩略图等)

截取视频生成gif缩略图:

ffmpeg -i test.avi -ss 1 -t 5 -ac 2 -ab 128k -s 90*80 -y -f gif out.gif

截取视频生成jpg缩略图:

ffmpeg -i test.avi -ss 0.5 -vframes 1 -r 1 -ac 2 -ab 128k  -s 90x80 -y -f mjpeg out2.jpg
  • -ss:截取视频,开始时间,单位秒;
  • -t:截取时长,单位秒;
  • -vframes:等价于frames:v,输出选项,用于指定输出的视频帧数;
  • -r:帧率,输入和输出均具有该参数,即具体形式为:

         ffmpeg -r [输入帧率] -i [输入文件路径] -r [输出帧率] [输出文件路径] 
        # 输出视频时长= 图片数量/输入帧率
        # 当输入文件为视频时,输入帧率自动识别。
        # 当输入文件为图片时,输入帧率默认为25,可指定具体值。

  • -ac:输出文件中音频的声道数;
  • -ab:输出文件中音频的比特率(常见的音频比特率有 96k, 112k, 128k, 160k, 192k, 256k, 320k);
  • -ar:输出文件中音频的采样率(采样率: 11025Hz、22050Hz、24000Hz、44100Hz、48000Hz);
  • -an:从视频文件中去除音频,即视频静音,如:

        ffmpeg -i test.mp4 -vcodec copy -an output.mp4
        # -vcodec copy拷贝源数据的视频流到输出文件里面

  • -vn:从视频文件中去除视频,即提取音频,如:

        ffmpeg -i test.mp4 -acodec copy -vn output.aac
        # 默认mp4的audio codec是aac,如果不是,可以都转为最常见的aac;
        # -acodec copy拷贝源数据的音频流到输出文件里面

  • -s:设置视频分辨率,参数值wxh,w宽度单位是像素,h高度单位是像素;
  • -vf:等价于filter:v,用于设定一个图像的后处理过滤链,其参数为一个描述图像后处理链的字符串。

        # 下面两条命令有相同效果

    ffmpeg -i input.mpg -s 320x240 output.mp4 
    ffmpeg -i input.mpg -vf scale=320:240 output.mp4

        # 对输入视频成比例缩放

# 改变为源视频一半大小:
    ffmpeg -i input.mpg -vf scale=iw/2:ih/2 output.mp4

# 改变为原视频的90%大小:
    ffmpeg -i input.mpg -vf scale=iw*0.9:ih*0.9 output.mp4

        # 保持源视频的横纵比

# 宽度固定400,高度成比例:
    ffmpeg -i input.avi -vf scale=400:-1

# 相反地,高度固定300,宽度成比例:
    ffmpeg -i input.avi -vf scale=-1:300
  • -b:v:输出视频的码率即比特率,比特率越大,视频文件越大,和分辨率成正相关。

        # 常见分辨率和推荐的比特率值:
        分辨率        比特率
        480p        1500 Kbps左右
        720p        3000-5000 Kbps
        1080p        5000-8000 Kbps
        4K        18000-30000 Kbps

  • -map:指定输出文件的流映射关系。例如 “-map 1:0 -map 1:1”要求将第二个输入文件的第一个流和第二个流写入到输出文件。如果没有-map选项,ffmpeg采用缺省的映射关系。
  • -y:存在重名文件时覆盖;
  • -f:输入、输出文件的格式,小写字母,如:
ffmpeg -f mp4 test.mp4 -f avi out.avi
# 不确定格式名称时,可以直接使用文件扩展名。