我正在使用ffmpeg通过此命令将容器从mkv切换到mp4:
ffmpeg -i filename.mkv -vcodec copy 1.mp4
Run Code Online (Sandbox Code Playgroud)
这是我在没有重新编码的情况下从mkv容器转换到mp4时发现的最简单的命令.输出另有说明(如果我没有记错的话)
这是输出的小屏幕截图:
其中说流映射,#0:0(264(本机)) - > 264(libx264)).这是否意味着它从x264重新编码为libx264?我做错了什么?
任何帮助表示赞赏......
unk*_*own 18
问题解决了,指定音频编解码器解决我的问题...
ffmpeg -i filename.mkv -vcodec copy -acodec copy 1.mp4
Run Code Online (Sandbox Code Playgroud)
Cri*_*sov 11
使用 FFmpeg 重新复用容器(例如 MKV 或 AVI 到 MP4)将仅保留单个 \xe2\x80\x93,它会尝试从输出文件中的输入文件中选择最佳的可用 \xe2\x80\x93 音频和视频流。这可以通过提供来避免-map 0。
Matroska 文件经常包含 FFmpeg 的 MOV/MPEG 容器不支持的格式的字幕,尤其是。SRT/Subrip 或 ASS/SSA。它们可以简单地删除-sn或转换为本机格式,例如mov_text. (您还可以使用滤镜将硬字幕刻录到视频流中。)
有时,使用启发式方法添加缺失的信息可能会有所帮助。这是用 激活的-find_stream_info,但我不确定是否应该默认使用它。
我假设构建的配置并不重要(-hide_banner),只有严重的问题才应该记录到控制台(-loglevel warning,或者:quiet| panic| fatal| error| warning| info(默认) | verbose| debug| trace)。
因此,一个相当通用的转换命令如下所示:
\n\n$ ffmpeg -find_stream_info -i input.mkv \\\n -map 0 -codec copy -codec:s mov_text output.mp4 \\\n -hide_banner -loglevel warning; \\\n rm input.mkv\nRun Code Online (Sandbox Code Playgroud)\n\n要批量处理 Windows 机器上的多个文件cmd并覆盖现有文件 ( -y),请使用for:
FOR /r %F IN (*.mkv) DO (@ffmpeg \\\n -find_stream_info -i "%F" \\\n -map 0 -codec copy -codec:s mov_text "%~pnF.mp4" \\\n -hide_banner -loglevel warning -y)\nRun Code Online (Sandbox Code Playgroud)\n