【FFmpeg】ffmpeg 命令行参数 ⑧ ( 使用 ffmpeg 转换封装格式 | 音视频编解码器参数设置 | 视频 帧率 / 码率 / 分辨率 设置 | 音频 码率 / 采样率 设置 )
1. 音视频封装格式转换基础
第一次接触FFmpeg时,我最惊讶的就是它强大的格式转换能力。记得当时需要把一个会议录像从MP4转成TS格式发给电视台,用图形化软件转了半天总是失败,最后用FFmpeg一行命令就搞定了。封装格式就像是快递包装箱,同样的商品(音视频数据)可以用不同材质的箱子(MP4/AVI/MKV等)来包装。
封装格式转换的核心逻辑其实很简单:把原始容器里的数据流原封不动地取出来,再装进新的容器里。这就好比把玻璃瓶里的果汁倒进保温杯,内容物没变,只是换了容器。FFmpeg完成这个操作只需要两个关键参数:
ffmpeg -i input.mp4 -c copy output.ts
这里的-c copy就是告诉FFmpeg:"别重新编码,直接复制数据"。我测试过一个2GB的4K视频,用这个命令转换只用了3秒,而重新编码的话要半小时以上。不过要注意,有些格式转换需要重新编码,比如想把H.265视频放进AVI容器就必须重新编码,因为AVI不支持H.265。
2. 音视频编解码器参数详解
2.1 保持原始编码格式
在实际项目中,我经常需要处理不同设备拍摄的视频。有次客户发来10个不同型号摄像机拍的素材,我发现用这个命令可以统一封装格式而不影响画质:
ffmpeg -i sony.mp4 -c:v copy -c:a copy output.mkv
-c:v copy表示视频流直接复制,-c:a copy表示音频流直接复制。这两个参数可以简写为-c copy,效果相同。有个容易踩的坑是:当源文件有多个音轨时,默认只会复制第一条音轨。要保留所有音轨需要加上-map 0参数。
2.2 转换编码格式
去年处理一批老旧RMVB视频时,我发现现代播放器对它的支持很差。这时就需要转换编码格式:
ffmpeg -i old.rmvb -c:v libx264 -c:a aac new.mp4
这里-c:v libx264指定用H.264编码视频,-c:a aac指定用AAC编码音频。转换编码格式时,有几个实用技巧:
- 用
-preset参数控制编码速度,从快到慢有:ultrafast、superfast、veryfast、faster、fast、medium(默认)、slow、slower、veryslow - 用
-crf参数控制画质(18-28是常用范围,越小画质越好) - 用
-threads参数启用多线程加速
3. 视频参数精细调整
3.1 帧率修改实战
处理动画素材时,经常需要调整帧率。有次客户要求把24fps的动画降到12fps,这个命令很管用:
ffmpeg -i anime.mp4 -r 12 output.mp4
但要注意几个细节:
- 降帧率会导致动作不连贯,适合制作定格动画效果
- 升帧率(如从24fps到60fps)需要配合插值算法,单纯用
-r参数只会重复帧 - 和
-c copy一起用会失效,必须重新编码
3.2 码率控制技巧
做视频网站时,码率控制直接影响用户体验和带宽成本。我常用的三种模式:
恒定质量模式(推荐):
ffmpeg -i input.mp4 -c:v libx264 -crf 23 output.mp4
二次编码模式(精确控制文件大小):
ffmpeg -i input.mp4 -c:v libx264 -b:v 1M -pass 1 -f null NUL && \
ffmpeg -i input.mp4 -c:v libx264 -b:v 1M -pass 2 output.mp4
限速模式(直播常用):
ffmpeg -i input.mp4 -c:v libx264 -maxrate 1M -bufsize 2M output.mp4
3.3 分辨率缩放方案
处理手机拍摄的视频时,经常需要统一分辨率。这个命令可以把视频缩放到720p:
ffmpeg -i phone.mp4 -vf "scale=-1:720" output.mp4
这里的-1表示自动计算宽度保持比例。如果要加黑边实现精确比例:
ffmpeg -i input.mp4 -vf "scale=1280:720:force_original_aspect_ratio=decrease,pad=1280:720:(ow-iw)/2:(oh-ih)/2" output.mp4
4. 音频参数优化策略
4.1 码率调整经验
播客音频通常128kbps就够了,而音乐文件建议192kbps以上:
ffmpeg -i podcast.wav -b:a 128k podcast.mp3
有个项目需要把语音访谈从256k降到64k,我发现用-ar 22050先降采样率再调码率效果更好:
ffmpeg -i interview.mp3 -ar 22050 -b:a 64k output.mp3
4.2 采样率设置
处理不同设备录音时,采样率不统一会导致问题。标准化到44100Hz的通用方案:
ffmpeg -i voice.m4a -ar 44100 output.wav
注意采样率不是越高越好,人耳能分辨的极限约在20kHz,所以44100Hz(Nyquist频率的两倍)已经足够。更高的采样率只会增加文件体积。
5. 实用技巧与排错指南
查看媒体信息:
ffprobe -v error -show_format -show_streams input.mp4
常见错误解决:
- "Unsupported codec":安装对应编解码器或换通用格式
- "Invalid data found":检查文件是否损坏
- "Too many packets buffered":增加
-max_muxing_queue_size值
批量处理脚本示例:
for f in *.mov; do
ffmpeg -i "$f" -c:v libx264 -preset fast "${f%.*}.mp4"
done
记得在关键操作前备份原文件,复杂的参数变换建议先用小片段测试。FFmpeg的功能远不止这些,掌握这些基础操作后,可以逐步学习滤镜、硬件加速等高级特性。
更多推荐
所有评论(0)