我的笔记本电脑无法处理 10 位 H.265 / HEVC 视频,所以我想将它们转换为 10 位 H.264。我如何使用 ffmpeg 来做到这一点,质量损失最少?以及如何将 10 位 H.265 转换为 8 位 H.265?
这是我当前将视频 (1080p) 大小从 2GB 调整到 300MB 的命令,但这需要很多时间:
mkdir newfiles
for %%a in ("*.mp4") do ffmpeg -i "%%a" -c:v libx264 -preset slow -crf 21 -c:a aac -b:a 128k -vf scale=678:-2 "newfiles\%%~na.mp4"
pause
Run Code Online (Sandbox Code Playgroud)
我用我的 NVIDIA GTX1070 尝试了 nvenc:
mkdir newfiles
for %%a in ("*.mp4") do ffmpeg -i "%%a" -c:v h264_nvenc -preset slow -c:a aac -b:a 128k -vf scale=678:-2 "newfiles\%%~na.mp4"
pause
Run Code Online (Sandbox Code Playgroud)
输出大小始终为 3?还是5?原始大小 - nvenc 不使用-crf.
那么我如何使用 nvenc 和 ffmpeg 来转换/调整高质量和小尺寸的视频?我应该使用 GPU 进行编码吗?
我试图转换我的高质量电影收藏以节省一些磁盘空间。我了解到 2 Pass 编码可以更好地完成工作。这是我用来通过 2 pass 对视频进行编码的命令行。
ffmpeg -i input.mkv -c:v libx264 -vf "scale=1920x1080" -vb 3.5M -pass 1 -an pass1.mp4
ffmpeg -i input.mkv -c:v libx264 -vf "scale=1920x1080" -vb 3.5M -pass 2 -c:a copy pass2.mp4
Run Code Online (Sandbox Code Playgroud)
这工作正常。而且我知道这个命令也会给出第一遍的输出。没关系。我会删除它们。我的疑问是,我阅读了许多人们使用的论坛-y和-passlogfile2 pass 编码中的命令。做什么-y和-passlogfile做什么?
还有我可以添加任何其他设置来提高质量吗?
我有一台 NVIDIA Quadro P620。我对如何使用显卡加速转码进行了大量研究。
我偶然发现这个页面 https://trac.ffmpeg.org/wiki/HWAccelIntro#Usewiththeffmpegcommand-linetool
所以,我尝试了
ffmpeg -hwaccel cuda -i input.avi output.mp4
Run Code Online (Sandbox Code Playgroud)
结果并没有比
ffmpeg -i input.avi output.mp4
Run Code Online (Sandbox Code Playgroud)
实际上转码花费的时间更长。
我可以看到它在resmon上花费的 CPU 使用率与没有 -hwaccel 选项时相同。
我做错什么了吗?我如何知道 ffmpeg 是否正确使用我的 GPU?
视频托管网站 LBRY建议用户尝试以下命令来压缩上传的内容:
ffmpeg -i input.avi -c:v libx264 -crf 21 -preset faster -pix_fmt yuv420p -maxrate 5000K -bufsize 5000K -vf 'scale=if(gte(iw\,ih)\,min(1920\,iw)\,-2):if(lt(iw\,ih)\,min(1920\,ih)\,-2)' -movflags +faststart -c:a aac -b:a 160k output.mp4
使用 h264_nvenc 而不是 libx264 最接近的等效项是什么?