ffmpeg常用命令

01 发送udp-ts文件

# -stream_loop -1:无限循环输入文件
# -i input.ts:读取文件input.ts
# -re:以输入文件的原始速率读取,模拟实时流输入(避免全速发送导致接收端丢包)。
# -c copy:直接复制流数据,不重新编码,保留原始画质。
# -f mpegts:强制输出格式为 MPEG-TS(常用于流媒体传输)。
# -pkt_size 1316:每 UDP 包发送 1316 字节,对应 7 个 TS 包(7 × 188 字节 = 1316 字节)。
# udp://127.0.0.1:30000:目标地址为本地回环地址,端口 30000。
ffmpeg -stream_loop -1 -re -i input.ts -c copy -f mpegts -pkt_size 1316 udp://127.0.0.1:30000

注意事项

UDP 丢包问题

UDP 无重传机制,建议局域网内使用;公网传输需添加前向纠错(FEC)。

缓冲区设置

可添加 -bufsize 参数控制缓冲区大小(如 -bufsize 1M)。

多网卡绑定

若需指定网卡,可使用 -localaddr 192.168.x.x。

02 按照时间截断文件

# -i input.ts: 指定输入文件
# -t 10:指定阶段时间为10s
# -c copy:指定不改变编码格式
# output.ts: 指定输出文件
ffmpeg -i input.ts -t 10 -c copy output.ts

03 文件转码转封装格式

转264示例

将一个文件input.mp4转化为ts文件,截取前3min,指定分辨率为1080p,帧率为25fps,码率为6M,输出文件名称为output.ts

ffmpeg -i input.mp4 \
-ss 00:00:00 -to 00:03:00 \
-g 25 \
-r 25 \
-s 1920x1080 \
-c:v libx264 -preset slow \
-b:v 5500k -minrate 5000k -maxrate 6500k -bufsize 8000k \
-c:a aac \
-b:a 256k -bufsize 5500k \
-nal-hrd cbr \
-muxrate 6000k \
-streamid 0:0x102 \
-streamid 1:0x103 \
output.ts

04 制备多节目TS文件

ffmpeg \
-i FILE1.ts \
-i FILE2.ts \
-i FILE3.ts \
-map 0:0 -map 0:1 \
-map 1:0 -map 1:1 \
-map 2:0 -map 2:1 \
-codec copy \
-mpegts_flags system_b \
-program "program_num=1:st=0:st=1:title=Prog_01" \
-program "program_num=2:st=2:st=3:title=Prog_02" \
-program "program_num=3:st=4:st=5:title=Prog_03" \
output.ts

参数解析
-i FILE1.ts:输入文件
-map 0:0 -map 0:1:输入节目
-codec copy:不重新编码
-mpegts_flags system_b:确保兼容性
-program "program_num=1:st=0:st=1:title=Prog_01":设置节目名称
output.ts:输出文件

05 文件转视频

5.1 转udp流

./ffmpeg -re -loop 1 -i test.jpg \                          # 按原始速率读取输入图片并循环播放
-g 25 -r 25 -s 1920x1080 \                                  # GOP为25,帧率25fps,输出分辨率1920x1080
-c:v libx264 -pix_fmt yuv422p \                             # 使用H.264编码,颜色采样为YUV 4:2:2
-flags +ilme+ildct -top 1 \                                 # 启用隔行编码(interlaced),顶场优先(1080i50)
-b:v 5500k -minrate 5500k -maxrate 5500k -bufsize 5500k \   # 恒定码率(CBR),视频平均码率5.5 Mbps
-nal-hrd cbr -muxrate 6000k \                               # 启用HRD参数,设置复用总速率为6 Mbps
-c:a aac -b:a 256k -ar 48000 -ac 2 \                        # 使用AAC音频编码,256kbps,48kHz采样率,双声道
-streamid 0:0x102 -streamid 1:0x103 \                       # 指定视频流ID为0x102,音频流ID为0x103
-f mpegts -pkt_size 1316 \                                  # 输出封装为MPEG-TS,UDP包大小为1316字节(7个TS包)
udp://127.0.0.1:30000                                       # 输出目标为UDP流地址(本地30000端口)

5.2 转文件

5.2.1 顶场优先50i

./ffmpeg -loop 1 -i input.mp4 \                      # 循环读取输入文件(例如静态图或短视频)
-g 25 -r 25 -s 1920x1080 \                           # GOP为25,帧率25fps,输出分辨率1920x1080
-c:v libx264 -pix_fmt yuv422p \                      # 使用H.264编码,设置像素格式为YUV 4:2:2
-flags +ilme+ildct -top 1 \                          # 启用隔行编码(interlaced),顶场优先(1080i50)
-b:v 5500k -minrate 5500k -maxrate 5500k -bufsize 5500k \  # 设置恒定码率(CBR),视频码率为5.5 Mbps
-nal-hrd cbr -muxrate 6000k \                        # 启用HRD参数,复用总速率为6 Mbps(含音视频)
-c:a aac -b:a 256k -ar 48000 -ac 2 \                 # AAC音频,256kbps,48kHz采样率,双声道
-streamid 0:0x102 -streamid 1:0x103 \                # 指定视频流ID为0x102,音频流ID为0x103
-t 10 -f mpegts \                                    # 输出时长10秒,封装格式为MPEG-TS
"h264_1080i_25fps_422_8bit_B_aac_cbr_output_10s.ts"  # 输出文件名,含格式与参数信息

5.2.2 逐行扫描25p

./ffmpeg -loop 1 -i input.mp4 \
-g 25 -r 25 -s 1920x1080 \
-c:v libx264 -pix_fmt yuv422p \
-b:v 5500k -minrate 5500k -maxrate 5500k -bufsize 5500k \
-nal-hrd cbr -muxrate 6000k \
-c:a aac -b:a 256k -ar 48000 -ac 2 \
-streamid 0:0x102 -streamid 1:0x103 \
-t 10 -f mpegts \
"h264_1080p_25fps_422_8bit_B_aac_cbr_output_10s.ts"

06 只提取音频/视频

6.1 只提取第一个音频

ffmpeg -i input.ts -map 0:a -c copy output_audio_only.ts

6.2 只提取第一个视频

ffmpeg -i input.ts -map 0:v -c copy output_video_only.ts
posted on 2025-02-18 11:55  风惊庭前叶  阅读(61)  评论(0)    收藏  举报