FFmpeg 常见用法
1. 基本命令结构
sh
ffmpeg [global_options] -i input_file [input_options] output_file [output_options]
2. 将其它格式图片转换为 YUV420p
sh
ffmpeg -i input.jpg -pix_fmt yuv420p output.yuv
-i input.jpg
: 指定输入文件input.jpg
。-pix_fmt yuv420p
: 指定输出文件的像素格式为 YUV420p。output.yuv
: 指定输出文件名为output.yuv
。
3. 将视频帧提取并保存为 YUV420p 图片
sh
ffmpeg -i input.mp4 -vf "select=eq(n\,100)" -pix_fmt yuv420p -vsync vfr frame_100.yuv
-i input.mp4
: 指定输入视频文件input.mp4
。-vf "select=eq(n\,100)"
: 使用滤镜选取第 100 帧。-pix_fmt yuv420p
: 指定输出文件的像素格式为 YUV420p。-vsync vfr
: 使用可变帧率模式。frame_100.yuv
: 指定输出文件名为frame_100.yuv
。
4. 将 YUV420p 图片转换为其他格式
sh
ffmpeg -s 1920x1080 -pix_fmt yuv420p -i input.yuv output.png
-s 1920x1080
: 指定输入文件的分辨率。-pix_fmt yuv420p
: 指定输入文件的像素格式为 YUV420p。-i input.yuv
: 指定输入文件input.yuv
。output.png
: 指定输出文件名为output.png
。
5. 从视频中提取所有帧并保存为 YUV420p 图片
sh
ffmpeg -i input.mp4 -vf "fps=1" -pix_fmt yuv420p frame_%04d.yuv
-i input.mp4
: 指定输入视频文件input.mp4
。-vf "fps=1"
: 每秒提取一帧。-pix_fmt yuv420p
: 指定输出文件的像素格式为 YUV420p。frame_%04d.yuv
: 指定输出文件名格式(如frame_0001.yuv
,frame_0002.yuv
)。
6. 将 YUV420p 图片制作成视频
sh
ffmpeg -f rawvideo -pix_fmt yuv420p -s 1920x1080 -r 30 -i frame_%04d.yuv -c:v libx264 output.mp4
-f rawvideo
: 指定输入文件格式为原始视频。-pix_fmt yuv420p
: 指定输入文件的像素格式为 YUV420p。-s 1920x1080
: 指定输入文件的分辨率。-r 30
: 指定帧率为 30 fps。-i frame_%04d.yuv
: 指定输入文件名格式。-c:v libx264
: 指定视频编解码器为 H.264。output.mp4
: 指定输出文件名为output.mp4
。
7. 调整 YUV420p 图片的分辨率
将 YUV420p 图片从 1920x1080 缩放到 1280x720:
sh
ffmpeg -s 1920x1080 -pix_fmt yuv420p -i input.yuv -vf scale=1280:720 -pix_fmt yuv420p output.yuv
-s 1920x1080
: 指定输入文件的分辨率。-pix_fmt yuv420p
: 指定输入文件的像素格式为 YUV420p。-i input.yuv
: 指定输入文件input.yuv
。-vf scale=1280:720
: 使用缩放滤镜将分辨率调整为 1280x720。output.yuv
: 指定输出文件名为output.yuv
。
8. 裁剪 YUV420p 图片
sh
ffmpeg -s 1920x1080 -pix_fmt yuv420p -i input.yuv -vf "crop=1280:720" -pix_fmt yuv420p output.yuv
-s 1920x1080
: 指定输入文件的分辨率。-pix_fmt yuv420p
: 指定输入文件的像素格式为 YUV420p。-i input.yuv
: 指定输入文件input.yuv
。-vf "crop=1280:720"
: 使用裁剪滤镜裁剪到 1280x720 的区域。output.yuv
: 指定输出文件名为output.yuv
。
FFplay 常见用法
1. 基本命令结构
sh
ffplay [options] input_file
2. 播放 YUV420p 图片
指定分辨率和像素格式:
sh
ffplay -f rawvideo -pixel_format yuv420p -video_size 1920x1080 input.yuv
-f rawvideo
: 指定输入文件格式为原始视频。-pixel_format yuv420p
: 指定输入文件的像素格式为 YUV420p。-video_size 1920x1080
: 指定输入文件的分辨率。input.yuv
: 指定输入文件input.yuv
。
3. 缩放 YUV420p 图片
将 YUV420p 图片缩放到 1366x768:
sh
ffplay -f rawvideo -pixel_format yuv420p -video_size 1920x1080 -vf scale=1366:768 input.yuv
-f rawvideo
: 指定输入文件格式为原始视频。-pixel_format yuv420p
: 指定输入文件的像素格式为 YUV420p。-video_size 1920x1080
: 指定输入文件的分辨率。-vf scale=1366:768
: 使用缩放滤镜将分辨率调整为 1366x768。input.yuv
: 指定输入文件input.yuv
。
4. 循环播放 YUV420p 图片
sh
ffplay -loop 0 -f rawvideo -pixel_format yuv420p -video_size 1920x1080 input.yuv
-loop 0
: 无限循环播放输入文件。-f rawvideo
: 指定输入文件格式为原始视频。-pixel_format yuv420p
: 指定输入文件的像素格式为 YUV420p。-video_size 1920x1080
: 指定输入文件的分辨率。input.yuv
: 指定输入文件input.yuv
。
5. 播放 YUV420p 图片序列
播放以 frame_0001.yuv
, frame_0002.yuv
等命名的图片序列:
sh
ffplay -f rawvideo -pixel_format yuv420p -video_size 1920x1080 -i frame_%04d.yuv
-f rawvideo
: 指定输入文件格式为原始视频。-pixel_format yuv420p
: 指定输入文件的像素格式为 YUV420p。-video_size 1920x1080
: 指定输入文件的分辨率。-i frame_%04d.yuv
: 指定输入文件名格式。
6. 调整播放窗口大小
将播放窗口调整为 800x600:
sh
ffplay -f rawvideo -pixel_format yuv420p -video_size 1920x1080 -window_size 800x600 input.yuv
-f rawvideo
: 指定输入文件格式为原始视频。-pixel_format yuv420p
: 指定输入文件的像素格式为 YUV420p。- `-video
_size 1920x1080`: 指定输入文件的分辨率。
-window_size 800x600
: 指定播放窗口的大小。input.yuv
: 指定输入文件input.yuv
。
FFmpeg 和 FFplay 的高级用法
1. 在 FFmpeg 中使用滤镜处理 YUV420p 图片
添加水印
在 YUV420p 图片中添加 PNG 格式的水印:
sh
ffmpeg -s 1920x1080 -pix_fmt yuv420p -i input.yuv -i watermark.png -filter_complex "overlay=10:10" -pix_fmt yuv420p output.yuv
-s 1920x1080
: 指定输入文件的分辨率。-pix_fmt yuv420p
: 指定输入文件的像素格式为 YUV420p。-i input.yuv
: 指定输入文件input.yuv
。-i watermark.png
: 指定水印图片watermark.png
。-filter_complex "overlay=10:10"
: 使用复杂滤镜,在坐标 (10,10) 处添加水印。output.yuv
: 指定输出文件名为output.yuv
。
调整亮度和对比度
调整 YUV420p 图片的亮度和对比度:
sh
ffmpeg -s 1920x1080 -pix_fmt yuv420p -i input.yuv -vf eq=brightness=0.06:contrast=1.5 -pix_fmt yuv420p output.yuv
-s 1920x1080
: 指定输入文件的分辨率。-pix_fmt yuv420p
: 指定输入文件的像素格式为 YUV420p。-i input.yuv
: 指定输入文件input.yuv
。-vf eq=brightness=0.06:contrast=1.5
: 使用 eq 滤镜调整亮度和对比度。output.yuv
: 指定输出文件名为output.yuv
。
2. 在 FFplay 中使用滤镜播放 YUV420p 图片
调整亮度和对比度
sh
ffplay -f rawvideo -pixel_format yuv420p -video_size 1920x1080 -vf eq=brightness=0.06:contrast=1.5 input.yuv
-f rawvideo
: 指定输入文件格式为原始视频。-pixel_format yuv420p
: 指定输入文件的像素格式为 YUV420p。-video_size 1920x1080
: 指定输入文件的分辨率。-vf eq=brightness=0.06:contrast=1.5
: 使用 eq 滤镜调整亮度和对比度。input.yuv
: 指定输入文件input.yuv
。
添加字幕
在播放 YUV420p 图片时添加字幕(字幕文件为 subtitles.srt
):
sh
ffplay -f rawvideo -pixel_format yuv420p -video_size 1920x1080 -vf subtitles=subtitles.srt input.yuv
-f rawvideo
: 指定输入文件格式为原始视频。-pixel_format yuv420p
: 指定输入文件的像素格式为 YUV420p。-video_size 1920x1080
: 指定输入文件的分辨率。-vf subtitles=subtitles.srt
: 使用 subtitles 滤镜添加字幕。input.yuv
: 指定输入文件input.yuv
。
常见问题及解决方法
1. 无法播放 YUV420p 图片
确保指定了正确的分辨率和像素格式:
sh
ffplay -f rawvideo -pixel_format yuv420p -video_size 1920x1080 input.yuv
2. 图像显示不全
使用 -vf scale
选项调整图像大小以适应屏幕分辨率:
sh
ffplay -f rawvideo -pixel_format yuv420p -video_size 1920x1080 -vf scale=1366:768 input.yuv
3. 视频或图片质量低
调整视频或图片的比特率或使用更高质量的编码器:
sh
ffmpeg -i input.mp4 -b:v 2000k output.mp4