将 FFmpeg 推流调整为适应 800×600 分辨率

要将 FFmpeg 推流调整为适应 800×600 分辨率,同时保持正确的宽高比和填充,请使用以下优化后的命令:

FFmpeg 推流命令 (800×600适配版)

ffmpeg -thread_queue_size 512 -f x11grab -draw_mouse 0 \
       -video_size 1280x720 -framerate 18 -i $DISPLAY \
       -thread_queue_size 1024 -f pulse -i "auto_null.monitor" \
       -vf "scale=800:600:force_original_aspect_ratio=decrease,pad=800:600:(ow-iw)/2:(oh-ih)/2:color=black" \
       -c:v libx264 -preset ultrafast -tune zerolatency \
       -b:v 1500k -maxrate 2000k -bufsize 3000k -g 30 \
       -c:a aac -b:a 96k -ar 44100 -ac 2 \
       -f flv "rtmp://192.168.1.1:1935/tv/index"

关键修改说明

参数原值新值作用
scale1024:570800:600目标输出分辨率
pad1024:570800:600填充至目标分辨率
b:v2000k1500k降低码率适应更小分辨率
maxrate2500k2000k调整最大码率
bufsize4000k3000k减小缓冲区大小

优化细节

  1. 保持宽高比
    force_original_aspect_ratio=decrease 确保画面不变形,不足部分用黑边填充(color=black
  2. 码率调整
  • 800×600 分辨率比原 1024×570 更小,适当降低视频码率(1500k 足够清晰)
  • 音频参数保持不变(96k AAC 已足够)
  1. 硬件兼容性
    -preset ultrafast -tune zerolatency 保持低延迟,适合实时推流
  2. 黑边填充公式
   pad=宽度:高度:(宽度-输入宽度)/2:(高度-输入高度)/2

自动计算居中位置


完整参数解释

-thread_queue_size 512          # 视频输入缓冲区
-f x11grab                      # 捕获X11显示
-draw_mouse 0                   # 不绘制鼠标
-video_size 1280x720            # 原始捕获分辨率(需与$DISPLAY实际分辨率一致)
-framerate 18                   # 输入帧率

-i $DISPLAY                     # 默认显示设备

-thread_queue_size 1024         # 音频输入缓冲区
-f pulse                        # PulseAudio输入
-i "auto_null.monitor"          # 音频设备名

-vf "scale=800:600:...,pad=..." # 视频滤镜链:
                                # 1. 缩放到800x600(保持比例)
                                # 2. 填充黑边至800x600

-c:v libx264                    # H.264编码
-preset ultrafast               # 最快编码速度
-tune zerolatency               # 零延迟优化

-b:v 1500k                      # 视频目标码率
-maxrate 2000k                  # 最大瞬时码率
-bufsize 3000k                  # 码率控制缓冲区
-g 30                           # GOP长度(关键帧间隔)

-c:a aac                        # AAC音频编码
-b:a 96k                        # 音频码率
-ar 44100                       # 采样率
-ac 2                           # 立体声

-f flv                          # 输出FLV格式
"rtmp://..."                    # RTMP推流地址

常见问题处理

  1. 画面变形
    检查原始分辨率比例(1280x720是16:9,800x600是4:3),如需强制拉伸:
   -vf "scale=800:600:force_original_aspect_ratio=disable"
  1. 黑边颜色修改
    pad=...:color=black中的颜色改为其他值(如color=0x121212
  2. 性能不足
  • 降低分辨率至640x480
  • 使用硬件加速(如-c:v h264_nvenc for NVIDIA)
  1. 音频不同步
    增加-async 1参数或调整-audio_drift_threshold

效果验证命令

# 查看推流统计信息(Ctrl+C停止)
ffplay "rtmp://192.168.1.1:1935/tv/index"

# 检查分辨率是否达标
ffprobe -v error -show_streams \
  -select_streams v "rtmp://192.168.1.1:1935/tv/index" | grep -E 'width|height'
No Comments

Send Comment Edit Comment


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
Previous
Next