ffmpeg - 在流中找不到编解码器 subrip 的标记,容器中当前不支持编解码器
问题描述
我正在尝试使用以下命令将视频转换为较低质量:
ffmpeg -i in.mkv -c:a copy -map 0:5 -map 0:6 -map 0:7 -c:s copy -map 0:9 -c:v h264_nvenc -rc constqp -qp 23 -map 0:0 out.mp4
以流 0:9 为字幕。我明白了
Stream mapping:
Stream #0:5 -> #0:0 (copy)
Stream #0:6 -> #0:1 (copy)
Stream #0:7 -> #0:2 (copy)
Stream #0:9 -> #0:3 (copy)
Stream #0:0 -> #0:4 (h264 (native) -> h264 (h264_nvenc))
Press [q] to stop, [?] for help
[mp4 @ 0x55c6edd3a640] track 0: codec frame size is not set
[mp4 @ 0x55c6edd3a640] track 1: codec frame size is not set
[mp4 @ 0x55c6edd3a640] track 2: codec frame size is not set
[mp4 @ 0x55c6edd3a640] Could not find tag for codec subrip in stream #3, codec not currently supported in container
Could not write header for output file #0 (incorrect codec parameters ?): Invalid argument
Error initializing output stream 0:4 --
如果我更改-c:s copy
为-c:s mov_text
,则错误消失,但字幕不起作用。其他一切似乎都很好。
解决方案
您正在输出 MP4,但它仅支持mov_text
(流式文本格式 [14496-17] 的通用名称)softsubs。但是,播放器支持并不普遍。
使用更好的播放器(VLC、mpv、Pot Player),使用不同的输出容器格式(例如 MKV),或使用硬字幕(参见字幕文件管理器)。
推荐阅读
- docker - 使用 Traefik 重写路径
- r - 使用 astsa 包绘制季节性 arima 的错误
- java - java中的弹出式键盘
- python - Python 中的 Google Places API
- c++ - 不能从派生类中获取基类的成员。C++
- twitter-bootstrap - 流体容器 2 行
- asp.net-mvc - PartialView not found:ViewEngine 在错误的地方搜索
- itext - itextsharp 中的 GetAppearanceStates()
- php - FPDF - 使用 Codeigniter 控制器调用页眉和页脚的其他方法
- c# - elasticsearch NEST 获取嵌套文档