Hugh's Blog

ffmpeg 简单使用

 

最近需要用到 ffmpeg 来压缩视频,做个记录。

# 查看视频编码等信息
ffmpeg -i input.mp4

# 压缩视频 通过调整编码及码率
ffmpeg -i input.mp4 -vcodec libx264 -acodec copy -crf 28 output.mp4
ffmpeg -i input.mp4 -vcodec libx265 -acodec copy -crf 20 output.mp4

# 压缩视频 通过调整比特率
# 输入文件 170 MiB,4741 kbps,压缩为 50 MiB,则需要将比特率调整为 4741*50/170=1394
ffmpeg -i input.mp4 -b 1394k output.mp4

# 指定输出文件格式
ffmpeg -i input.mp4 -vcodec copy -acodec copy -f mov output.mov

# 改变视频尺寸
ffmpeg -i input.mp4 -vf scale=640:-1 output.mp4

# 合并文件
vim /tmp/mov_files
# 文件内容为
# file /tmp/1.MOV
# file /tmp/2.MOV
# 合并输出为相同格式
ffmpeg -safe 0 -f concat -i /tmp/mov_files -vcodec copy -acodec copy new.MOV
# 合并输出为特定格式
ffmpeg -safe 0 -f concat -i /tmp/mov_files -vcodec copy -acodec aac -strict -2 -b:a 384k new.mp4

# 按时间切割文件
ffmpeg -i input.mp3 -acodec copy -ss 03:06 -to 06:55 output.mp3
# 将 -ss, -t 参数放在 -i 参数之前
# accurate_seek 剪切时间更加精确 必须放在 -i 参数之前
# avoid_negative_ts 解决视频结尾不是关键帧 导致视频最后会出现一段空白的问题 但会牺牲截取时长的精确度
ffmpeg -ss 00:00:45.0 -t 8 -accurate_seek -i input.mp4 -codec copy -avoid_negative_ts 1 output.mp4

# flv 转 MP3
ffmpeg -i input.flv -q:a 0 output.mp3 # 245比特
ffmpeg -i input.flv -b:a 320k output.mp3 # 320比特

# 指定视频及音频格式
ffmpeg -i input.avi -c:v h264 -c:a aac output.mp4

# 视频音频合并
# 1. 视频没有音频
ffmpeg -i video.mp4 -i audio.mp3 -c:v copy -c:a aac -strict experimental output.mp4
# 2. 视频已有音频
ffmpeg -i video.mp4 -i audio.mp3 -c:v copy -c:a aac -strict experimental -map 0:v:0 -map 1:a:0 output.mp4

参数説明:

  • -i: 指定文件

  • -vcodec: 指定输出视频编码格式

  • -acodec: 指定输出音频格式,一般不需要改

  • -crf: 与视频质量有关,一般 20 左右,数值越高,质量越差,文件越小

  • -f: 指定输出格式

  • -vf: 指定输出尺寸,比如 640:320,640:-1,-1 表示自动调整

  • -ss: 开始时间,格式 hh:ii:ss

  • -to: 结束时间,格式 hh:ii:ss


参考

How can I reduce a video’s size with ffmpeg?

ffmpeg压缩视频文件

Combine MOV video files

FFmpeg MP3 Encoding Guide

如何用FFmpeg将影像转成H.265/HEVC格式

x265的preset与编码速度、视频画质以及比特率的关联