2013-05-03 102 views
2

我想使用ffmpeg工具對視頻流進行轉碼,並僅更改視頻流分辨率,即視頻和音頻參數應保持不變。如何通過只更改分辨率來轉碼視頻流?

按照FFMPEG下面的命令行應提供所需的結果的人頁:

ffmpeg -i input.mp4 -vcodec copy -acodec copy -s WxH output.avi 

輸入流的視頻編解碼器是與AVI容器兼容。

實際結果是分辨率保持不變,似乎該流只是重新包裝在AVI容器中。

輸出流的分辨率已成功更改,但沒有-vcodec copy選項,但視頻編解碼器已更改:h264(約束基線) - > mpeg4(簡單配置文件)。

回答

6

當你的copy視頻流,你不能改變它的任何參數,因爲......好吧,你正在複製它。 ffmpeg不會以任何方式觸摸它,所以它不能改變尺寸,幀速率等等。

此外,ffmpeg總是選擇一個默認的視頻編解碼器,如果你沒有指定一個。對於AVI文件,這是mpeg4

如果你想H.264視頻,選擇-c:v libx264而不是(或-vcodec libx264這是相同的)。如果您需要保留原始配置文件,請使用-profile:v baseline

兩件事情:

  • 當你改變大小,你會重新編碼的視頻。這降低了質量,可能會嚴重損害視頻。爲了彌補這一點,你可能需要設置一個更高的質量水平。您可以通過setting the Constant Rate Factor對默認值爲23以下的任何內容執行此操作。與-crf 20。試驗一下,看看你的視頻是怎樣的。如果你有時間,可以加上-preset slow(或slower,veryslow),這會給你更好的壓縮。

  • 由於您的輸入使用了約束基準配置文件,所以請注意,在AVI中的H.264未得到正確支持,至少在使用B圖片時並不重要。雖然Baseline不支持B圖片,所以你應該沒問題。如果您使用主配置文件或以上任何內容,可能會發生該文件無法在某些設備或播放器上播放的情況。我寧願將它複製到MP4或MKV容器中,尤其是如果您的輸入文件是MP4。

+1

好的我理解了這一點。 但問題是我想以某種方式對視頻流進行轉碼,即輸入和輸出的差異僅僅是分辨率。 也就是說是否有可能獲得輸入文件編碼器的預設,使用該預設對其進行轉碼並僅更改分辨率? – user1051417 2013-05-03 15:46:26

+0

那麼,你*有*代碼轉換。您無法改變「僅」視頻流的分辨率。你將不得不解碼,縮放,然後重新編碼它,'-c:v libx264'爲你做。像幀速率,像素寬高比等的其餘部分將保持不變。如果您需要基線配置文件,您將不得不明確指定。 – slhck 2013-05-03 15:51:41

+0

非常感謝您的快速回復。 – user1051417 2013-05-03 15:59:11