我正在尝试将 MKV 文件转换为 MP4,以便与我的 PS3 兼容。我正在使用:
avconv -i file.mkv -c copy file.mp4
它失败了并且我收到以下错误:
[mp4 @ 0x8a17c00] pts < dts in stream 0
av_interleaved_write_frame(): Invalid argument
该文件是 h264 视频和 ac3 音频。
答案1
获取所需软件
sudo apt-get install gpac mkvtoolnix
从 matroska 文件提取视频和音频
首先你需要检查 matroska 文件包含哪些音轨
mkvmerge --identify video.mkv
File 'video.mkv': container: Matroska
Track ID 1: video (V_MPEG4/ISO/AVC)
Track ID 2: audio (A_AC3)
然后根据轨道提取视频和音频:
mkvextract tracks video.mkv 1:video.h264 2:audio.ac3
Extracting track 1 with the CodecID 'V_MPEG4/ISO/AVC' to the file 'video.h264'. Container format: AVC/h.264 elementary stream
Extracting track 2 with the CodecID 'A_AC3' to the file 'audio.ac3'. Container format: Dolby Digital (AC3)
Progress: 100%
将音频和视频合并到 mp4 容器中
MP4Box -fps 24 -add video.h264 -add audio.ac3 video.mp4
AVC-H264 import - frame size 1280 x 720 at 24.000 FPS
Import results: 31671 samples - Slices: 5672 I 125048 P 122648 B - 32288 SEI - 4936 IDR
AC3 import - sample rate 48000 - 6 channels
Saving to video.mp4: 0.500 secs Interleaving
我必须添加-fps 24
选项,因为MP4Box
无法正确检测视频 fps。根据使用情况,AC3
音轨应在多路复用之前重新编码为其他内容。
现在,您已将流从 matroska 容器重新混合到 mp4 容器中,而不会损失任何质量。
编辑:MP4 不正式支持 AC3 音频,因此如果您希望文件能够使用 VLC 以外的其他格式播放,则应将音轨转换为支持的格式(例如 AAC、MP3)。
答案2
我相信
avconv -i file.mkv -c:v copy -c:a copy file.mp4
是正确的命令。您需要为要单独复制的流指定编解码器复制属性。
答案3
我正在寻找将 mp4 与 m4a 混合的方法。通常ffmpeg 命令编码不起作用。试过 MP4Box 并且它非常有效。:-)
答案4
您可以使用winff-gtk2它解决了我的问题!安装:
安装 winff-gtk2。