大头猫米 大头猫米
关注数: 190 粉丝数: 2,240 发帖数: 29,242 关注贴吧数: 386
批处理ffmpeg获取视频源的分辨率(宽高)并输出到变量 @echo off REM 声明采用UTF-8编码 chcp 65001 rem 自动获取视频宽高并把长宽存为变量 rem 拖入视频文件并把视频信息导出到output.txt,需要有ffprobe.exe,这个output.txt会包含媒体的所有信息,不只是宽高,这里只演示宽高 ffprobe -select_streams v -show_entries format=duration,size,bit_rate,filename -show_streams -v quiet -of csv="p=0" -of json -i %~dp1%~nx1 >output.txt 2>&1 rem 对导出的output进行读取,第11行是宽,所以提取第11行 @echo off &setlocal enabledelayedexpansion title ExtractContent color 0a set start=11 set /a stop=start+2 set start2=11 set /a stop2=start2+2 :replay rem 提取第11行数据获得视频宽 for /f "tokens=1,* delims=:" %%a in ('findstr /n ".*" output.txt ^| findstr /b "\<%start%:"') do ( set /a start+=1 if "%stop%"=="!start!" goto end set var1=%%b ) :end rem 去掉第11行里除了宽的数字外的字符(替换法) set var1=%var1: =% set var1=%var1:"width":=% rem 把宽的信息输出到变量yuankuan set yuankuan=%var1:,=% rem 提取第12行数据获得视频高,第12行是高,所以提取第12行 for /f "tokens=1,* delims=:" %%a in ('findstr /n ".*" output.txt ^| findstr /b "\<%start%:"') do ( set /a start+=1 if "%stop2%"=="!start2!" goto end set var2=%%b ) :end rem 去掉第12行里除了宽的数字外的字符(替换法) set var2=%var2: =% set var2=%var2:"height":=% rem 把高的信息输出到变量yuangao set yuangao=%var2:,=%
ffpmeg 无损转换mkv到mp4,保留标签、封面等元数据 其实这个无损是相对无损,不是绝对无损 因为mkv封装支持的格式、标签等是比mp4封装要多的 比如mkv可以封装wav音频,mp4不能封装wav音频 所以这里的无损的前提是该mkv的媒体流、标签(TAG)、封面图等,都是Mp4本身支持的 才能无损转换 我以前长期使用一个bat ffmpeg.exe -i "%~1" -vcodec copy -acodec copy "%~dpn1".mp4 这个命令就是无损转换mkv到mp4的,其中的-vcodec copy为视频流直接拷贝, -acodec copy是音频流直接拷贝 不过这个命令有一个很大的确定,那就是仅仅拷贝视频流、音频流,但是标签、章节、封面图等会丢失 所以后面做了一个改进 rem 首先提取元数据到metadata.txt bin\ffmpeg -i "%~1" -f ffmetadata -y metadata.txt rem 然后把metadata.txt元数据作为输入源进行添加 bin\ffmpeg.exe -i "%~1" -i metadata.txt -map 0 -vcodec copy -acodec copy -y "%~dpn1".mp4 这里很重要的一个参数是-map 0(意思是把视频流映射为第0个媒体流)这个代码绝对不能少,不进行map的话,会导致封面图丢失,我之前就是因为没有加-map 0导致封面图丢失,困扰了我很久,结果一个小小的代码就解决了 这里要说明的是因为mkv和mp4本身有差异,mp4无法导入mkv的xml文件,只能退而求其次通过先导出metadata.txt的方法再导入,metadata.txt里面包含的信息并不完全,会丢失专辑名和年份信息.不过艺术家、标题等会被保留.
关于Potplayer无法裁剪画面并提示硬件加速正在使用中的问题解决 这个问题确实困扰人很久了 对于带鱼屏来说,有些原片上下有黑边的,真的很烦 就算关掉了硬件加速也没用,还是弹这个窗 解决方法如下图首先确认一下该影片的编码,确认编码后,在内置视频编码器设置里找到这个编码的选项 选 System MFT Decoder即可 然后就可以裁剪了,不过缺点是很吃系统资源,如果CPU不够强的话,容易卡顿 =============================== 当然终极解决方法就是重新编码一次,直接去掉黑边重新编码 经过我的测试,用FFmpeg调用显卡GPU进行编码是非常合适的,速度快质量高 代码如下 ffmpeg -i "%~dp1%~nx1" -c:v hevc_nvenc -cq 16 -preset slow -rc vbr -vf crop=3840:1608:0:276 "%~dp1%~nx1.mp4" -cq 为质量参数,数值越低,文件越大,质量越好,16是一个比较不错的参数,当然根据自己情况可以进行变更. crop=3840:1608:0:276 为去黑边的代码 意思为裁剪尺寸为3840x1608 从坐标0,276的位置开始裁剪画面(片源的黑边上下各276个像素) -preset slow 的意思为采用慢速编码,对质量提升比较好,也可以使用fast更快编码 vbr为可变比特率,建议使用 用这个代码实测 60Gb的黑豹2(2小时41分)的4k原片用这个参数压制到了18G,去掉了黑边,就可以在带鱼屏上愉快观看了编码时间是1小时20分钟完成,显卡是2060s,比较老的显卡了 如果有更好的显卡会更快.直接去黑边重编码是一劳永逸的方法.
首页 1 2 下一页