Discussion forum for all Windows batch related topics.
Moderator: DosItHelp
-
joepyeweed
- Posts: 1
- Joined: 10 Jul 2017 19:58
#1
Post
by joepyeweed » 10 Jul 2017 20:12
I'm using ffmpeg to process a large number of videos in a large number of directories to re-encode to hevc. This part I can handle no problem. The problem is that in past I had already re-encoded some files and I want to skip them. There are two ways to do this. One is far above my abilities I think (reading the codec via ffmpeg and then deciding whether to process the re-encode) and the other should be fairly simple. The re-encoded files will have the string h265 at the end of the file name like videoname.h265.mp4. I've tried using the following code, but it isn't skipping files with the string h265 in them:
Code: Select all
for %%a in ("*.*") do findstr /v /c:"h265" "%%a" >nul && ffmpeg -hide_banner -i "%%a" -c:v libx265 -preset ultrafast -x265-params crf=23:qcomp=0.8:aq-mode=1:aq_strength=1.0:qg-size=16:psy-rd=0.7:psy-rdoq=5.0:rdoq-level=1:merange=44 -c:a copy "%%~na.h265.mp4"
pause
Any suggestions on getting this to work?
-
penpen
- Expert
- Posts: 2009
- Joined: 23 Jun 2013 06:15
- Location: Germany
#2
Post
by penpen » 11 Jul 2017 05:46
This might help you:
Code: Select all
@echo off
setlocal enableExtensiuons disableDelayedExpansion
for %%a in (*.*) do for %%b in ("%%~na") do if /i not "%%~xb" == ".h265" (
echo(Process file: "%%~a"
)
goto :eof
penpen
-
Samir
- Posts: 384
- Joined: 16 Jul 2013 12:00
- Location: HSV
-
Contact:
#3
Post
by Samir » 19 Jul 2017 06:33
If you know the output filename, you can use
to check if the file already exists before even running the ffmpeg part of the process.
I built an N-scaleable multi-computer network-based mp3 encoder batch file like that back in the day when real-time encoding was unheard of. Using about 3 computers, I could get real-time encoding speeds as each system would determine if the file encoding had been completed by looking for the encoded file (IF NOT EXIST XXX.MP3 L3ENC XXX.WAV XXX.MP3), and beyond 5 computers it would exceed real-time encoding. Too bad I never had 20 computers to test it on as I think I would have achieved some impressive speeds. (And now that I think about it, you probably could use the same methodology to make your transcoding project much faster if you have multiple computers available on a network since ffmpeg is stand-alone.)
-
catalinnc
- Posts: 39
- Joined: 12 Jan 2015 11:56
#4
Post
by catalinnc » 20 Jul 2017 13:00
this will encode ONLY the files that are not already re-encoded to .h265.mp4...
put all the files in a "movies" subfolder...
Code: Select all
title %~nx0
@echo off & cls
setlocal disabledelayedexpansion
for /f "delims=" %%M in ('dir /a-d /s /b movies ^| find /v ".h265"') do (
if not exist "%%~dpnM.h265.mp4" (
ffmpeg.exe -hide_banner -i "%%M" -c:v libx265 -preset ultrafast -x265-params crf=23:qcomp=0.8:aq-mode=1:aq_strength=1.0:qg-size=16:psy-rd=0.7:psy-rdoq=5.0:rdoq-level=1:merange=44 -c:a copy "%%~dpnM.h265.mp4"
)
)
endlocal
pause
exit /b
_