Ffmpeg 如何将mkv电影转换为mp4以流式传输至XBox 360

Ffmpeg 如何将mkv电影转换为mp4以流式传输至XBox 360,ffmpeg,mp4,xbox360,mkv,synology,Ffmpeg,Mp4,Xbox360,Mkv,Synology,我最近购买了一个Synology Diskstation DS412+,我有一些.mkv电影,我想将它们转换成mp4文件,这样我就可以将它们直接流式传输到我的XBox 360。我在笔记本电脑上使用手刹,但我更希望直接在NAS上使用手刹 我对Linux非常生疏,也不熟悉代码转换,但我目前拥有的脚本如下: #!/bin/bash for dir in *; do if test -d "$dir"; then #echo $dir for file in "$dir"/*.mkv

我最近购买了一个Synology Diskstation DS412+,我有一些.mkv电影,我想将它们转换成mp4文件,这样我就可以将它们直接流式传输到我的XBox 360。我在笔记本电脑上使用手刹,但我更希望直接在NAS上使用手刹

我对Linux非常生疏,也不熟悉代码转换,但我目前拥有的脚本如下:

#!/bin/bash
for dir in *; do
  if test -d "$dir"; then
    #echo $dir
    for file in "$dir"/*.mkv; do
      noextension=${file%.*}.mp4
      ffmpeg -y -i "$file" -vcodec copy -acodec copy "$noextension"
    done
  fi
done
据我所知,它只是将音频和视频组件复制到mkv容器中,然后将它们插入新的mp4容器中。这对我的几个文件有效,但有一些文件不适用

以下是失败运行的输出示例:

ffmpeg version UNKNOWN, Copyright (c) 2000-2011 the FFmpeg developers
  built on Sep 16 2013 00:45:02 with gcc 4.2.1
  configuration: --prefix=/usr/syno --arch=i686 --target-os=linux --cross-prefix=/usr/local/i686-linux-gnu/bin/i686-linux-gnu- --enable-cross-compile --enable-optimizations --disable-yasm --disable-altivec --enable-pic --enable-shared --disable-static --disable-swscale-alpha --disable-ffserver --disable-ffplay --enable-libmp3lame --enable-libfaac --enable-nonfree --enable-version3 --enable-libopencore-amrnb --enable-libopencore-amrwb --disable-decoder=amrnb --disable-indev=alsa --disable-outdev=alsa --disable-encoder=dca --disable-encoder=ac3 --disable-encoder=ac3_fixed --disable-encoder=ac3_float --disable-encoder=eac3 --disable-decoder=dca --disable-decoder=eac3 --disable-decoder=truehd --cc=/usr/local/i686-linux-gnu/bin/i686-linux-gnu-ccache-gcc
  libavutil    50. 40. 1 / 50. 40. 1
  libavcodec   52.120. 0 / 52.120. 0
  libavformat  52.108. 0 / 52.108. 0
  libavdevice  52.  4. 0 / 52.  4. 0
  libavfilter   1. 77. 0 /  1. 77. 0
  libswscale    0. 14. 0 /  0. 14. 0
[matroska,webm @ 0x80726c0] Estimating duration from bitrate, this may be inaccurate

Seems stream 1 codec frame rate differs from container frame rate: 47.95 (5994/125) -> 23.98 (24000/1001)
…然后是输入章节开始和结束时间列表,然后

 Stream #0.0(eng): Audio: aac, 48000 Hz, stereo, s16 (default)
 Stream #0.1(eng): Video: h264 (High), yuv420p, 1280x692 [PAR 1:1 DAR 320:173], 23.98 fps, 23.98 tbr, 1k tbn, 47.95 tbc (default)
Stream #0.0(eng): Video: ![0][0][0] / 0x0021, yuv420p, 1280x692 [PAR 1:1 DAR 320:173], q=2-31, 2997 tbn, 23.98 tbc (default)
Stream #0.1(eng): Audio: libfaac, 48000 Hz, stereo (default)
Stream mapping:
  Stream #0.1 -> #0.0
  Stream #0.0 -> #0.1
Press [q] to stop encoding
[mp4 @ 0x808a020] pts < dts in stream 0
av_interleaved_write_frame(): Invalid data found when processing input
…然后是输出章节开始和结束时间的列表,然后

 Stream #0.0(eng): Audio: aac, 48000 Hz, stereo, s16 (default)
 Stream #0.1(eng): Video: h264 (High), yuv420p, 1280x692 [PAR 1:1 DAR 320:173], 23.98 fps, 23.98 tbr, 1k tbn, 47.95 tbc (default)
Stream #0.0(eng): Video: ![0][0][0] / 0x0021, yuv420p, 1280x692 [PAR 1:1 DAR 320:173], q=2-31, 2997 tbn, 23.98 tbc (default)
Stream #0.1(eng): Audio: libfaac, 48000 Hz, stereo (default)
Stream mapping:
  Stream #0.1 -> #0.0
  Stream #0.0 -> #0.1
Press [q] to stop encoding
[mp4 @ 0x808a020] pts < dts in stream 0
av_interleaved_write_frame(): Invalid data found when processing input

但这两者都给了我以下错误:

Error while opening encoder for output stream #0.0 - maybe incorrect parameters such as bit_rate, rate, width or height
我假设我需要特别指定输入和输出编解码器,以及诸如比特率或纵横比之类的东西,但这就是我要解决的问题


任何帮助都将不胜感激

好的,现在实际上需要更详细地了解转码时失败的视频。但是仍然要看错误,这里是你可以做的尝试。我将警告您,有很多可能的输出组合(比特率、帧率等),但所有这些都是您必须决定的

选项1

ffmpeg -y -i ip.mkv -vcodec libx264 -acodec libvo_aacenc op.mp4
这类似于
ffmpeg-i ip.mkv op.mp4
,但我明确添加了编解码器

选项2

ffmpeg -y -i ip.mkv -vcodec libx264 -acodec libvo_aacenc -b:a 92k op.mp4
增加了比特率,您可以根据需要更改

选项3

ffmpeg -y -i ip.mkv -vcodec libx264 -acodec libvo_aacenc -b:a 92k -r 30 op.mp4
增加了30帧的fps

您还可以尝试混合使用
2和3
选项

希望这有帮助。干杯。:)


PS:正如@slhck所说;请先更新ffmpeg,然后尝试这些。此外,所有这些都是
重新编码
命令,因此如果您真的要使用它们;使用比我所演示的更好的音频编码器。

如果不先更新您的ffmpeg版本,我不会再进一步。你的如果从2011年开始——现在已经三年了。请下载或编译一个较新的命令行:-然后重试,请包括完整的、未剪切的命令行输出,而不仅仅是您认为相关的部分。感谢OP不想对视频进行重新编码,您的所有选项都会这样做。当然,这可能适用于不能放在MP4中的编解码器。@slhck是的,它会对视频进行重新编码;但这些只是获得输出的可能解决方案;我的偏好是更简单=更好,但如果唯一的解决方案是重新编码,那就好了。我会尝试更新ffmpeg,看看我以后会怎么做。哇,我完全忘了我问过这个问题,差不多三年后才发现。我最终的答案是使用Plex播放任何格式的视频,而不是在Xbox360上玩mp4。我接受了这个答案,因为我已经付出了很大的努力,如果我有足够的勇气坚持下去,我相信这会非常有帮助。