cip*_*cus 4 video convert ffmpeg mp4 mkv
我在这里看到(如何无损地将.ts文件转换为主流格式?)为此目的建议使用MKV(ffmpeg -i input -map 0 -c copy output.mkv
),但不建议使用MP4,据说这涉及对视频进行重新编码。
(基于此,我sh -c 'ffmpeg -i "$0" -map 0 -c copy "${0%%.*}".mkv' %f
在上下文菜单操作中使用,如此处所述。)
在这里(如何无损地将 .mkv 文件转换为 .mp4 文件?)我发现无需重新编码即可将 MKV 转换为 MP4 非常简单(ffmpeg -i input.mkv -codec copy output.mp4
),只需更改容器即可。
我已将命令添加到文件管理器上下文菜单中sh -c 'ffmpeg -i "$0" -map 0 -c copy "${0%%.*}".mp4' %f
,对于 .ts 文件,它可以正常工作,就像 .mkv 一样。
使用 Mediainfo 检查两个生成的 MP4 文件(TS->MP4
和TS->MKV->MP4
,其中->
是上述命令),我看到有关其视频内容的基本相同信息。
其余的都是一样的:
编码设置:cabac=1 / ref=1 / deblock=1:0:0 / analysis=0x3:0x3 / me=dia / subme=3 / psy=1 / psy_rd=1.00:0.00 /mixed_ref=0 / me_range=16 / chroma_me=1 / trellis=0 / 8x8dct=1 / cqm=0 / deadzone=21,11 / fast_pskip=1 / chroma_qp_offset=0 / 线程=8 / Lookahead_threads=2 / sliced_threads=0 / nr=0 / 抽取=1 / 交错=0 / Bluray_compat=0 / constrained_intra=0 / bframes=3 / b_pyramid=0 / b_adapt=1 / b_bias=0 / direct=1 / Weightb=1 / open_gop=0 / Weightp=2 / keyint=250 / keyint_min =25 / scenecut=40 / intra_refresh=0 / rc_lookahead=0 / rc=crf / mbtree=0 / crf=24.0 / qcomp=0.60 / qpmin=10 / qpmax=51 / qpstep=4 / vbv_maxrate=3000 / vbv_bufsize=3000 / crf_max=0.0 / nal_hrd=无 / 填充物=0 / ip_ratio=0.71 / pb_ratio=1.30 / aq=1:1.00
是的,如果视频和音频格式兼容, TS 视频可以直接转换(重新混合)为 MP4 视频,无需重新编码。您的视频是H.264,这是目前MP4中最常见且兼容性最好的视频格式,因此将其从TS复制到MP4不会有问题。
\n\nTS 支持的格式比 MP4 更多。如果您尝试将任意格式混合到 MP4 中,可能的结果是:
\n\n成功- FFmpeg MP4 复用器和您的播放器/设备支持这些格式。
部分成功- FFmpeg MP4 复用器支持这些格式,但您的播放器/设备不支持。对于 MP4 支持的不太常见或传统格式,可能会出现这种情况。
失败- 不支持格式,复用器会给您一条错误消息,例如Could not find tag for codec foo in stream #0, codec not currently supported in container
因此,为了完全兼容,如果格式不是常见且广泛支持的 H.264 或 H.265/HEVC 视频 + AAC 音频,我建议重新编码。
\n\n对于自动化,您可以使用它ffprobe
来确定格式。请参阅有没有办法在转码之前使用 ffmpeg 确定文件的编码?举个例子。然后在脚本中使用 if/then 语句来执行正确的命令。
主要的例外是字幕。MP4 没有良好的字幕支持。如果您的 TS 包含文本字幕(ASS/SSA、SRT),那么您可以将它们转换为定时文本 ( -c:s mov_text
),但播放器对定时文本字幕的支持并不普遍。基于图像的字幕必须被排除,例如负映射 -map 0 -map -0:s
。