2014-09-10 72 views
15

我是編碼方面的新手。我已經閱讀並嘗試了無損模式下的x264(-qp 0),但是我想確保在我的新視頻中,每個像素都包含與源文件相同的信息(在YUV 420中,所以丟失了顏色轉換是可以避免的,據我所知)。我希望能夠檢查一下,因爲如果有人說它是無損的,我不相信這一點。如何比較/顯示ffmpeg中2個視頻的區別?

我歡迎提供其他解碼器無損編碼的答案,我對編解碼器的唯一要求是具有最好的壓縮率,並讓我選擇不同的計算時間(例如x264中的安慰劑到非常快的範圍)以便根據我的需要調整壓縮級別和計算時間。但請記住,最初的問題是關於如何計算兩個視頻的逐幀差異並將其導出到第三個文件,以便我可以自己觀看。我認爲,知識(如果可能並且沒有嚴重的侷限性)在未來也會對我有用。

回答

26

比較MD5哈希解碼數據的

可以使用FFmpeg MD5 muxer表明解碼結果完全相同的輸出:

  1. 從原始輸入獲取的視頻流的MD5哈希:

    $ ffmpeg -loglevel error -i original.vid -map 0:v -f md5 - 
        MD5=5ee3ae1ee5feaf30618938290225f682 
    
  2. 轉換爲無損輸出:

    $ ffmpeg -i original.vid -c:v libx264 -qp 0 lossless.mkv 
    
  3. 比較無損視頻的MD5哈希值:

    $ ffmpeg -loglevel error -i lossless.mkv -map 0:v -f md5 - 
        MD5=5ee3ae1ee5feaf30618938290225f682 
    

注:

  • 你甚至可能不會有無損編碼器得到相同的哈希值。對各種屬性所做的更改可能會改變MD5散列值,例如色彩空間或色度子採樣。

  • 如果輸出爲有損格式,您可以看到MD5散列可以更改。

  • FFmpeg支持的其他無損壓縮視頻編碼器包括:ffv1,ffvhuff,huffyuv和utvideo。

  • 查看framemd5 muxer查看每個幀的散列。


視覺比較

隨着混合濾波器

Viewing the difference of a lossy output 查看有損輸出的差值。

您可以使用blend filter在視覺上比較差異。

使用ffplay

ffplay -f lavfi \ 
"movie=original.mkv[org]; \ 
movie=encoded.mkv[enc]; \ 
[org][enc]blend=all_mode=difference" 
  • 交融是緩慢的,並根據您的CPU和輸入的命令可能無法實時播放。或者,您可以使用ffmpeg輸出視頻,然後按照下圖所示進行觀看。

  • 除了difference之外,還有其他的模式可以滿足您的需求。請參閱documentation

使用ffmpeg

ffmpeg -i original.mkv -i encoded.mkv \ 
-filter_complex "blend=all_mode=difference" \ 
-c:v libx264 -crf 18 -c:a copy output.mkv 
  • 您可能需要添加,format=yuv420p您filterchain(difference之後)的結尾,查看非FFmpeg的基於玩家的輸出。

隨着覆蓋濾鏡

Display video difference with ffmpeg’s overlay filter

+0

謝謝,我接受。 但是,id想知道它是否可能以及如何通過減去每個幀對來創建視頻。我的想法是:轉換爲原始圖像 - >執行減法 - >創建差分視頻。 – polarka 2014-09-11 19:53:26

+0

@polarka回答已更新。 – LordNeckbeard 2014-09-11 20:50:42

+0

感謝您的快速響應。 [本頁](https://trac.ffmpeg.org/wiki/FilteringGuide)幫助我瞭解覆蓋過濾器的方法。 – polarka 2014-09-13 14:00:36