一文搞懂HLS.js使用指南与最佳实践
HLS.js的终极使用指南,深入解释其工作原理、应用场景与优缺点,提供代码示例和常见问题解决方案。
阅读更多 →视频处理必备工具,从入门到精通的完整命令手册
FFmpeg 是一款强大的开源音视频处理工具,几乎支持所有常见的音视频格式转换、剪辑、滤镜等操作。它包含了 libavcodec、libavformat、libavutil 等多个库,是目前最流行的视频处理工具之一。
本文整理了日常工作中最常用的 FFmpeg 命令,涵盖格式转换、音频提取、视频剪切、水印添加、字幕合成、视频压缩等高频场景,方便大家快速查阅和使用。
查看视频的详细信息,包括分辨率、码率、编码格式、时长等:
ffmpeg -i input.mp4
只显示关键信息,不输出多余内容:
ffmpeg -i input.mp4 -hide_banner
ffmpeg -version
ffmpeg -encoders
ffmpeg -decoders
ffmpeg -codecs
ffmpeg -formats
ffmpeg -filters
ffmpeg -i input.mp4 output.avi
ffmpeg -i input.mp4 output.mkv
ffmpeg -i input.mp4 -c:v libvpx -c:a libvorbis output.webm
ffmpeg -i input.mp4 -c copy output.mov
快速转换(不重新编码):
ffmpeg -i input.avi -c copy output.mp4
重新编码(兼容性更好):
ffmpeg -i input.avi -c:v libx264 -c:a aac output.mp4
批量将当前目录下的 AVI 文件转为 MP4:
# Windows
for %i in (*.avi) do ffmpeg -i "%i" -c copy "%~ni.mp4"
# Linux/Mac
for f in *.avi; do ffmpeg -i "$f" -c copy "${f%.avi}.mp4"; done
当目标格式支持相同编码时,使用 -c copy 可以直接复制流,速度极快且无损质量:
ffmpeg -i input.mkv -c copy output.mp4
ffmpeg -i input.mp4 -vn -c:a libmp3lame output.mp3
指定音频质量(0最好,9最差):
ffmpeg -i input.mp4 -vn -c:a libmp3lame -q:a 2 output.mp3
ffmpeg -i input.mp4 -vn -c:a aac -b:a 128k output.aac
ffmpeg -i input.mp4 -vn -c:a pcm_s16le output.wav
# MP3 转 AAC
ffmpeg -i input.mp3 -c:a aac -b:a 128k output.aac
# WAV 转 MP3
ffmpeg -i input.wav -c:a libmp3lame -q:a 2 output.mp3
# FLAC 转 MP3
ffmpeg -i input.flac -c:a libmp3lame -b:a 320k output.mp3
ffmpeg -i input.mp4 -vn -ss 00:01:00 -t 00:00:30 -c:a copy output.mp3
参数说明:-ss 开始时间,-t 持续时长
从第10秒开始,截取30秒的视频:
ffmpeg -i input.mp4 -ss 00:00:10 -t 00:00:30 -c copy output.mp4
从开始时间截到结束时间:
ffmpeg -i input.mp4 -ss 00:01:00 -to 00:02:00 -c copy output.mp4
-c copy 剪切速度快但可能不精确,如果需要精确剪切,去掉 -c copy 重新编码。
ffmpeg -i input.mp4 -ss 00:00:10.5 -t 00:00:30.2 -c:v libx264 -c:a aac output.mp4
方法一:使用 concat 分离器(文件列表方式)
先创建一个文件列表 filelist.txt:
file 'input1.mp4'
file 'input2.mp4'
file 'input3.mp4'
然后拼接:
ffmpeg -f concat -i filelist.txt -c copy output.mp4
方法二:使用 concat 滤镜(重新编码)
ffmpeg -i input1.mp4 -i input2.mp4 -filter_complex "[0:v][0:a][1:v][1:a]concat=n=2:v=1:a=1[v][a]" -map "[v]" -map "[a]" output.mp4
将视频分割为每段10分钟:
ffmpeg -i input.mp4 -c copy -segment_time 00:10:00 -f segment output_%03d.mp4
# 转为 1280x720
ffmpeg -i input.mp4 -s 1280x720 -c:a copy output.mp4
# 等比例缩放到宽度为1280,高度自动计算
ffmpeg -i input.mp4 -vf "scale=1280:-1" -c:a copy output.mp4
# 等比例缩放到高度为720,宽度自动计算
ffmpeg -i input.mp4 -vf "scale=-1:720" -c:a copy output.mp4
ffmpeg -i input.mp4 -b:v 2000k -b:a 128k output.mp4
CRF(Constant Rate Factor)是 x264/x265 编码器的质量控制参数,范围0-51,数值越小质量越高,推荐范围18-28:
# 高质量(文件较大)
ffmpeg -i input.mp4 -c:v libx264 -crf 18 -c:a copy output.mp4
# 中等质量(推荐)
ffmpeg -i input.mp4 -c:v libx264 -crf 23 -c:a copy output.mp4
# 较低质量(文件较小)
ffmpeg -i input.mp4 -c:v libx264 -crf 28 -c:a copy output.mp4
ffmpeg -i input.mp4 -b:a 128k -c:v copy output.mp4
ffmpeg -i input.mp4 -c:v libx264 -crf 28 -preset medium -c:a aac -b:a 96k output.mp4
参数说明:-preset 编码速度与压缩率的平衡,可选 ultrafast、superfast、veryfast、faster、fast、medium、slow、slower、veryslow
ffmpeg -i input.mp4 -r 24 -c:a copy output.mp4
左上角:
ffmpeg -i input.mp4 -i watermark.png -filter_complex "overlay=10:10" -c:a copy output.mp4
右上角:
ffmpeg -i input.mp4 -i watermark.png -filter_complex "overlay=W-w-10:10" -c:a copy output.mp4
左下角:
ffmpeg -i input.mp4 -i watermark.png -filter_complex "overlay=10:H-h-10" -c:a copy output.mp4
右下角:
ffmpeg -i input.mp4 -i watermark.png -filter_complex "overlay=W-w-10:H-h-10" -c:a copy output.mp4
居中:
ffmpeg -i input.mp4 -i watermark.png -filter_complex "overlay=(W-w)/2:(H-h)/2" -c:a copy output.mp4
ffmpeg -i input.mp4 -i watermark.png -filter_complex "[1:v]format=rgba,colorchannelmixer=aa=0.5[wm];[0:v][wm]overlay=10:10" -c:a copy output.mp4
参数说明:aa=0.5 表示透明度50%
ffmpeg -i input.mp4 -vf "drawtext=text='查工具网':fontsize=24:fontcolor=white:x=10:y=10" -c:a copy output.mp4
ffmpeg -i input.mp4 -i watermark.png -filter_complex "overlay=x='if(gte(t,2), -w+(t-2)*100, NAN)':y=10" -c:a copy output.mp4
ffmpeg -i input.mp4 -i subtitle.srt -c copy -c:s mov_text output.mp4
ffmpeg -i input.mp4 -vf "subtitles=subtitle.srt" -c:a copy output.mp4
ffmpeg -i input.mkv -map 0:s:0 subtitle.srt
ffmpeg -i subtitle.srt subtitle.ass
# 顺时针旋转90度
ffmpeg -i input.mp4 -vf "transpose=1" -c:a copy output.mp4
# 逆时针旋转90度
ffmpeg -i input.mp4 -vf "transpose=2" -c:a copy output.mp4
# 旋转180度
ffmpeg -i input.mp4 -vf "transpose=2,transpose=2" -c:a copy output.mp4
ffmpeg -i input.mp4 -vf "hflip" -c:a copy output.mp4
ffmpeg -i input.mp4 -vf "vflip" -c:a copy output.mp4
ffmpeg -i input.mp4 output.gif
ffmpeg -i input.mp4 -vf "fps=10,scale=480:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse" output.gif
ffmpeg -i input.mp4 -ss 00:00:05 -t 00:00:03 -vf "fps=10,scale=480:-1" output.gif
# 每秒提取一帧
ffmpeg -i input.mp4 -r 1 frame_%04d.jpg
# 每10秒提取一帧
ffmpeg -i input.mp4 -r 0.1 frame_%04d.jpg
# 提取所有帧
ffmpeg -i input.mp4 frame_%04d.png
ffmpeg -framerate 24 -i frame_%04d.jpg -c:v libx264 -pix_fmt yuv420p output.mp4
ffmpeg -loop 1 -i image.jpg -t 5 -c:v libx264 -pix_fmt yuv420p output.mp4
ffmpeg -i input.mp4 -c:v libx264 -c:a aac -hls_time 10 -hls_list_size 0 -f hls output.m3u8
ffmpeg -i input.mp4 \
-map 0 -map 0 -map 0 \
-b:v:0 800k -s:v:0 640x360 \
-b:v:1 1500k -s:v:1 854x480 \
-b:v:2 3000k -s:v:2 1280x720 \
-c:a aac -b:a 128k \
-var_stream_map "v:0,a:0 v:1,a:0 v:2,a:0" \
-master_pl_name master.m3u8 \
-hls_time 10 -hls_list_size 0 \
-f hls stream_%v/output.m3u8
ffmpeg -i input.mp4 \
-map 0 -map 0 \
-b:v:0 1500k -s:v:0 854x480 \
-b:v:1 3000k -s:v:1 1280x720 \
-b:a 128k \
-use_timeline 1 -use_template 1 \
-window_size 5 -adaptation_sets "id=0,streams=v id=1,streams=a" \
-f dash output.mpd
ffmpeg -i input.mp4 -c copy -f flv rtmp://server/live/streamkey
NVIDIA GPU 加速(NVENC):
ffmpeg -i input.mp4 -c:v h264_nvenc -preset fast -cq 23 -c:a copy output.mp4
Intel QSV 加速:
ffmpeg -i input.mp4 -c:v h264_qsv -preset medium -c:a copy output.mp4
使用 delogo 滤镜去除水印:
ffmpeg -i input.mp4 -vf "delogo=x=10:y=10:w=100:h=50" -c:a copy output.mp4
# 2倍速
ffmpeg -i input.mp4 -vf "setpts=0.5*PTS" -af "atempo=2.0" output.mp4
# 0.5倍速
ffmpeg -i input.mp4 -vf "setpts=2.0*PTS" -af "atempo=0.5" output.mp4
ffmpeg -i input.mp4 -vf "reverse" -af "areverse" output.mp4
ffmpeg -i input.mp4 -vf "nlmeans" -c:a copy output.mp4
# 第一步:分析视频
ffmpeg -i input.mp4 -vf vidstabdetect -f null -
# 第二步:应用稳定
ffmpeg -i input.mp4 -vf vidstabtransform -c:a copy output.mp4
使用 -progress 参数输出进度信息:
ffmpeg -i input.mp4 -c copy output.mp4 -progress pipe:1
ffmpeg -y -i input.mp4 output.mp4
# 去掉音频
ffmpeg -i input.mp4 -an -c:v copy output.mp4
# 去掉视频
ffmpeg -i input.mp4 -vn -c:a copy output.mp3
| 参数 | 说明 |
|---|---|
-i |
指定输入文件 |
-c / -codec |
指定编码器 |
-c copy |
直接复制流,不重新编码 |
-c:v |
指定视频编码器 |
-c:a |
指定音频编码器 |
-b:v |
视频码率 |
-b:a |
音频码率 |
-s |
分辨率,如 1280x720 |
-r |
帧率 |
-ss |
开始时间 |
-t |
持续时长 |
-to |
结束时间 |
-vf |
视频滤镜 |
-af |
音频滤镜 |
-vn |
去掉视频流 |
-an |
去掉音频流 |
-y |
覆盖输出文件不提示 |
-crf |
恒定质量因子(x264/x265) |
-preset |
编码速度与压缩率平衡 |
FFmpeg 是一个功能极其强大的音视频处理工具,掌握这些常用命令可以大大提高视频处理效率。本文涵盖了从基础格式转换到高级滤镜的大部分常用场景,建议收藏以备不时之需。
如果你不想记命令,也可以直接使用我们的 在线视频工具,包括视频转换、压缩、M3U8转MP4等多种功能,无需安装软件,在浏览器中就能完成所有操作。