FFmpeg 4.2.2 命令详解

推荐采用 格式转换 处理图像、音视频格式的转换。

视频转码

功能 命令 文字解释 备注
MP4

转码以适合在 PSP (或 iPod/iPhone) 中播放

ffmpeg -i source_video.avi -b 300 -s 320x240 -vcodec xvid -ab 32 -ar 24000 -acodec aac final_video.mp4

ffmpeg -i source_video.avi input -acodec aac -ab 128kb -vcodec mpeg4 -b 1200kb -mbd 2 -flags +4mv+trell -aic 2 -cmp 2 -subcmp 2 -s 320x180 -title X final_video.mp4

ffmpeg -i input.mp4 -vcodec libx264 -preset medium -b:v 2000k output.mp4

把 input.mp4 按 medium 编码方式转换成 output.mp4 文档

ffmpeg -i input.mp4 -vcodec libx264 -preset ultrafast -b:v 2000k output.mp4

把 input.mp4 按 ultrafast 编码方式转换成 output.mp4 文档

ffmpeg -i input.mp4 -c:v libx264 -g 50 -t 60 output.mp4

把 input.mp4 按每 50 帧 GOP 方式转换成 output.mp4 文档

IDR 帧频率 50 GOP

ffmpeg -i input.mp4 -c:v libx264 -g 50 -sc_threshold 0 -t 60 -y output.mp4

把 input.mp4 严格按每 50 帧 GOP 方式转换成 output.mp4 文档

-sc_threshold 0 场景切换时不强行插入关键帧

ffmpeg -i input.mp4 -c:v libx264 -x264opts "bframes=0" -g 50 -sc_threshold 0 output.mp4

把 input.mp4 严格按每 50 帧 GOP 无 B 帧方式转换成 output.mp4 文档

-sc_threshold 0 场景切换时不强行插入关键帧

B 帧多清晰度高,但编解码更复杂

ffmpeg -i input.mp4 -c:v libx264 -x264opts "bframes=3:b-adapt=0" -g 50 -sc_threshold 0 output.mp4

把 input.mp4 严格按每 50 帧 GOP 每 2 个 P 帧存放 3 个 B 帧方式转换成 output.mp4 文档

-sc_threshold 0 场景切换时不强行插入关键帧

B 帧多清晰度高,但编解码更复杂

ffmpeg -i input.mp4 -c:v copy -c:a libfdk_aac -b:a 384k output.mp4

把 input.mp4 的音频按第三方 libfdk_aac 编码 384KBit/s 码率转换成 output.mp4 文档

ffmpeg -re -i input.mp4 -vcodec libx264 -an output.mp4

把 input.mp4 按 libx264 编码转换成 output.mp4 文档

FLV ffmpeg -i video_origine.avi -ab 56 -ar 44100 -b 200 -r 15 -s 320x240 -f flv video_finale.flv 把 .avi 视频转换成 .flv
ffmpeg -i input_ac3.mp4 -vcodec copy -acodec aac -f flv output.flv 将 input_ac3.mp4 音频先转换成 AAC 格式再输出 output.flv 文件
ffmpeg -i input.mp4 -c copy -f flv -flvflags add_keyframe_index output.flv 为 input.mp4 添加关键帧索引转换成 output.flv 文件
M3U8 ffmpeg -re -i input.mp4 -c copy -f hls -bsf:v h264_mp4toannexb output.m3u8 把 input.mp4 视频转换成 output.m3u8 文档
ffmpeg -re -i input.mp4 -c copy -f hls -bsf:v h264_mp4toannexb -hls_time 10 output.m3u8 把 input.mp4 视频按每隔 10 秒切片转换成 output.m3u8 文档
ffmpeg -re -i input.mp4 -c copy -f hls -hls_time 10 -hls_flags split_by_time output.m3u8 把 input.mp4 视频严格按每隔 10 秒切片转换成 output.m3u8 文档
ffmpeg -re -i input.mp4 -c copy -f hls -use_localtime 1 -bsf:v h264_mp4toannexb output.m3u8 把 input.mp4 视频按以本地时间作切片名方式转换成 output.m3u8 文档

ffmpeg -i input.mp4 -c copy -f hls -hls_time 3 -hls_list_size 0 -method PUT -t 30 http://127.0.0.1/test/output.m3u8

把 input.mp4 视频按每隔 3 秒推送到服务器 http://127.0.0.1/test/output.m3u8

Nginx 配置

location / {
	client_max_body_size 10M;
	dav_access group:rw all:rw;
	dav_methods PUT DELETE MKCOL COPY MOVE;
	root html/;
}
							
ffmpeg -re -i input.mp4 -c copy -f hls -bsf:v h264_mp4toannexb -hls_list_size 3 output.m3u8 把 input.mp4 视频分 3 个 TS 切片转换成 output.m3u8 文档
ffmpeg -re -i input.mp4 -c copy -f hls -bsf:v h264_mp4toannexb -start_number 300 output.m3u8 把 input.mp4 视频从第 300 序列起转换成 output.m3u8 文档
ffmpeg -re -i input.mp4 -c copy -f hls -bsf:v h264_mp4toannexb -hls_wrap 3 output.m3u8 把 input.mp4 视频按每 3 个 TS 切片分段转换成 output.m3u8 文档
ffmpeg -re -i input.mp4 -c copy -f hls -hls_base_url http://192.168.0.1/live/ -bsf:v h264_mp4toannexb output.m3u8 把 input.mp4 视频按 http://192.168.0.1/live/ 路径转换成 output.m3u8 文档
ffmpeg -re -i input.mp4 -c copy -f hls -hls_flags delete_segments -hls_list_size 4 -bsf:v h264_mp4toannexb output.m3u8 把 input.mp4 视频按删除早期切片方式转换成 output.m3u8 文档
ffmpeg -re -i input.mp4 -c copy -f hls -hls_flags round_durations -bsf:v h264_mp4toannexb output.m3u8 把 input.mp4 视频按圆整切片持续时间方式转换成 output.m3u8 文档
ffmpeg -re -i input.mp4 -c copy -f hls -hls_flags discont_start -bsf:v h264_mp4toannexb output.m3u8 把 input.mp4 视频按在切片前插入 EXT-X-DISCONTINUITY 标签方式转换成 output.m3u8 文档
ffmpeg -re -i input.mp4 -c copy -f hls -hls_flags omit_endlist -bsf:v h264_mp4toannexb output.m3u8 把 input.mp4 视频按不在结尾添加 EXT-X-ENDLIST 标签方式转换成 output.m3u8 文档
ffmpeg -re -i input.mp4 -c copy -f hls -hls_segment_filename test_output-%d.ts -bsf:v h264_mp4toannexb output.m3u8 把 input.mp4 视频按 test_output-%d.ts 分段文件名模块转换成 output.m3u8 文档
DV ffmpeg -i input.avi -s pal -r pal -aspect 4:3 -ar 48000 -ac 2 output.dv 把 input.avi 音视频转换成 output.dv 文档
TS ffmpeg -re -i input.mp4 -vcodec libx264 -acodec copy -f mpegts output.ts 将 input.mp4 编码转换成 output.ts 文档

ffmpeg -i input.mp4 -vcodec libx264 -profile:v high -level 3.1 -s 352x288 -an -y -t 10 output.ts

ffprobe -v quiet -show_frames -select_streams v output.ts | grep "pict_type=B" | WC -l

将 input.mp4 按 high profile 编码方式转换成 output.ts 文档

查看 output.ts 文档是否包含 B 帧 (包含)

ffmpeg -i input.mp4 -vcodec libx264 -profile:v baseline -level 3.1 -s 352x288 -an -y -t 10 output.ts

ffprobe -v quiet -show_frames -select_streams v output.ts | grep "pict_type=B" | WC -l

将 input.mp4 按 baseline profile 编码方式转换成 output.ts 文档

查看 output.ts 文档是否包含 B 帧 (不包含)

ffmpeg -i input.mp4 -c:v libx264 -x264opts "bframes=10:b-adapt=0" -b:v 1000k -maxrate 1000k -minrate 1000k -bufsize 50k -nal-hrd cbr -g 50 -sc_threshold 0 output.ts 把 input.mp4 严格按每 50 帧 GOP 每 2 个 P 帧存放 10 个 B 帧,1000KBit/s 恒定码率 50 KB 缓冲大小方式转换成 output.mp4 文档 H.264 编码 HRD 信号形式为 CBR 恒定码率

音频转码

功能 命令 文字解释 备注
AAC ffmpeg -i input.mp4 -c:a aac -b:a 160k output.aac 把 input.mp4 按默认 aac 编码 160KBit/s 码率转换成 output.aac 文档
M4A ffmpeg -i input.wav -c:a aac -q:a 2 output.m4a 把 input.wav 按默认 aac 编码 qscale 2 转换成 output.m4a 文档
ffmpeg -i input.wav -c:a libfdk_aac -b:a 128k output.m4a 把 input.wav 按第三方 libfdk_aac 编码 128KBit/s 码率转换成 output.m4a 文档
ffmpeg -i input.wav -c:a libfdk_aac -vbr 3 output.m4a 把 input.wav 按第三方 libfdk_aac 编码 vbr 动态码率 3 转换成 output.m4a 文档
ffmpeg -i input.wav -c:a libfdk_aac -profile:a aac_he -b:a 64k output.m4a 把 input.wav 按第三方 libfdk_aac aac_he 编码 cbr 恒定码率 64KBit/s 转换成 output.m4a 文档
ffmpeg -i input.wav -c:a libfdk_aac -profile:a aac_he_v2 -b:a 32k output.m4a 把 input.wav 按第三方 libfdk_aac aac_he_v2 编码 cbr 恒定码率 32KBit/s 转换成 output.m4a 文档
MP3 ffmpeg -h encoder=libmp3lame 查看 libmp3lame 编码器参数
ffmpeg -i INPUT -acodec libmp3lame output.mp3 把 INPUT 转换成 output.mp3 文档
ffmpeg -i input.mp3 -acodec libmp3lame -q:a 8 output.mp3 把 input.mp3 按 VBR 动态 70-105KBit/s 码率转换成 output.mp3 文档
ffmpeg -i input.mp3 -acodec libmp3lame -b:a 64k output.mp3 把 input.mp3 按 CBR 恒定 64KBit/s 码率转换成 output.mp3 文档
ffmpeg -i input.mp3 -acodec libmp3lame -b:a 64k -abr 1 output.mp3 把 input.mp3 按 ABR 方式 64KBit/s 码率转换成 output.mp3 文档

版权声明: 本文为独家原创稿件,版权归 乐数软件 ,未经许可不得转载。