lac*_*ton 25 video vlc ffmpeg avconv avidemux
我有一个以 .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
Run Code Online (Sandbox Code Playgroud)
输出文件有正确的视频,但没有声音,至少在使用 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)
Run Code Online (Sandbox Code Playgroud)
我还尝试了另一个问题的评论中建议的 CLI 命令。
avconv -i 10MB.ts -c:v copy -c:a libfaac 10MB.mp4
Run Code Online (Sandbox Code Playgroud)
同样,输出文件中没有声音。
编辑:我按照@Daniel 的建议尝试了VLC。这几乎是完美的。它快速且用户友好。我只需单击“转换/保存”,添加输入文件,选择 MP4 配置文件,将视频编解码器和音频编解码器配置为“保留原始视频/音轨”,选择目标文件,然后单击“开始”。视频看起来很完美,但音频不知何故有点损坏,但这可能是由我的视频音频流中非常奇特的东西引起的。
llo*_*gan 50
这将流式复制(重新复用)所有流:
ffmpeg -i input -map 0 -c copy output.mkv
Run Code Online (Sandbox Code Playgroud)
该-map 0
选项用于包含所有流。否则,它将使用默认的流选择行为,这只会导致每个流类型选择一个流。由于 Matroska 可以处理我包含的大多数任意流-map 0
。
这将流式复制(重新复用)所有流:
ffmpeg -i input -map 0 -c copy output.mp4
Run Code Online (Sandbox Code Playgroud)
这会将视频重新编码为 H.264 并流式复制音频:
ffmpeg -i input.ts -c:v libx264 -c:a copy output.mp4
Run Code Online (Sandbox Code Playgroud)
下一个示例将重新编码视频和音频:
ffmpeg -i input.ts -c:v libx264 -c:a aac output.mp4
Run Code Online (Sandbox Code Playgroud)
无损 H.264 示例:
ffmpeg -i input.ts -c:v libx264 -crf 0 -c:a copy output.mp4
Run Code Online (Sandbox Code Playgroud)
无损文件将是巨大的。
有关更多信息,请参阅FFmpeg Wiki:H.264。
作为对 @llogan 的其他答案的补充- 作为流副本无论如何都是更好的选择:
很长一段时间以来,我一直在使用一些命令来提取音频而不更改文件名,这些命令可以适应此处介绍的命令,以便将它们集成到文件管理器的上下文菜单中。
因此,对于“解复用和复用”而不更改文件名,请使用:
ffmpeg -i "$0" -map 0 -c copy "${0%%.*}".mkv
Run Code Online (Sandbox Code Playgroud)
我已将其添加到 Thunar 的自定义操作和 FileManager 操作配置工具(Nautilus、Nemo、Caja、PCManFM)中,如下所示:
sh -c 'ffmpeg -i "$0" -map 0 -c copy "${0%%.*}".mkv' %f
Run Code Online (Sandbox Code Playgroud)
同时在 Thunar 和 FileManager 操作中将其限制为“*.ts” video/mp2t
。
至于 GUI 应用程序,有些应用程序无需转码即可处理,只需将流复制到不同的容器(如 mkv 或 mp4)中即可。
我使用MKVToolNix(仅输出 mkv)和dmMediaConverter(mkv、mp4 和 ffmpeg 支持的任何格式)。