2014-02-05 210 views
3

我最近購買了一臺Synology Diskstation DS412 +,並且我有很多.mkv電影,我想將它們轉換爲mp4文件,以便我可以將它們直接到我的XBox 360.我在我的筆記本電腦上使用Handbrake,但我寧願直接在我的NAS上發生這種情況。如何將mkv電影轉換爲mp4以便流式傳輸到XBox 360

我在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支持網站提供有關支持的文件類型的詳細信息,其中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 

我承擔我需要特別指定輸入和輸出編解碼器,以及諸如比特率或寬高比這些東西我在哪裏脫落了。

任何幫助將不勝感激!

+3

我不會再去更新你的ffmpeg版本。你是否從2011年開始 - 現在已經三歲。請下載或編譯一個新的:http://ffmpeg.org/download.html - 然後再試一次,請包括完整的,未經剪切的命令行輸出,而不僅僅是您認爲相關的部分。謝謝 – slhck

回答

2

好吧,現在實際上需要有一個轉碼時失敗的視頻細節。但仍然在看錯誤,這裏是你可以做的嘗試。我會提醒你,有很多組合可能用於輸出(比特率,幀率等),但是你必須決定。

選項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 and 3期權組合的一個嘗試。

希望這helps.Cheers :)

PS:由於@slhck告訴;請先更新ffmpeg,然後嘗試這些。所有這些都是re-encoding命令,所以如果你真的想要他們;使用比我說明的更好的音頻編碼器。

+0

OP不希望對視頻進行重新編碼,所有選項都是這樣。當然,這可能適用於無法放入MP4的編解碼器。 – slhck

+0

@slhck是的,它確實重新編碼視頻;但這些只是可能的解決方案,以獲得產出。 – BlueSword

+0

我實際上沒有重新編碼的問題;我的偏好會更簡單=更好,但如果唯一的解決方案涉及重新編碼,那就沒問題。我會嘗試更新ffmpeg並查看我以後的工作方式。 –

相關問題