Filme und Medienstreams mit einem Klick konvertieren (Variante2)
Mit Batch und ffmpeg ist das möglich.
Liebe User,
da die meisten Hinweise bereits in der Batch stehen, also nur die Ergänzungen.
Was ist neu?
1. Untertitel sind möglich, vorhandene *.srt-Dateien werden klaglos eingemuxt.
2. Paramter via GUI-Fenster ebenso.
3. Zusatzskripte für besondere Ziele (z.B. Handy) können beliebig eingefügt und ergänzt werden.
Zusätzlich wird AutoHotKey Basic benötigt. Die Freeware gibt es dort und
Das Paket Hybrid, mit "ffmpeg" etc. kann dort herunterladen werden.
Diesen Skript als *.ahk - Pfadangabe bitte anpassen - speichern.
Die Arbeitsweise ist wie gehabt:
Datei oder Ordner auf den Link zur Batch oder *.ahk ziehen, Umwandlung abwarten, fertig.
Dank Test-Funktion, können schnell verschiedene ffmpeg-Anweisungen (Parameter) ausprobiert werden.
Auf das Dekodieren von Untertitel versteht sich "ffmpeg" noch nicht perfekt, oder ich habe es noch nicht herausgefunden.
Vielleicht mag mir ja da jemand helfen? Jetzt ist die Situation so, falls diese nicht demuxt werden können,
weist das Skript daraufhin, dass dieser Vorgang separat ausgeführt werden muss.
Die Zusatzskripte (in Batch-Form) müssen nur folgende Variable neu festlegen:
%outex% - welcher Ziel-Container soll es werden, und
%para% - wie soll "ffmpeg" arbeiten, dieser muss naturgemäß mit einem "-" anfangen: set "para=-t 30"
Die Schnittstellen zu den Skripten sind ab Zeile 68 einzupflegen ( if "%2"=="Handy" call %batFolder%\Handy-set ).
Wer die Hinweise zu den Datei-Verzeichnisse beachtet, sorgt für zusätzliche Dateisicherheit, da dann die Batch "weiss", wohin und doppelte
Dateinamen zu sichern sind.
Nun viel Spass beim Ausprobieren und Umwandeln.
Ich danke für Eure Aufmerksamkeit.
max5moritz
Liebe User,
da die meisten Hinweise bereits in der Batch stehen, also nur die Ergänzungen.
Was ist neu?
1. Untertitel sind möglich, vorhandene *.srt-Dateien werden klaglos eingemuxt.
2. Paramter via GUI-Fenster ebenso.
3. Zusatzskripte für besondere Ziele (z.B. Handy) können beliebig eingefügt und ergänzt werden.
Zusätzlich wird AutoHotKey Basic benötigt. Die Freeware gibt es dort und
Das Paket Hybrid, mit "ffmpeg" etc. kann dort herunterladen werden.
Diesen Skript als *.ahk - Pfadangabe bitte anpassen - speichern.
InputBox,VAR,Parameter eingeben, Handy Mini-PC snip oder enter
if ErrorLevel <> 0
ExitApp
run, %COMSPEC% /K D:\batFolder\Media-Convert.bat %1% %VAR%
ExitApp
Die Arbeitsweise ist wie gehabt:
Datei oder Ordner auf den Link zur Batch oder *.ahk ziehen, Umwandlung abwarten, fertig.
Dank Test-Funktion, können schnell verschiedene ffmpeg-Anweisungen (Parameter) ausprobiert werden.
Auf das Dekodieren von Untertitel versteht sich "ffmpeg" noch nicht perfekt, oder ich habe es noch nicht herausgefunden.
Vielleicht mag mir ja da jemand helfen? Jetzt ist die Situation so, falls diese nicht demuxt werden können,
weist das Skript daraufhin, dass dieser Vorgang separat ausgeführt werden muss.
Die Zusatzskripte (in Batch-Form) müssen nur folgende Variable neu festlegen:
%outex% - welcher Ziel-Container soll es werden, und
%para% - wie soll "ffmpeg" arbeiten, dieser muss naturgemäß mit einem "-" anfangen: set "para=-t 30"
Die Schnittstellen zu den Skripten sind ab Zeile 68 einzupflegen ( if "%2"=="Handy" call %batFolder%\Handy-set ).
Wer die Hinweise zu den Datei-Verzeichnisse beachtet, sorgt für zusätzliche Dateisicherheit, da dann die Batch "weiss", wohin und doppelte
Dateinamen zu sichern sind.
Nun viel Spass beim Ausprobieren und Umwandeln.
Ich danke für Eure Aufmerksamkeit.
max5moritz
::Bat-File-Name: Media-Convert, Version: 1.00_2012-05-18
@echo off&setlocal enabledelayedexpansion
mode con cols=100 lines=10&cls&color 3F
set "input=%1"&set "para=-sameq"
set "start=-ss 00:03:00.000"
set "batFolder=%~dp0"
set "auto=*.avi, *.flv, *mp4, *mkv, *.mpg, *.mpeg, *.ps, *.ts, *.wmv"
if n%1==n goto help
set "parm1=-vcodec copy"&set "parm2=-acodec copy"
set "parmstd=%parm1% %parm2% -sn"
goto :Main
::Hinweise
Beliebige Media-Container-File(s) in *.mp4 oder *.mkv oder *.mp3 ohne Aufwand umwandeln.
Mögliche Methoden der Verwendung:
1. Eine Datei oder Ordner auf die Batch oder deren Link ziehen (Auto-Modus)
2. Per Aufruf: Batch-Name "%1" "%2" %3 (1=Media-File, 2="ffmpeg"-Codes, 3=Extension des Ziel)
3. Eine Datei oder Ordner auf einen AutoHotKey-Skript (*.ahk) ziehen, der die Batch aufruft
Dann mit Übergabe der Parameter "%2" %3 oder ohne (Auto-Modus)
Im Abschnitt :run habe ich als Bespiel eine mögliche Aufrufstelle für ein Handy vorgesehen.
Dort können per Batch auch aufwändige "ffmpeg"-Codes eingesetzt werden.
4. Per Doppelklick *.ahk Starten, dann alle Paramater wie bei 2. eingeben.
Unterstützte Eingangs-Formate mindestens siehe set "auto=..."
Alternativ per Einzelprobe testen / "ffmpeg" ist recht clever!
Die Variablen %ffmpeg%, %sox% und %mediainfo% (Pfad+Programmename), im Programm-Paket "Hybrid" sind diese enthalten,
sowie %ddm% und %weg% (Ordner, bzw., der zentrale Spezial-Papierkorb) werden durch die Batch "start-set" gesetzt.
Deshalb sollten beide BAT-File im gleichen Verzeichnis sein.
SOX dient dem Anheben der Lautstärke von ac3-Stream, da diese of zu leise sind.
Die Tests beginnen ab der 3. Video-Minute - eventuell set "start=-ss 00:03:00.000" anpassen.
Mit %snip% können kurze, unsaubere Video-Anfänge (max. 59 s) abgeschnitten werden. (lt. "ffmpeg" abhängig vom Arbeitsspeicher)
"para=-sameq", mit diesem Wert versucht "ffmpeg" das Beste aus dem Input zu machen. Dieser Wert kann zu Testzwecken verändert werden.
Die Input-Dateien werden nicht verändert oder gelöscht - diese oder die Test-Files befinden sich immer im "Spezial-Ordner"
--- Verzeichnisse
(%ddm%)=D:\Medien\Edition\
Folgende Unterverzeichnisse von %ddm% werden in dieser Batch verwendet, bzw., sind durch die Länge ihrer Namen von Bedeutung.
4_Umwandlung
4_Umwandlung\Filmtrans\
5_Videos
============
Entwurf und Layout by max5moritz
:Main
if not "%2"=="" set "para=%2"
if not "%3"=="" (set "outex=%3") ELSE set "outex=mkv"
echo %outex%>%tmp%\getlen.tmp
FOR %%i IN ("%tmp%\getlen.tmp") DO set /a "theLen=%%~zi-2"&del "%tmp%\getlen.tmp"
if not "%3"=="" (if "%theLen%"=="3" (set "outex=%3") ELSE set "outex=mkv")
if "%para%"=="snip" if not "%3"=="" set "snip=-ss %3"&set "para=-sameq"
echo Verzeichnis der Bat-Datei "%batFolder%"
if "%input:~1,1%"==":" (goto Abfrage1) ELSE goto Abfrage2
:Abfrage1
if "%input:~-3,1%"=="." set "inex=%input:~-3,3%"&echo 12-"!inex!"&set "name=%input:~0,-3%
if "%input:~-4,1%"=="." set "inex=%input:~-4,4%"&echo 13-"!inex!"&set "name=%input:~0,-4%
if "%input:~-5,1%"=="." set "inex=%input:~-5,5%"&echo 14-"!inex!"&set "name=%input:~0,-5%
if "!process!"=="dir" set "inex=!inex:~1,4!"&goto :eof
goto :run
:Abfrage2
if "%input:~-4,1%"=="." set "inex=%input:~-4,3%"&echo 22-"!inex!"&set "name=%input:~1,-4%
if "%input:~-5,1%"=="." set "inex=%input:~-5,4%"&echo 23-"!inex!"&set "name=%input:~1,-5%
if "%input:~-6,1%"=="." set "inex=%input:~-6,5%"&echo 24-"!inex!"&set "name=%input:~1,-6%
goto :run
:run
if /I "%inex%"==".mp3" set "anzeig=Datei ist eine *.mp3"&goto ende
call %batFolder%\start-set
if "%2"=="Handy" call %batFolder%\Handy-set
if "%inex%"=="" goto :auto
if "%inex:~0,1%"=="." goto :run-once
goto ende
:run-once
set "run=once"
if "%inex:~-3,1%"=="." (set "inex=%inex:~1,2%") ELSE set "inex=%inex:~1,3%"
call :process
if "!proid!"=="none" (call :ohne-process) ELSE call :post-process
cls&set "anzeig=Process-%run% hat fertig"
goto ende
:auto
set "run=auto"&pushd "%input%"
echo aktuelles Verzeichnis ist "%cd%"
if "%cd:~18,6%"=="4_UMWA" set "transfer=%ddm%"
if "%cd:~20,10%"=="Umwandlung" set "transfer=%ddm%"
FOR /r "%cd%" %%i IN (%auto%) DO (
set "input=%%i"
set "outex=mkv"
set "inex=!input:~-3,3!"&set "name=!input:~0,-4!"
if "!inex:~-3,1!!inex:~-1,1!"==".s" set "inex=!input:~-2,2!"&set "name=!input:~0,-3!"
call :process
if "!proid!"=="none" (call :ohne-process) ELSE call :post-process
)
cls&set "anzeig=Process-%run% hat fertig"
goto ende
:process
echo !name!.!inex!>%tmp%\!inex!.txt
findstr "~1" %tmp%\!inex!.txt
if not errorlevel 1 if "!name:~27,8!" =="FILMTR~1" (set "pthnam=!name:~0,35!") ELSE set "pthnam=!name:~0,26!"
if errorlevel 1 set "newpth=no"
dir /B "!name!.!inex!">"%tmp%\!inex!.txt"
set /p input=<"%tmp%\!inex!.txt"
set "process=dir"&call :Abfrage1
if "!newpth!"=="no" set "pthnam=%cd%"
set datnam=!name!
set "name=!pthnam!\!datnam!"
cls&echo.&set "info=echo --"!name!.!inex!"--"&!info!
echo "%input%" >%tmp%\!inex!.txt
find /n /i "_test" %tmp%\!inex!.txt
if not errorlevel 1 set "para=%para% -t 30"&set "test=Test"
if "%para:~0,1%"=="-" (set "parm3=%para%") ELSE set "parm3=%2"
cls&echo.&!info!
call :suche
cls&color 0A&echo.&set "prostart=echo Umwandlung wird gestartet..."
if not "%snip%"=="" set "prostart=echo Umwandlung wird %snip% gestartet..."
ping -n 3 localhost 1>nul 2>nul
if "!proid!"=="none" goto :eof
if "!proid!"=="normal" call :process0
if "!proid!"=="mpeg1" call :process1
if "!proid!"=="ac3" call :process2
if "!text!"=="srt" call :process3
color 0F&ping -n 8 localhost 1>nul 2>nul
if not "!proid!"=="normal" set "run=auto"&set "proid=none"
call :processinfo
call :processend
goto :eof
:process0
!prostart!&echo.
echo --"!name!.!inex!"--&echo.&title Norm-Process wandelt !inex! zu !outex! mitttels (!parm!) um.
if "%test%"=="Test" (
%ffmpeg% %start% -i "!name!.!inex!" !parm! "!name!+.!outex!" & pause
) ELSE %ffmpeg% -i "!name!.!inex!" !parm! %snip% "!name!+.!outex!"
set "trans=normal"
goto :eof
:process1
set "outex=mp4"&!prostart!&echo.
echo --!name!--&echo.&title MPG-Process, Video in Einzel-Streams zerlegen
if "test"=="Test" (
%ffmpeg% %start% -i "!name!.!inex!" !parm1! -an -t30 "!name!-.mpeg"
) ELSE %ffmpeg% -i "!name!.!inex!" !parm1! -an "!name!-.mpeg"
title MPG-Process, transkodiere Audio-Stream zu MP3
if "test"=="Test" (
%ffmpeg% %start% -i "!name!.!inex!" -vn -acodec libmp3lame -sameq -t 30 "!name!-.mp3"
) ELSE %ffmpeg% -i "!name!.!inex!" -vn -acodec libmp3lame -sameq "!name!-.mp3"
title MPG-Process, transkodiere Video-Stream / alle Streams zu !outex! muxen
%ffmpeg% -i "!name!-.mpeg" -i "!name!-.mp3" !parm2! -sameq %snip% "!name!+.!outex!"
set "trans=mpg"
goto :eof
:process2
set "outex=mkv"&!prostart!&echo.
echo --!name!--&echo.
title AC3-Process, Video in Einzel-Streams zerlegen
if "%test%"=="Test" (
%ffmpeg% %start% -i "!name!.!inex!" !parm1! -an -t 30 "!name!-.mp4"
) ELSE %ffmpeg% -i "!name!.!inex!" !parm1! -an "!name!-.mp4"
if "%test%"=="Test" (
%ffmpeg% %start% -i "!name!.!inex!" -vn !parm2! -t 30 "!name!-.aac"
) ELSE %ffmpeg% -i "!name!.!inex!" -vn !parm2! "!name!-.aac"
title AC3-Process, korrigieren des Audio-Streams
%ffmpeg% -y -i "!name!-.aac" -ac 6 -ar 48000 -acodec pcm_s16le -f wav - | %sox% -G --volume 2.5 -s -b 16 -c 6 -r 48000 -t raw - -t wav - | %ffmpeg% -y -i - -ab 576000 -ac 6 -ar 48000 "!name!-.ac3"
title AC3-Process, transkodiere Video-Stream / alle Streams zu !outex! muxen
%ffmpeg% -i "!name!-.mp4" -i "!name!-.ac3" !parm2! %snip% "!name!+.!outex!"
set "trans=ac3"
goto :eof
:process3
set "outex=mkv"&!prostart!&echo.
set "parmsrt=-i "!name!.srt" -scodec copy"
if not "!trans!"=="" goto :muxen
echo --!name!--&echo.
title SubTitel-Process, löschen der Untertitel
if "%test%"=="Test" (
%ffmpeg% %start% -i "!name!.!inex!" !parmstd! -t 30 "!name!-.mp4"
) ELSE %ffmpeg% -i "!name!.!inex!" !parmstd! "!name!-.mp4"
title SubTitel-Process, alle Streams transkodieren und zu !outex! muxen
if "%test%"=="Test" (
%ffmpeg% %start% -i "!name!-.mp4" !parm! "!name!+.!outex!"
) ELSE %ffmpeg% -i "!name!-.mp4" !parmA! %snip% "!name!+.!outex!"
if "!text!"=="srt" goto :muxen
goto :eof
:muxen
title SubTitel-Process, Untertitel ins Video zu !outex! muxen
if not "!trans!"=="" (
%ffmpeg% -i "!name!+.!outex!" !parmsrt! %parmstd:~0,-4% "!name!_.!outex!"
) ELSE %ffmpeg% -i "!name!+.!outex!" !parmsrt! !snip! %parmstd:~0,-4% "!name!_.!outex!"
ping -n 5 localhost 1>nul 2>nul
if exist "!name!+.!outex!" move /y "!name!+.!outex!" "!name!-.!outex!"
ping -n 5 localhost 1>nul 2>nul
if exist "!name!_.!outex!" move /y "!name!_.!outex!" "!name!+.!outex!"
goto :eof
:processinfo
set "info=MediaInfo von "!name!.!outex!""
if "test"=="Test" (Pause) ELSE REM Pause
mode con cols=100 lines=100&cls&color 0E&echo.&title !info!&echo !info
%mediainfo% "!name!+.!outex!">"!name!+.txt"
%mediainfo% "!name!+.!outex!"
echo.&echo Fenster schlieát in 8 Sekunden
ping -n 15 localhost 1>nul 2>nul
goto :eof
:processend
set "info=Dateien werden verschoben..."
mode con cols=75 lines=5&cls&color 0A&echo.&title !info!
cls&color 0A&echo.&echo !info!
if "!run!"=="auto" if not "%test%"=="Test" move /y "!name!.*" "%weg%"
if "%test%"=="Test" (
move /y "!name!+.!outex!" "!name!_TEST.!outex!"
move /y "!name!+.txt" "!name!_TEST.txt"
ping -n 5 localhost 1>nul 2>nul
move /y "!name!_TEST.*" "%weg%"
)
if "!run!"=="auto" if exist "!name!-.*" move /y "!name!-.*" "%weg%"
goto :eof
:post-process
if "!run!"=="once" (set "info= Prozess wird beendet...") ELSE set "info= ein neuer Prozess wird gestartet..."
mode con cols=75 lines=40&cls&color 0A&echo.&echo !info!&title !info!
ping -n 5 localhost 1>nul 2>nul&color 0F
if exist "!name!+.!outex!" (
move /y "!name!+.!outex!" "!name!.!outex!"
if exist "!name!+.txt" move /y "!name!+.txt" "!name!.txt"
if not "!transfer!"=="" (
if exist "!transfer!5_Videos\!datnam!.!outex!" (
set "t-name="!transfer!5_Videos\!datnam!"
move /y "!t-name!.*" "!t-name!_save.*"
))
move /y "!name!.*" "!transfer!5_Videos"
)
if exist "!name!-.*" move /y "!name!-.*" "%weg%"
ping -n 5 localhost 1>nul 2>nul
del %tmp%\!inex!.txt
goto :eof
:ohne-process
if "!sub!"=="text" (set "info= Erst demuxen...") ELSE set "info= Video ist bereits transkodiert"
mode con cols=100 lines=10&cls&color E0&echo.&title !info!
if "!sub!"=="text" (
echo SubTitel gefunden:
echo "!name!.!inex!"&echo.
echo Datei wird ausgelassen, mit "TSDoctor" oder "ProjektX" demuxen
move /y "!name!.!inex!" "!name!_demuxen.!inex!"
) ELSE echo Fenster schlieát in 8 Sekunden
ping -n 10 localhost 1>nul 2>nul
goto :eof
:suche
set "info=suche Parameter..."
title !info!&echo.&echo !info!
ping -n 3 localhost 1>nul 2>nul
%ffmpeg% -i "!name!.!inex!" 2> %tmp%\!inex!.txt
:subtitle
if exist "!name!.srt" set "text=srt"&goto :audio-mp2
findstr /c:"Subtitle: text" %tmp%\!inex!.txt
if not errorlevel 1 set parmV=&set "text=text"&goto :audio-mp2
find /n /i "dvb_subtitle" %tmp%\!inex!.txt
if not errorlevel 1 set "proid=none"&set "sub=text"&goto :eof
:video-0
find /n /i "Video:" %tmp%\!inex!.txt
if errorlevel 1 set "outex=mp3"&goto :audio-mp2
findstr /c:"Video: none" %tmp%\!inex!.txt
if not errorlevel 1 set "outex=mp3"&goto :audio-mp2
if /I "%inex%"=="mp4" set "sv=mp4"&goto :video-HD
:video-1
findstr "mpeg1video" %tmp%\!inex!.txt
if not errorlevel 1 set parmV=&set "proid=mpeg1"&goto :audio-mp2
:video-2
findstr "wmv1 mpeg2video" %tmp%\!inex!.txt
if not errorlevel 1 set "parmV=
:video-4
findstr "mpeg4" %tmp%\!inex!.txt
if not errorlevel 1 set parmV=
set "proid=normal"&set "outex=mp4"&goto :audio-mp2
:video-HD
findstr "h264" %tmp%\!inex!.txt
if not errorlevel 1 set "parmV=!parm1!"&set "outex=mkv"&set "proid=normal"& (
if "!sv!"=="mp4" set "bild=h264"&set "proid=none"&goto :eof
)
:audio-mp2
findstr "wmav2 mp2 pcm_u8" %tmp%\!inex!.txt
REM if not errorlevel 1 set "parmA=-acodec libmp3lame"
if not errorlevel 1 set "parmA=-acodec libmp3lame"
:audio-mp3
findstr /c:"Audio: mp3" %tmp%\!inex!.txt
if not errorlevel 1 set "parmA=!parm2!"
set "proid=normal"&goto :suchend
:audio-ac3
findstr "ac3" %tmp%\!inex!.txt
if not errorlevel 1 set parmA=&set "proid=ac3"
if "!sv!"=="mp4" set "outex=mkv"&set "parmA=!parm2!"
:suchend
if "!parm3:~0,6!"=="-sameq" (if "!text!"=="text" (set "parm=!parmV! !parmA! !parm3! -scodec copy")ELSE set "parm=!parmV! !parmA! !parm3! -sn") ELSE set "parm=!parm3!")
if "!parm:~0,2!"==" -" set "parm=!parm:~1,500!"
if not "!name!.!inex!"=="!name!.!outex!" (if exist "!name!.!outex!" move /y "!name!.!outex!" "!name!_save.!outex!")
mode con cols=130 lines=63
cls&color 0A&echo.&echo Diese Parameter wurden gefunden:
echo.&echo --"!name!.!inex!"--&echo.&echo --"!parm!"--
echo --------------------------------------------------
ping -n 5 localhost 1>nul 2>nul&color 0F&echo.
type %tmp%\!inex!.txt&echo.
echo ______________________________
echo Parameter-Suche beendet...
ping -n 10 localhost 1>nul 2>nul
goto :eof
:help
mode con cols=75 lines=10&cls&color 3E&echo.&title Hilfe zu %~n0
echo Entweder eine Media-Container-Datei
echo (%auto%)&echo.
echo auf den Link ziehen oder&echo.
echo ein komplettes Verzeichnis mit Media-Dateien.&echo.
ping -n 12 localhost 1>nul 2>nul
:ende
if not n%1==n mode con cols=75 lines=5&color 3E&title %~n0 ist beendet&echo.&echo %anzeig%&echo.
echo Fenster schlieát in 8 Sekunden
ping -n 8 localhost 1>nul 2>nul&exit
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 185168
Url: https://administrator.de/contentid/185168
Ausgedruckt am: 24.11.2024 um 14:11 Uhr