將 AVI (Xvid) 轉換為 MP4 (H.264) 並保持相同的質量

將 AVI (Xvid) 轉換為 MP4 (H.264) 並保持相同的質量

我想使用 h.264 編解碼器將 AVI 檔案壓縮為 MP4。我無法獲得相同的品質。我怎麼才能壓縮它?

原始影片:

原影片畫面:

FFmpeg 控制台輸出 ( ffmpeg -i input.avi):

FFmpeg version SVN-r26402, Copyright (c) 2000-2011 the FFmpeg developers
  built on Dec 28 2012 10:03:40 with gcc 4.4.6 20120305 (Red Hat 4.4.6-4)
  configuration: --enable-shared --enable-gpl --enable-version3 --enable-nonfree                                                                                         --enable-pthreads --enable-x11grab --enable-libopencore-amrnb --enable-libopenc                                                                                        ore-amrwb --enable-libdc1394 --enable-libfaac --enable-libmp3lame --enable-libop                                                                                        enjpeg --enable-libspeex --enable-libtheora --enable-libvorbis --enable-libx264                                                                                         --enable-libxvid --enable-zlib --enable-filter=drawtext
  libavutil     50.36. 0 / 50.36. 0
  libavcore      0.16. 1 /  0.16. 1
  libavcodec    52.108. 0 / 52.108. 0
  libavformat   52.93. 0 / 52.93. 0
  libavdevice   52. 2. 3 / 52. 2. 3
  libavfilter    1.74. 0 /  1.74. 0
  libswscale     0.12. 0 /  0.12. 0
[mpeg4 @ 0x626b50] Invalid and inefficient vfw-avi packed B frames detected
Input #0, avi, from 'input.avi':
  Metadata:
    encoder         : VirtualDubMod 1.5.10.2 (build 2542/release)
  Duration: 01:32:38.13, start: 0.000000, bitrate: 2094 kb/s
    Stream #0.0: Video: mpeg4, yuv420p, 720x304 [PAR 1:1 DAR 45:19], 23.98 tbr,                                                                                         23.98 tbn, 23.98 tbc
    Stream #0.1: Audio: ac3, 44100 Hz, 5.1, s16, 384 kb/s
At least one output file must be specified

測試1

FFmpeg 指令:

ffmpeg -i input.avi -vcodec libx264 -vpre lossless_slow -crf 25 -acodec libfaac -threads 0 -t 60 1.mp4

測試 1 螢幕:

FFmpeg 控制台輸出 ( ffmpeg -i 1.mp4)

    FFmpeg version SVN-r26402, Copyright (c) 2000-2011 the FFmpeg developers
  built on Dec 28 2012 10:03:40 with gcc 4.4.6 20120305 (Red Hat 4.4.6-4)
  configuration: --enable-shared --enable-gpl --enable-version3 --enable-nonfree --enable-pthreads --enable-x11grab --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libdc1394 --enable-libfaac --enable-libmp3lame --enable-libopenjpeg --enable-libspeex --enable-libtheora --enable-libvorbis --enable-libx264 --enable-libxvid --enable-zlib --enable-filter=drawtext
  libavutil     50.36. 0 / 50.36. 0
  libavcore      0.16. 1 /  0.16. 1
  libavcodec    52.108. 0 / 52.108. 0
  libavformat   52.93. 0 / 52.93. 0
  libavdevice   52. 2. 3 / 52. 2. 3
  libavfilter    1.74. 0 /  1.74. 0
  libswscale     0.12. 0 /  0.12. 0
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '1.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    creation_time   : 1970-01-01 00:00:00
    encoder         : Lavf52.93.0
  Duration: 00:01:00.01, start: 0.000000, bitrate: 618 kb/s
    Stream #0.0(und): Video: h264, yuv420p, 720x304 [PAR 1:1 DAR 45:19], 437 kb/s, 23.98 fps, 23.98 tbr, 24k tbn, 47.95 tbc
    Metadata:
      creation_time   : 1970-01-01 00:00:00
    Stream #0.1(und): Audio: aac, 44100 Hz, 5.1, s16, 176 kb/s
    Metadata:
      creation_time   : 1970-01-01 00:00:00
At least one output file must be specified

測試2

FFmpeg 指令:

ffmpeg -y -i input.avi -pass 1 -vcodec libx264 -vpre slow -b 2000k -threads 0 -t 60 -f mp4 -an -y /dev/null
ffmpeg -y -i input.avi -pass 2 -vcodec libx264 -vpre slow -b 2000k -threads 0 -t 60 -acodec libfaac -ab 128k -ac 2 2.mp4

測試 2 螢幕:

FFmpeg 控制台輸出 ( ffmpeg -i 2.mp4)

FFmpeg version SVN-r26402, Copyright (c) 2000-2011 the FFmpeg developers
  built on Dec 28 2012 10:03:40 with gcc 4.4.6 20120305 (Red Hat 4.4.6-4)
  configuration: --enable-shared --enable-gpl --enable-version3 --enable-nonfree --enable-pthreads --enable-x11grab --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libdc1394 --enable-libfaac --enable-libmp3lame --enable-libopenjpeg --enable-libspeex --enable-libtheora --enable-libvorbis --enable-libx264 --enable-libxvid --enable-zlib --enable-filter=drawtext
  libavutil     50.36. 0 / 50.36. 0
  libavcore      0.16. 1 /  0.16. 1
  libavcodec    52.108. 0 / 52.108. 0
  libavformat   52.93. 0 / 52.93. 0
  libavdevice   52. 2. 3 / 52. 2. 3
  libavfilter    1.74. 0 /  1.74. 0
  libswscale     0.12. 0 /  0.12. 0
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '2.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    creation_time   : 1970-01-01 00:00:00
    encoder         : Lavf52.93.0
  Duration: 00:01:00.01, start: 0.000000, bitrate: 1097 kb/s
    Stream #0.0(und): Video: h264, yuv420p, 720x304 [PAR 1:1 DAR 45:19], 1028 kb/s, 23.98 fps, 23.98 tbr, 24k tbn, 47.95 tbc
    Metadata:
      creation_time   : 1970-01-01 00:00:00
    Stream #0.1(und): Audio: aac, 44100 Hz, stereo, s16, 63 kb/s
    Metadata:
      creation_time   : 1970-01-01 00:00:00
At least one output file must be specified

答案1

首先,安裝更新版本的 FFmpeg – 從下列位置取得靜態構建下載頁面

使用vpre預設(這是一種設定預設值的方法)ffmpeg設置,而不是編碼器設置)並不是真正必要的;您通常希望使用-preset編碼器定義的選項。

對於您的兩種情況,輸出品質低的原因分別如下:

  1. 在第一種情況下crf 25,您使用恆定速率因子這會為你帶來比 x264 編碼器預設值(23)更差的品質。 CRF 控製品質。嘗試設定較低的 CRF,也許是 20、18 等。粗略地說,CRF 中的 6 個變化會為您帶來原始平均位元率的兩倍/一半。

    您必須設定較低的 CRF,因為發電損失。您正在對已經編碼的內容進行編碼,因此您再次丟棄了視覺訊息。這從來都不是好事,但如果必須這樣做,您將必須設定更高的質量,以免從輸入影片中刪除太多資訊。

  2. 在第二種情況下,您嘗試設定 2 MBit/s 的恆定位元率。您的輸入影片大致具有相同的位元率。現在,對於相同的位元率,x264 可以提供比 MPEG-4 視覺編碼器更好的視覺質量,但由於生成損失,您可能需要使用比原始位元率更高的位元率 - 否則您最終會被壓縮掉太多資訊。

    此外,恆定的比特率編碼可能會導致某些段落看起來不錯,但影片的其他部分看起來更糟。如果您不讓編碼器自由選擇要在某些內容上花費的位數,那麼您將以犧牲品質為代價,而代價是了解目標檔案大小。

    x264 確實有恆定位元率模式,但它被認為不如其他編碼方法。實際上,兩次編碼並不意味著要達到最佳質量,所以從頭開始。

話雖如此,請嘗試以下操作:

ffmpeg -i input.avi -c:v libx264 -crf 19 -preset slow -c:a libfdk_aac -b:a 192k -ac 2 out.mp4

如果libfdk_aac不可用,請使用它:

ffmpeg -i input.avi -c:v libx264 -crf 19 -preset slow -c:a aac -b:a 192k -ac 2 out.mp4

主要的品質控制旋鈕將是您的 CRF 設定。如果您需要更好的質量,請進行試驗並使用較低的值。

您也可以選擇veryslow預設,這將為您提供更好的壓縮效果,但編碼顯然會花費更長的時間。

如果您無法以合理的文件大小獲得品質良好的文件,那麼您就不走運了。最好保持原始文件原樣,不要重新編碼。當您壓縮已經壓縮的內容時,沒有神奇的「保持相同品質」工具。

相關內容