# ffmpeg 常用命令 ### 视频转换 *示例:* ```shell $ ffmpeg -i raw.mp4 output.ts ``` *mkv转mp4:* ```shell $ ffmpeg -i input.mkv -vcodec copy out.mp4 ``` *mp4转ts:* ```shell $ ffmpeg -i out.mp4 -c copy -bsf h264_mp4toannexb output.ts ``` *转码ts:* ``` ffmpeg -i raw.mp4 -c:v libx264 -crf 28 lzsb.ts ``` - `-crf`: 质量(0-51), 越小质量越高 (参考值: 480p => 20, 720p => 16-18), 默认值大概是31左右 - `-c:v`: libx264 编码器 ```shell $ ffmpeg -i raw.mp4 -c:v libx264 -ar 22050 -crf 28 output.flv ``` - `-i`: 输入视频 - `-c:v`: - `-ar 22050`: --- ### 视频切片 > m3u8为索引文件 *命令:* ```shell $ ffmpeg -i 源文件 -c copy -map 0 -f segment -segment_list 索引.m3u8 -segment_time 每N秒分割 输出文件名 ``` *示例mp4:* ```shell $ ffmpeg -i raw.mp4 -c copy -map 0 -f segment -segment_list index.m3u8 -segment_time 8 out%d.ts ``` *示例ts:* ```shell $ ffmpeg -i raw.ts -c copy -map 0 -f segment -segment_list index.m3u8 -segment_time 5 out%d.ts ``` *流程:* ```shell // 统一转换成mp4 $ ffmpeg -i input.mp4 -vcodec copy output.mp4 // mp4转ts $ ffmpeg -i output.mp4 -c copy result.ts // ts视频切片(m3u8) $ ffmpeg -i result.ts -c copy -map 0 -f segment -segment_list index.m3u8 -segment_time 6 v%d.ts ``` --- ### 获取视频长度 > linux ```shell $ ffmpeg -i input.mp4 2>&1 | grep 'Duration' | cut -d ' ' -f 4 | sed s/,// ``` --- ### 截取任意帧 ``` ffmpeg -i input.mp4 -y -f image2 -ss 0.001 -t 0.001 -s 352x240 b.jpg ``` - `-s`: 尺寸 - `-ss`: 时间, 支持n秒, 或者时间格式 --- **参考:** - [给新手的 20 多个 FFmpeg 命令示例](https://zhuanlan.zhihu.com/p/67878761)