截取视频
ffmpeg -i abc.mp4 -ss 3:13 -to 2:41:13 -c copy output.mp4
- -i 输入文件
- -ss 开始时间
- -to 结束时间
- -c copy 直接截取
这样的截取方式,如果源视频的关键帧间隙很大,可能出现因缺失第一个关键帧导致的黑屏。此时,可以考虑用 -c:v libx264
之类的参数重新编码。
合并
ffmpeg -f concat -safe 0 -i files.txt -c copy -y output.wav
其中,files.txt 是所有待合并的文件,以以下的形式记录:
file /path/to/wav/1.wav
file /path/to/wav/2.wav
....
转换格式
转换格式很简单,有输入有输出,ffmpeg 会根据它们的扩展名自动选择合适的编码器,生成通用性最好的目标文件。比如 wav 2 mp3:
ffmpeg -i a.wav a.mp3
如果需要截取或者使用特定的编码器,那么就按照一般的用法添加参数即可,比如 flv 2 mp4:
ffmpeg -i 1.flv -c:v libx264 -crf 19 -strict experimental 1.mp4
其中,-c:v
是“视频编码器”的意思,音频编码器就是 -c:a
。 crf
是质量,最小越好,取值范围是 18 -28。类似的,rm 2 MP4:
ffmpeg -i ss.rm -c:v libx264 -c:a aac -b:a 32k -strict experimental ss.avi
在 Ubuntu 下不能使用 libfaac,只能使用 aac。还要调整级别,-strict -2
不行,必须是 -strict experimental
。
转换 iPad 支持的视频
ffmpeg -i input.mkv -c:v libx264 -profile:v main -level 3.1 -preset medium -crf 23 -x264-params ref=4 -c:a copy -movflags +faststart output.mp4
不知道为啥,直接 .mp4
或者 -c:v libx264
都不行,必须用上面这个。
缩放
ffmpeg -i input.mp4 -vf scale=320:-1 -strict -2 output.mp4
好吧,这次 -strict -2
好使了。如果报错,可以试着把 -1
改成 -2
。
裁剪画面
ffmpeg -i input.mp4 -filter:v "crop=500:1080:1420:0" output.mp4
crop
的参数为:宽、高、x、y。
调整声音
有些视频声音太小,需要调整一下:
ffmpeg -i input.mp4 -filter:a "volume=N" output.mp4
其中,N
可以是百分比,比如 1.0
(一倍,不变),2.0
(两倍);或者是加减的分贝,比如 10dB
(增加10分贝),-20dB
(减少20分贝)。不过根据我实地测试,调整后的视频的平均音量并不完全是调整的分贝。
获取平均音量:
ffmpeg -i input.mp4 -filter:a volumedetect -f null /dev/null
提取声音
# 不转码,只提取声音,很快
ffmpeg -i input-video.avi -vn -acodec copy output-audio.aac
# 转码,便于四处播放
ffmpeg -i sample.avi -q:a 0 -map a sample.mp3
欢迎吐槽,共同进步