FFmpeg | hevc (Main 10) 转 hevc (Main)

大部分情况下可以不指定profile直接转hevc,转完就是profilemain,但有时默认的profile就是main10,更改为main就会报错,记录一下解决方法。

出现这种情况的原因是像素格式的问题。

像这种转不了的,一般是因为像素格式就是10bit的位深,例如yuv420p10le

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
ffmpeg -i 1.mp4
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '1.mp4':
Metadata:
major_brand : iso4
minor_version : 1
compatible_brands: iso4hvc1iso6
creation_time : 2019-11-12T12:43:43.000000Z
Duration: 03:35:25.15, start: 0.000000, bitrate: 2575 kb/s
Stream #0:0(und): Video: hevc (Main 10) (hvc1 / 0x31637668), yuv420p10le(tv), 1920x1080 [SAR 1:1 DAR 16:9], 2349 kb/s, 23.98 fps, 23.98 tbr, 24k tbn, 23.98 tbc (default)
Metadata:
creation_time : 2019-11-12T12:43:43.000000Z
Stream #0:1(und): Audio: ac3 (ac-3 / 0x332D6361), 48000 Hz, stereo, fltp, 224 kb/s (default)
Metadata:
creation_time : 2019-11-12T12:44:46.000000Z
Side data:
audio service type: main

只改变编码,不改变像素格式的话,只能转成hevc (Main 10)

所以要将10bit的yuv420p10le改成8bit的yuv420p,使用-pix_fmt参数,如:

1
ffmpeg -i 1.mp4 -map 0:0 -c:v hevc -map 0:1 -c:a aac -pix_fmt yuv420p 2.mp4