马特罗斯卡 (MKV)

马特罗斯卡 (MKV)

我有一个以 .ts 结尾的文件(例如,这是前 10 MB)。我想将其转换为更主流的格式(例如,mp4、MPEG2-PS……),如果可能的话,以无损的方式(即重新混合)。

我已经阅读如何将 .ts 文件转换为有用的内容?问题。我尝试avidemux将视频和音频流设置为“复制”,将 MPEG 容器格式设置为“PS”。但失败了,并显示错误消息“音频不兼容/对于 DVD,音频必须是 48 kHz MP2(立体声)、AC3、DTS 或 LPCM(立体声)”。

我也尝试了建议的 CLI 命令。

avconv -i 10MB.ts -vcodec copy -acodec copy 10MB.mpg

输出文件有正确的视频,但没有声音,至少在使用 VLC 播放时是这样。这很令人困惑,因为avconv似乎已经正确检测到了音频流。

Input #0, mpegts, from '10MB.ts':
  Duration: 00:00:06.36, start: 51523.824800, bitrate: 12563 kb/s
  Program 37888 
    Stream #0.0[0x100]: Video: mpeg2video (Main), yuv420p, 1440x1080 [PAR 4:3 DAR 16:9], 20000 kb/s, 29.97 fps, 29.97 tbr, 90k tbn, 59.94 tbc
    Stream #0.1[0x110]: Audio: aac, 0 channels, fltp, 144 kb/s
    Stream #0.2[0x130]: Data: [6][0][0][0] / 0x0006
    Stream #0.3[0x138]: Data: [6][0][0][0] / 0x0006
    Stream #0.4[0x140]: Data: [13][0][0][0] / 0x000D
    Stream #0.5[0x160]: Data: [13][0][0][0] / 0x000D
    Stream #0.6[0x161]: Data: [13][0][0][0] / 0x000D
    Stream #0.7[0x162]: Data: [13][0][0][0] / 0x000D
    Stream #0.8[0x170]: Data: [13][0][0][0] / 0x000D
    Stream #0.9[0x171]: Data: [13][0][0][0] / 0x000D
    Stream #0.10[0x172]: Data: [13][0][0][0] / 0x000D
Output #0, mpeg, to '10MB.mpg':
  Metadata:
    encoder         : Lavf54.20.4
    Stream #0.0: Video: mpeg2video, yuv420p, 1440x1080 [PAR 4:3 DAR 16:9], q=2-31, 20000 kb/s, 90k tbn, 90k tbc
Stream mapping:
  Stream #0:0 -> #0:0 (copy)

我还尝试了评论中建议的 CLI 命令另一个问题

avconv -i 10MB.ts -c:v copy -c:a libfaac 10MB.mp4

再次,输出文件中没有声音。

编辑:我试过了甚高频液晶按照@Daniel 的建议。它几乎完美。它速度快,用户友好。我只需单击“转换/保存”,添加输入文件,选择 MP4 配置文件,将视频编解码器和音频编解码器配置为“保留原始视频/音轨”,选择目标文件,然后单击“开始”。视频看起来很完美,但音频有点损坏,但这可能是由我的视频音频流中一些非常奇怪的内容引起的。

答案1

马特罗斯卡 (MKV)

这会流复制(重新多路复用)所有流:

ffmpeg -i input -map 0 -c copy output.mkv

-map 0选项用于包含所有流。否则它将使用默认流选择行为将只导致每个流类型选择一个流。由于 Matroska 可以处理我包括的大多数任意流-map 0

MP4

这会流复制(重新多路复用)所有流:

ffmpeg -i input -map 0 -c copy output.mp4
  • 如果您的输入格式与 MP4 不兼容,您将收到错误。
  • 您的播放器/设备可能不支持所有任意、不太常见或传统的格式,即使 MP4 支持它们。
  • 如果有疑问,请重新编码为 H.264 + AAC,如下所示。

这会将视频重新编码为 H.264 并流复制音频:

ffmpeg -i input.ts -c:v libx264 -c:a copy output.mp4

下一个示例将重新编码视频和音频:

ffmpeg -i input.ts -c:v libx264 -c:a aac output.mp4

无损 H.264 示例:

ffmpeg -i input.ts -c:v libx264 -crf 0 -c:a copy output.mp4

无损文件将会非常巨大。

FFmpeg 维基:H.264了解更多信息。

答案2

作为其他答案由@llogan - 无论如何,流复制都是更好的选择:

我长期以来一直在使用一些命令来提取音频而不改变文件的名称,这些命令可以适应这里介绍的命令,以便将它们集成到文件管理器的上下文菜单中。

因此,对于“解复用和复用”,无需更改文件名,请使用:

ffmpeg -i "$0" -map 0 -c copy "${0%%.*}".mkv

我已将其添加到 Thunar 的自定义操作和 FileManager 操作配置工具(Nautilus、Nemo、Caja、PCManFM)中,如下所示:

sh -c 'ffmpeg -i "$0" -map 0 -c copy "${0%%.*}".mkv' %f

video/mp2t而在 Thunar 和FileManager Actions 中将其限制为“*.ts” 。


至于 GUI 应用程序,有些可以通过将流复制到不同的容器(如 mkv 或 mp4)而无需转码即可处理。

我用MKVToolNix(仅输出 mkv)和媒体转换器(mkv、mp4 以及 ffmpeg 支持的任何格式)。

答案3

视频局域网 (VLC -http://www.videolan.org/vlc/index.html) 能轻易地将任何东西转换成任何东西。

试一试吧。它可以在 Linux、Windows 和 Mac OS X 上运行,并且具有非常友好的用户界面。

相关内容