ffmpeg从mkv转换为mp4而不重新编码

时间:2016-10-17 02:31:33

标签: ffmpeg

我正在使用ffmpeg通过此命令将容器从mkv切换到mp4:

ffmpeg -i filename.mkv -vcodec copy 1.mp4

这是我在没有重新编码的情况下从mkv容器转换为mp4时发现的最简单的命令。输出另有说明(如果我没有记错的话)

这是输出的小屏幕截图:

FFmpeg Screenshot

它表示流映射,#0:0(264(本机)) - > 264(libx264))。这是否意味着它从x264重新编码为libx264?我做错了什么?

感谢任何帮助...

3 个答案:

答案 0 :(得分:14)

问题解决了,指定音频编解码器解决了我的问题...

ffmpeg -i filename.mkv -vcodec copy -acodec copy 1.mp4

答案 1 :(得分:0)

重塑容器,例如带有mpmpeg的MKV或AVI到MP4,只会保留一个-尝试从输出文件中的输入文件中选择一个 best 可用的音频和视频流。可以通过提供-map 0来避免这种情况。

Matroska文件通常包含FFmpeg,尤其是MOV / MPEG容器不支持的格式的字幕。 SRT / Subrip或ASS / SSA。它们可以简单地通过-sn删除,也可以转换为mov_text之类的本机格式。 (您也可以burn hard subtitles into a video stream with filters。)

有时,使用启发式方法添加丢失的信息可能会有所帮助。这是通过-find_stream_info激活的,但是我不确定是否默认使用它。

我将假定已构建的配置不重要(-hide_banner),并且仅应将严重问题记录到控制台(-loglevel warning,或者:quiet | {{1} } | panic | fatal | error | warning默认)| info | verbose | {{ 1}})。

因此,一个相当通用的转换命令如下所示:

debug

要在trace内的Windows框中批量处理多个文件并覆盖现有文件($ ffmpeg -find_stream_info -i input.mkv \ -map 0 -codec copy -codec:s mov_text output.mp4 \ -hide_banner -loglevel warning; \ rm input.mkv ),请使用cmd

-y

答案 2 :(得分:-1)

将此批处理文件扔到同一目录中并执行。这应该可以解决问题:

@ECHO OFF

FOR %%F IN (*.mkv) DO (
    ffmpeg -i %%~nF.mkv -acodec copy -vcodec copy %%~nF.mp4
)

在其他任何人都面临相同情况的情况下:

我以前使用OBS记录了桌面; Sony Vegas不接受mkv文件。我在每个捕获文件上运行了名为 ffmpeg 的上述批处理,结果MP4被Sony Vegas接受了。