用 ffmpeg 转换 mkv, QuickTime 播放 HDR 视频

2022-08-23 11:52:33 +08:00
 aF3zZCNbVLwn5RFN

Mac 上用 QuickTime 播放 HDR 视频,不用担心色彩不准等问题。
aria2 下载视频之后,可以自动运行一个 ffmpeg 的 script ,把 mkv 转换成 mp4 ,这样 QuickTime 就可以播放了。

#!/bin/sh

for f in /Users/username/Downloads/Media/*.mkv
do
  # 用 ffprobe 读取源文件的视频,音频,字幕编码
  v_codec=$(/opt/homebrew/bin/ffprobe -v quiet -select_streams v:0 -show_entries stream=codec_name -of default=noprint_wrappers=1:nokey=1 "$f")
  a_codec=$(/opt/homebrew/bin/ffprobe -v quiet -select_streams a:0 -show_entries stream=codec_name -of default=noprint_wrappers=1:nokey=1 "$f")
  s_codec=$(/opt/homebrew/bin/ffprobe -v quiet -select_streams s:0 -show_entries stream=codec_name -of default=noprint_wrappers=1:nokey=1 "$f")
  
  # QuickTime 播放 HEVC 视频必须得有个 tag: hvc1
  [ $v_codec = "hevc" ] && v="-c:v copy -tag:v hvc1" || v="-c:v copy"
  
  # QuickTime 不支持 DTS 音频,转换成 alac 格式
  [ $a_codec = "dts" ] && a="-c:a alac" || a="-c:a copy"
  
  # hdmv_pgs_subtitle 其实是图片,而 mp4 不支持 PGS 字幕,只能去除
  # 可以用 OCR 转换成 SRT ,但是 ffmpeg 不支持 OCR
  [ $s_codec = "hdmv_pgs_subtitle" ] && s="-sn" || s="-c:s mov_text"
  
  eval "/opt/homebrew/bin/ffmpeg -v error -i ${f} -map 0 ${v} ${a} ${s} ${f%.mkv}.mp4"
  # 删除原 mkv 文件
  rm -f "$f"
done

只是改变了视频的容器,视频编码等没有任何改变,所以速度非常快,通常只需要几秒钟。
一般就这三个格式问题,转换后都可以播放了。

1192 次点击
所在节点    macOS
2 条回复
aero99
2022-08-24 11:26:38 +08:00
只是改变了视频的容器,视频编码等没有任何改变,这一点超赞
我想改成 win 上的批处理 bat ,目录里面的 ts 转换成 mp4 ,定时运行,不知能否实现
aF3zZCNbVLwn5RFN
2022-08-25 09:08:49 +08:00
应该是可以的。不过有可能 ts 里的视频不是 H.264 编码,需要用 ffprobe 查看一下。不用转换的话,ffmpeg 的 -c copy 就只是换容器。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/874754

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX