我想保持音频质量,只是编码视频轨道,所以我使用这个命令:
ffmpeg -i INPUT -c:a copy -c:v libx265 video-h265.mp4
Run Code Online (Sandbox Code Playgroud)
但视频轨道的编解码器是hev1.我想要它是hvc1
Sus*_*ver 17
使用最新版本ffmpeg(N-87630-ge9f9175-tessus或构建HEAD版本),您可以使用mac编码为macOS High Sierra Quicktime所需的MP4版本-tag:v hvc1.
如果您有一个hev1基于mp4的mp4并且您需要容器,hvc1并且您不想重新编码它:
ffmpeg -i input-hev1.mp4 -c:v copy -tag:v hvc1 -c:a copy output-hvc1.mp4
Run Code Online (Sandbox Code Playgroud)
使用ffprobe确认更改:
从:
~~~~
Stream #0:0(eng): Video: hevc (Main) (hev1 / 0x31766568), yuv420p(tv, progressive), 720x404, 164 kb/s, 29.97 fps,
~~~~
Run Code Online (Sandbox Code Playgroud)
至:
~~~~
Stream #0:0(eng): Video: hevc (Main) (hvc1 / 0x31637668), yuv420p(tv, progressive), 720x404, 164 kb/s, 29.97 fps, 29.97 tbr, 30k tbn, 29.97 tbc (default)
~~~~
Run Code Online (Sandbox Code Playgroud)
如果你有一个较旧 avc1的mp4,你需要重新编码它.
ffprobe例子(avc1):
Stream #0:0(und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p(tv, bt709), 960x540 [SAR 1:1 DAR 16:9], 2778 kb/s, 29.97 fps, 29.97 tbr, 90k tbn, 180k tbc (default)
Run Code Online (Sandbox Code Playgroud)
编码示例:
ffmpeg
-i input.mp4 \
-c:v libx265 \
-preset slow \
-vf scale="720:trunc(ow/a/2)*2" \
-crf 28 \
-tag:v hvc1 \
-c:a aac -b:a 44100 \
output-hvc1.mp4
Run Code Online (Sandbox Code Playgroud)
关键是-tag:v hvc1,如果没有这个,你将得到一个hev1基于Quick的10.4+(High Sierra)无法打开的基于容器的容器.
小智 7
'hev1'/'hvc1'是用于表示容器mp4文件中流的不同打包的代码点.编码本身没有变化.可以在两种模式之间往返.试试mp4box:
mp4box -raw 1 file.mp4
Run Code Online (Sandbox Code Playgroud)
这会将流提取到原始HEVC文件中.
mp4box -add file_track1.hvc output.mp4
Run Code Online (Sandbox Code Playgroud)
如果可以,这将使用hvc1重新导入流.
小智 5
添加-tag:v hvc1为 @SushiHangover 的答案并-bsf:v hevc_mp4toannexb添加到ffmpeg命令(3.4 及更高版本)。这将创建一个与 QuickTime 兼容的 mov 文件。
ffmpeg -i input-hev1.mp4 -c:v copy -tag:v hvc1 -bsf:v hevc_mp4toannexb -c:a copy output-hvc1.mov
Run Code Online (Sandbox Code Playgroud)