You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用FFmpeg将视频像素格式改为yuv420p(tv, progressive)?

问题

我有视频文件in.mp4,其视频流参数为:

Stream #0:00x1: Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yuv420p(tv, progressive), 1920x1080 [SAR 1:1 DAR 16:9], 375 kb/s, 30 fps, 30 tbr, 15360 tbn (default)

希望将其转换为指定规格:修改时基为30k、添加空音频流、视频profile改为Main,像素格式保持yuv420p(tv, progressive),目标参数为:

Stream #0:00x1: Video: h264 (Main) (avc1 / 0x31637661), yuv420p(tv, progressive), 1920x1080 [SAR 1:1 DAR 16:9], 20744 kb/s, 30 fps, 30 tbr, 30k tbn (default)
Stream #0:10x2: Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 131 kb/s (default)

当前使用的FFmpeg命令:

ffmpeg -f lavfi -i anullsrc -i in.mp4 -c:v libx264 -pix_fmt yuv420p -profile:v main -video_track_timescale 30k -c:a aac -map 0:a -map 1:v -shortest out.mp4

输出的out.mp4音频流符合要求,但视频流像素格式为yuv420p(progressive),缺失tv标识。

我的假设:

  • 音视频流顺序改变不影响
  • 音视频码率变化可接受,因h264和aac为非固定码率
解决方法

缺失tv标识是因为libx264编码器默认使用PC色彩范围,而原视频采用的是TV色彩范围。需要在命令中明确指定色彩范围相关参数,即可恢复该标识。

修改后的FFmpeg命令:

ffmpeg -f lavfi -i anullsrc -i in.mp4 -c:v libx264 -pix_fmt yuv420p -profile:v main -video_track_timescale 30k -color_range tv -colorspace bt709 -color_trc bt709 -color_prim bt709 -c:a aac -map 0:a -map 1:v -shortest out.mp4

参数说明:

  • -color_range tv:核心参数,直接指定色彩范围为TV标准,对应像素格式中的tv标识
  • -colorspace bt709、-color_trc bt709、-color_prim bt709:匹配主流TV视频的色彩空间、传输特性和原色标准,确保视频色彩属性完全符合原视频的tv规格要求

执行该命令后,输出视频的像素格式会显示为yuv420p(tv, progressive),同时满足其他所有转换要求。

内容的提问来源于stack exchange,提问作者Roy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 10:25:15