. : : ClassiClub ForuM : : .

会员中心 论坛帮助 日历事件 标记论坛已读
返回   精品技术论坛 » 技术论坛 » 『软件使用』

『软件使用』: 电脑软件推荐, 电脑软件使用, 经验分享



发表新主题 回复
 
主题工具
林展扬
 
林展扬 的头像
超级会员
 
资 料:
注册日期: Sep 2002
帖子: 1,996 声望值: 3
精华: 0
#1 旧 2021-04-14, 14:28:25 默认 【求助】两个奇怪的视频压制问题。
林展扬 当前离线  

视频1,用MediaInfo看,帧率模式是可变,帧率:28.704 FPS,最小帧率:14.985 FPS,最大帧率:119.880 FPS。
用ffmpeg pipe到x265,能正确识别帧率是29.97,压制后播放正常。
但是用VapousSynth压制,帧率识别为1000000/34839,压制后音画不同步。

视频2,用MediaInfo看,帧率模式是可变,帧率:25.234 FPS,最小帧率:14.985 FPS,最大帧率:29.970 FPS。
用ffmpeg pipe道x265,帧率识别为120000/1001,压制出来只有10M,不正常。
用VapourSynth压制,帧率识别为1000000/39629,压制出来大小正常,但是也有音画不同步的现象。

请问,这种现象如何解决?
这是二次压制,以前压制的很正常,但是找不到原来的脚本了,也记不起来参数上有什么变化了,麻烦压制大佬看看。

附件是压制的批处理文件。
把压制的批处理文件贴出来,方便大家查看。请压制大佬指点指点。
这是ffmpeg的压制脚本。
引用:
cls
@echo off
chcp 65001 >nul
setlocal EnableDelayedExpansion
md Animes\Done Animes\Original 2>nul
set Format=*.avi *.mkv *.mp4 *.mpg *.vob *.wmv
set ffmpeg=%CD%\Binaries\ffmpeg.Exe
set MediaInfo=%CD%\Binaries\MediaInfo.Exe
set NeroAAC=%CD%\Binaries\NeroAACEnc.Exe
set RAR=%CD%\Binaries\RAR.Exe
set x265=%CD%\Binaries\x265_Yuuki.Exe

:CHECK
pushd Animes & dir %FORMAT% >nul 2>nul && GOTO Animes || (popd & PAUSE & GOTO CHECK)
::跳转到Animes目录,执行dir,如执行成功(文件存在)则跳转到Animes部分代码执行;如执行失败(文件不存在)则跳转到退出。

:Animes
for /f "delims=" %%a in ('dir %Format% /b /ON') do (
for /f %%A in ('%MediaInfo% --Output^=Video^;%%AspectRatio%% "%%a"') do (if %%A GEQ 1.5 (set DAR=16/9) else set DAR=4/3)
for /f %%A in ('%MediaInfo% --Output^=Video^;%%FrameCount%% "%%a"') do (set FRAMESCOUNT=%%A)
echo @%ffmpeg% -y -v 16 -i "%%a" -vn -ar 44100 -f wav pipe:^|%NeroAAC% -ignorelength -hev2 -br 32000 -if - -of "%Temp%\%%~na.m4a">"%Temp%\%%~na.Cmd"
echo @%RAR% a -ai -inul -m0 -v5242880k "Original\%%~na.RAR" "%%~na.*" ^& @exit>>"%Temp%\%%~na.Cmd"
start "" /b call "%Temp%\%%~na.Cmd"
ping -n 3 127.0.0.1>nul
%ffmpeg% -y -v 16 -i "%%a" -an -pix_fmt yuv420p -vf zscale=w=!DAR!*468:h=468:f=spline36 -strict -1 -f yuv4mpegpipe - | %x265% --y4m -D 10 --stylish --frames !FRAMESCOUNT! --sar 1 --crf 26 --preset ultrafast --tune lp++ -o "%Temp%\%%~na.hevc" -
if exist "%%~na.ass" move "%%~na.ass" Done
%ffmpeg% -y -v 16 -i "%Temp%\%%~na.hevc" -i "%Temp%\%%~na.m4a" -metadata:a language=jpn -c copy -map_metadata -1 -map_chapters -1 "Done\%%~na.mp4" || echo "%%a">>..\Error.Log & del "%Temp%\%%~na.*" "%%a"
)
popd

GOTO CHECK
这是VapourSynth的压制脚本。
引用:
cls
@echo off
chcp 65001 >nul
setlocal EnableDelayedExpansion
md Animes\Done Animes\Original 2>nul
set Format=*.avi *.mkv *.mp4 *.mpg *.vob *.wmv
set ffmpeg=%CD%\Binaries\ffmpeg.Exe
set MediaInfo=%CD%\Binaries\MediaInfo.Exe
set NeroAAC=%CD%\Binaries\NeroAACEnc.Exe
set RAR=%CD%\Binaries\RAR.Exe
set x265=%CD%\Binaries\x265_Yuuki.Exe
set VSPipe=%CD%\Binaries\Python\VSPipe.exe

:CHECK
pushd Animes & dir %FORMAT% >nul 2>nul && GOTO Animes || (popd & PAUSE & GOTO CHECK)
::跳转到Animes目录,执行dir,如执行成功(文件存在)则跳转到Animes部分代码执行;如执行失败(文件不存在)则跳转到退出。

:Animes
for /f "delims=" %%a in ('dir %Format% /b /ON') do (
for /f %%A in ('%MediaInfo% --Output^=Video^;%%AspectRatio%% "%%a"') do (if %%A GEQ 1.5 (set DAR=16/9) else set DAR=4/3)
if exist "Original\%%~na.Part*.RAR" del "Original\%%~na.RAR" "Original\%%~na.Part*.RAR"
echo @%ffmpeg% -y -v 16 -i "%%a" -vn -async -1 -ar 44100 -f wav pipe:^|%NeroAAC% -ignorelength -hev2 -br 32000 -if - -of "%Temp%\%%~na.m4a">"%Temp%\%%~na.Cmd"
echo @%RAR% a -ai -inul -m0 -v5242880k "Original\%%~na.RAR" "%%~na.*" ^& @exit>>"%Temp%\%%~na.Cmd"
start "" /b call "%Temp%\%%~na.Cmd"
echo import^ vapoursynth as vs>"%Temp%\%%~na.vpy"
echo core=vs.get_core^(^)>>"%Temp%\%%~na.vpy"
echo core.max_cache_size=2048>>"%Temp%\%%~na.vpy"
echo accept_lowercase=True>>"%Temp%\%%~na.vpy"
echo video=core.ffms2.Source^(r"%%~fa",cachefile=r"%Temp%\%%~na.ffindex"^)>>"%Temp%\%%~na.vpy"
echo video=core.resize.Spline36^(clip=video, width=!DAR!*468, height=468^)>>"%Temp%\%%~na.vpy"
echo video.set_output^(^)>>"%Temp%\%%~na.vpy"
%VSPipe% "%Temp%\%%~na.vpy" - --y4m | %x265% --y4m -D 10 --stylish --sar 1 --crf 26 --preset ultrafast --tune lp++ -o "%Temp%\%%~na.hevc" -
if exist "%%~na.ass" move "%%~na.ass" Done
%ffmpeg% -y -v 16 -i "%Temp%\%%~na.hevc" -i "%Temp%\%%~na.m4a" -metadata:a language=jpn -c copy "Done\%%~na_VapourSynth.mp4" || echo "%%a">>..\Error.Log & del "%Temp%\%%~na.*" "%%a"
)
popd

GOTO CHECK
上传的附件
文件类型: 7z Encoder.7z (1.4 KB, 4 次查看)

此帖于 2021-04-15 14:09:31 被 林展扬 编辑. .


坚持失去了意义,是消失的时候了。
回复时引用此帖
林展扬
 
林展扬 的头像
超级会员
 
资 料:
注册日期: Sep 2002
帖子: 1,996 声望值: 3
精华: 0
#2 旧 2021-04-17, 09:23:22 默认
林展扬 当前离线  

大概发现了问题的根源了。
视频2 ,用MediaInfo查看,总帧数是42000左右,但是用PotPlayer播放时候查看,总帧数大约是200000,而我在批处理里加了 --frames !FRAMESCOUNT! 这个由MediaInfo传递而来的参数,使得压制的时候只压制了42000帧。
我尝试去掉 --frames !FRAMESCOUNT! 这个参数,压制貌似正常了,也能正确的得到约75M的压制后的文件。

但是,问题来了,按照以往经验的估算,这个视频确实应该是42000帧左右,不过它是VFR的视频,ffmpeg不能正确的识别帧率,所以按照120帧,200000总帧数来压制。

那么,请教一下,这个如何让ffmpeg得到正确的帧率?
回复时引用此帖
发表新主题 回复

主题工具

论坛规则  发帖规则
不可以发表主题
不可以回复帖子
不可以上传附件
不可以编辑自己的帖子
论坛启用 vB 代码
版面启用 表情符号
版面启用 [IMG] 代码
版面禁用 HTML 代码


所有时间均为北京时间, 现在的时间是 08:08:56.

本论坛带宽由迅通网络提供
SSL证书由TrustAsia提供

Copyright © 2000 - 2019 ClassiClub Forum All Rights Reserved.
粤ICP备09123456号