如何将.ts文件无损转换为主流格式?


13

我有一个以.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

同样,输出文件中没有声音。

编辑:我试过VLC由@Daniel的建议。这几乎是完美的。这是快速且用户友好的。我只需要单击“转换/保存”,添加输入文件,选择MP4配置文件,将视频编解码器和音频编解码器配置为“保留原始视频/音频轨道”,选择目标文件,然后单击“开始”。视频看起来很完美,但是音频多少有些损坏,但这可能是由于我的视频音频流中有些奇特的东西引起的。



您提到要重新混合,如果可能的话不要重新编码。您确定VLC仅在重分配吗?
llogan'1

@LordNeckbeard好点!我如何确定?
内酯

我不熟悉用于转换的VLC,但是我使用添加了一个答案ffmpeg
llogan'1

VLC会将任何内容转换为具有出色无损性的任何内容。基本上,您会受到所选格式的限制。
丹尼尔(Daniel)

Answers:


22

马特洛斯卡(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 Wiki:H.264


如果您希望对无损MP4文件进行编码,请添加-qp 0或-crf 0,如FFMpeg Wiki页面上所述:trac.ffmpeg.org/wiki/Encode/H.264
SuperSluether

2
@SuperSluether Lossless产生巨大文件。我认为“无损”是内酯的意思是“重塑”。
llogan'1

我提供的示例文件确实被截断了。我要重新分配的实际文件太大,无法轻松共享。
–lacton

1
@lacton尝试将其混合到matroska:中ffmpeg -i 10MB.ts -c copy output.mkv。您会收到错误消息:Error parsing AAC extradata, unable to determine samplerate。这就是我的MKV示例重新编码音频的原因。另请参阅#4472:流中未经编码的AAC复制失败,以及lavf / mkv:修复AAC重塑。但是,所有这些均不适用于您的大型,未截断的输入文件,并且可能按预期工作。
llogan'1

1
@LordNeckbeard ffmpeg -i input -c:v copy -c:a aac output.mkv工作完美。视频被重新混合,音频听起来和原始音频一样好,而在使用VLC转换时我没有出现轻微损坏。
内酯

3

VideoLAN(VLC- http://www.videolan.org/vlc/index.html)可以轻松地将几乎所有内容转换为任何内容。

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


现在,我已经使用VLC进行视频转换,我推荐它。谢谢你的建议。对于我的.ts文件,它几乎可以正常工作。视频看起来很完美,但是音频有些损坏。这可能是由于我的视频音频流中的某些异常现象引起的。我编辑了原始问题以包括此内容。
内酯

是的,如果对mp4内部的音频使用其他子容器,效果可能会更好。也许是RAW。
丹尼尔(Daniel)

0

作为@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

同时在Thunar和video/mp2tFileManager Actions 中将其限制为“ * .ts” 。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.