修正 GeForce Experience 錄製的影片上傳 Youtube 後顏色變暗的問題

2021/03/01 更新:

將 GeForce Experience 更新至 v3.21 之後,已解決影片在 Youtube 上看起來較暗的問題,請參考:

之前的內容:

nVidia 的 GeForce Experience 有內建遊戲錄影的功能,只要按 Alt + F9 就會直接開始錄影,再按一次 Alt + F9 即可停止錄影並儲存影片。

GeForce Experience 錄製的影片在 Windows 下播放很正常,但是把影片上傳到 Youtube 之後畫面會變暗,導致一些細節看不清楚!

我有在這篇文章找到了原因,以及解決方法:

NVIDIA Shadowplay 錄製影片上傳後顏色偏暗的解決方法 - 知乎

文章裡有一些名詞我看不懂,不過大致上了解是因為 GeForce Experience 沒有把正確的影片編碼資訊寫入到影片檔的 Metadata 區段!

解決的方法就是使用 ffmpeg 來修正影片檔的編碼資訊,指令如下:

ffmpeg -i "source_file.mp4" -bsf:v h264_metadata=video_full_range_flag=1 -color_primaries bt709 -color_trc bt709 -colorspace bt709 -c:v copy -c:a copy "destination_file.mp4"

批次檔改寫

我將上述文章中的指令改寫為批次檔,內容如下:

@ECHO OFF

:: ffmpeg.exe 的程式路徑
SET EXE="D:\Portable\ffmpeg\ffmpeg.exe"

IF /I not "%~x1" == ".mp4" GOTO ERROR
%EXE% -i "%1" -bsf:v h264_metadata=video_full_range_flag=1 -color_primaries bt709 -color_trc bt709 -colorspace bt709 -c:v copy -c:a copy "%~n1.ffmpeg.mp4"
GOTO EXIT

:ERROR
ECHO Error: Invalid file extension!

:EXIT
PAUSE

請自行下載 ffmpeg.exe (我下載的是 ffmpeg-N-104381-gab79263419-win64-gpl.zip),並修改批次檔裡的 EXE 參數至你電腦中的 ffmpeg 的程式路徑。

批次檔可以隨便命名,但副檔名必須是「.bat」,例如: fix_metadata.batfix_mp4.bat

如何執行?

有三種方式:

1. 命令列模式

進到命令列模式,直接執行:

fix_metadata.bat Filename.mp4

2. 檔案拖曳

於檔案總管中,將影片檔用滑鼠左鍵拖曳給 fix_metadata.bat 去執行 (影片檔與批次檔可不在同一個資料夾):

3. 傳送到

fix_metadata.bat 檔案放到 Windows 的「SendTo」資料夾 (於檔案總管的網址列輸入 shell:sendto 可直接進到「SendTo」資料夾),在影片檔點滑鼠右鍵,選傳送到 fix_metadata.bat:

用以上任何一種方式執行成功,ffmpeg 會在影片的同一個資料夾產生一個 Filename.ffmpeg.mp4 檔案 (附加 .ffmpeg.mp4 副檔名),這就是修正過編碼資訊的影片檔,要上傳到 Youtube 請改為上傳這個檔案。

修正前後比較

修正亮度前的影片

修正亮度後的影片

應該看得出差異吧? 播放影片後是有差異的,是吧?

執行過程

附上我的 ffmpeg 執行過程:

ffmpeg version N-104381-gab79263419-20211018 Copyright (c) 2000-2021 the FFmpeg developers
  built with gcc 10-win32 (GCC) 20210408
  configuration: --prefix=/ffbuild/prefix --pkg-config-flags=--static --pkg-config=pkg-config --cross-prefix=x86_64-w64-mingw32- --arch=x86_64 --target-os=mingw32 --enable-gpl --enable-version3 --disable-debug --disable-w32threads --enable-pthreads --enable-iconv --enable-libxml2 --enable-zlib --enable-libfreetype --enable-libfribidi --enable-gmp --enable-lzma --enable-fontconfig --enable-libvorbis --enable-opencl --enable-libvmaf --enable-vulkan --disable-libxcb --disable-xlib --enable-amf --enable-libaom --enable-avisynth --enable-libdav1d --enable-libdavs2 --disable-libfdk-aac --enable-ffnvcodec --enable-cuda-llvm --enable-frei0r --enable-libglslang --enable-libgme --enable-libass --enable-libbluray --enable-libmp3lame --enable-libopus --enable-libtheora --enable-libvpx --enable-libwebp --enable-lv2 --enable-libmfx --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-librav1e --enable-librubberband --enable-schannel --enable-sdl2 --enable-libsoxr --enable-libsrt --enable-libsvtav1 --enable-libtwolame --enable-libuavs3d --disable-libdrm --disable-vaapi --enable-libvidstab --enable-libx264 --enable-libx265 --enable-libxavs2 --enable-libxvid --enable-libzimg --enable-libzvbi --extra-cflags=-DLIBTWOLAME_STATIC --extra-cxxflags= --extra-ldflags=-pthread --extra-ldexeflags= --extra-libs=-lgomp --extra-version=20211018
  libavutil      57.  7.100 / 57.  7.100
  libavcodec     59. 12.100 / 59. 12.100
  libavformat    59.  6.100 / 59.  6.100
  libavdevice    59.  0.101 / 59.  0.101
  libavfilter     8. 14.100 /  8. 14.100
  libswscale      6.  1.100 /  6.  1.100
  libswresample   4.  0.100 /  4.  0.100
  libpostproc    56.  0.100 / 56.  0.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'E:\Videos\test.mp4':
  Metadata:
    major_brand     : mp42
    minor_version   : 0
    compatible_brands: isommp42
    creation_time   : 2021-10-18T11:44:23.000000Z
    date            : 2021
  Duration: 00:00:43.05, start: 0.000000, bitrate: 16686 kb/s
  Stream #0:0[0x1](und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, smpte170m/smpte170m/bt470m, progressive), 1920x1080 [SAR 1:1 DAR 16:9], 16483 kb/s, 60 fps, 60 tbr, 90k tbn (default)
    Metadata:
      creation_time   : 2021-10-18T11:44:23.000000Z
      handler_name    : VideoHandle
      vendor_id       : [0][0][0][0]
  Stream #0:1[0x2](und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 194 kb/s (default)
    Metadata:
      creation_time   : 2021-10-18T11:44:23.000000Z
      handler_name    : SoundHandle
      vendor_id       : [0][0][0][0]
Output #0, mp4, to 'test.ffmpeg.mp4':
  Metadata:
    major_brand     : mp42
    minor_version   : 0
    compatible_brands: isommp42
    date            : 2021
    encoder         : Lavf59.6.100
  Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709, progressive), 1920x1080 [SAR 1:1 DAR 16:9], q=2-31, 16483 kb/s, 60 fps, 60 tbr, 90k tbn (default)
    Metadata:
      creation_time   : 2021-10-18T11:44:23.000000Z
      handler_name    : VideoHandle
      vendor_id       : [0][0][0][0]
  Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 194 kb/s (default)
    Metadata:
      creation_time   : 2021-10-18T11:44:23.000000Z
      handler_name    : SoundHandle
      vendor_id       : [0][0][0][0]
Stream mapping:
  Stream #0:0 -> #0:0 (copy)
  Stream #0:1 -> #0:1 (copy)
Press [q] to stop, [?] for help
frame= 2583 fps=0.0 q=-1.0 Lsize=   86536kB time=00:00:43.03 bitrate=16473.7kbits/s speed= 150x
video:85443kB audio:1020kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.084271%

參考網頁

  1. No comments yet.

  1. No trackbacks yet.

return top

%d 位部落客按了讚: