Advertisement
callmedougan

Ffmpeg concat - praise urik Kane

Jan 7th, 2021
1,301
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. @echo off
  2. SetLocal EnableDelayedExpansion
  3. title %~n0
  4.  
  5. :: only process these input files
  6. set supported_formats=avi,bik,flv,m2ts,m4p,m4v,mkv,mov,mp2,mp4,mpg,mpeg,mpe,mpv,mts,qt,swf,wmv,xmf,webm
  7.  
  8. :: temporary created txt file for concat list
  9. set filelist=temp_concat.txt
  10.  
  11. set playsound=true
  12.  
  13. :: check for input files
  14. if "%~1"=="" ( echo ERROR: NO INPUT & echo  & pause & goto :eof ) else (
  15. if "%~2"=="" ( echo ERROR: only ONE input file & pause & goto :eof )
  16. if NOT "%cd%\"=="%~dp1" cd /d "%~dp1"
  17. )
  18.  
  19. :: delete filelist is exists
  20. if exist %filelist% del %filelist%
  21.  
  22. :: iterate_files
  23. FOR %%A IN (%*) DO CALL :LogFile "%%~A"
  24. if exist %filelist% goto :ffmpeg
  25. goto :eof
  26.  
  27. :LogFile
  28. for %%G in (%supported_formats%) do (
  29.     if /i %~x1==.%%G (
  30.         if "!first!"=="" (
  31.             set "first=%~n1"
  32.             set "extension=%~x1"
  33.             if /i !extension!==.mp4 CALL :check_audio_mp4 "%~1"
  34.         ) else (
  35.             set "last=%~n1"
  36.         )
  37.         echo ^file '%~nx1'>>%filelist%
  38.         goto :eof
  39.     )
  40. )
  41. echo ERROR: %~1 - extension not supported & goto :eof
  42.  
  43. :: if audio stream is not supported in mp4 container, switch to mov (Quicktime). So far I included conditionals for uncompressed pcm, flac and alac audio.
  44. :check_audio_mp4
  45. for /f "tokens=*" %%L in ('ffprobe.exe -hide_banner -show_streams -select_streams a -show_entries stream^=codec_name -loglevel quiet "%~1"') do (
  46.     echo "%%L"| find /i "codec_name" > nul 2>&1
  47.     if !ErrorLevel!==0 (
  48.         for /f "tokens=2 delims==" %%C in ("%%L") do (
  49.             echo "%%C"| find /i "pcm" && ( set "extension=.mov" & goto :eof)
  50.             if /i "%%C"=="flac" set "extension=.mov" & goto :eof
  51.             if /i "%%C"=="alac" set "extension=.mov" & goto :eof
  52.         )
  53.     )
  54. )
  55. goto :eof
  56.  
  57. :ffmpeg
  58. title Concat %first% - %last%  ^>   %first%-%last%_merged%extension%"
  59. set "output=%first%-%last%_merged%extension%"
  60. ffmpeg.exe -f concat -safe 0 -i %filelist% -map 0:v -map 0:a? -c copy "%output%"
  61. if not !errorlevel!==0 CALL :ErrorSubroutine %output%
  62. del %filelist%
  63. if defined goterror ( pause & goto :eof)
  64. if %playsound%==true powershell -c (New-Object Media.SoundPlayer "C:\Windows\Media\tada.wav").PlaySync();
  65. goto :eof
  66.  
  67. :: if output file is empty, deletes it. prints some messages. stores goterror var.
  68. :ErrorSubroutine
  69. title ERROR ^^! ^^! ^^!
  70. if "%~z1"=="0" del %1
  71. CALL :Message "ERROR: FILE OUTPUT FAILED"
  72. set goterror=true
  73. echo 
  74. goto :eof
  75.  
  76. :: prints simple message
  77. :Message
  78. echo.
  79. echo ----------------------------------
  80. echo %~1
  81. if not "%~2"=="" echo %~2
  82. if not "%~3"=="" echo %~3
  83. echo ----------------------------------
  84. goto :eof
  85.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement