将 ATSC TS 转换为 MKV,包括 FFMPEG 中的所有音轨和隐藏字幕

将 ATSC TS 转换为 MKV,包括 FFMPEG 中的所有音轨和隐藏字幕

我猜这可以通过某种方式完成,因为我见过一些程序,它们是 FFMPEG 的 GUI 前端,基本上可以做到这一点,但我正试图从 Ubuntu 中的命令行弄清楚。我想将 ATSC 录音中的 MPEG2 视频流转码为 h264,但保留所有音频通道。我还想将隐藏式字幕转换为最终 MKV 包装器中的字幕轨道。此外,是否可以至少将主音轨和字幕轨道标记为“glish”?为了使它更加出色,将其制作成一个 BASH 脚本,我可以在其中命名输入文件并将其保存为相同的名称,但将其更改为 .mkv 会使其变得完美。我不了解如何从头开始编写脚本,也不知道 FFMPEG 命令的正确变量。

答案1

这有点棘手,但这是一个可行的方法:

INFILE=input.ts
OUTFILE=output.mkv
ffmpeg \
  -i "${INFILE}" \
  -f lavfi -i movie="${INFILE}[out+subcc]" \
  -map 0 -map 1:s \
  -codec:v libx264 \
  -codec:a copy \
  -codec:s srt \
  -metadata:s:s:0 language=eng \
  "${OUTFILE}"

这里,input.tsoutput.mkv分别是您想要的输入 MPEG-TS 和输出 Matroska 文件。将其推广到脚本留给读者作为练习。

逐行解释参数:

-i ...是输入文件。

-f lavfi -i ...允许我们提取嵌入的字幕流。

-map 0 -map 1:s选择要输出的流。

-codec:v libx264告诉 ffmpeg 将视频转换为 H.264。

-codec:a copy将所有音频流不加改变地复制到输出。

-codec:s srt告诉 ffmpeg 将嵌入的字幕转换为 SRT。

-metadata:s:s:0 language=eng将字幕流语言设置为英语。

笔记:

  • 我只将它用于无线 ATSC 流,包括我假设的 EIA-608 字幕。我不知道它是否适用于 QAM(有线)录音,尽管我预计它可以。
  • 即使您将文件名放在引号中,输入包含某些字符的文件名也可能会遇到问题。
  • 这将复制所有音频流。如果您只想要第一个,则需要从输入 0 明确映射各个流。
  • 音频流可能已经设置了语言。如果没有,请添加另一个 -metadata 选项来设置音频流语言。
  • 您可能希望使用 -crf 选项试验视频编码质量。如果您的输入视频是隔行扫描,您可能还希望通过添加行-filter:v bwdif=0,scale=1280:720后的-map内容来反隔行扫描并缩放到 720p。

相关内容