目录
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
浙公网安备 33010602011771号