![马特罗斯卡 (MKV)](https://linux22.com/image/1053947/%E9%A9%AC%E7%89%B9%E7%BD%97%E6%96%AF%E5%8D%A1%20(MKV).png)
我有一个以 .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 上运行,并且具有非常友好的用户界面。