3

最近、Synology Diskstation DS412+ を購入しました。いくつかの .mkv ムービーを mp4 ファイルに変換/トランスコードして、XBox 360 に直接ストリーミングできるようにしたいと考えています。ラップトップで Handbrake を使用していますが、むしろ、これを 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

XBox サポート Web サイトには、サポートされているファイル タイプの詳細が記載されています。MP4 は H.264 標準に含まれています: http://support.xbox.com/ar-SA/xbox-360/system/audio-video-playback

私は少し途方に暮れています。http://www.ffmpeg.org/ffmpeg.htmlを読みましたが、ffmpeg からのエラー メッセージはあまり役に立たないようです。Synology Box でこのようなものを実行する場合、リソースはせいぜいまばらです。

次のようなスクリプトのいくつかの順列を試しました。

ffmpeg -i "$file" "$noextension"

ffmpeg -y -i "$file" -vcodec mpeg4 -acodec libfaac "$noextension"

しかし、どちらも次のエラーが表示されます。

Error while opening encoder for output stream #0.0 - maybe incorrect parameters such as bit_rate, rate, width or height

ビットレートやアスペクト比などとともに、入力コーデックと出力コーデックを具体的に指定する必要があると思いますが、ここで行き詰まります。

どんな助けでも大歓迎です!

4

1 に答える 1