J'ai fait ce script mais ça ne marche pas:
for /R %%f in (*.mkv) do (
ffmpeg -i "%%f" -vf subtitles="%%~nf.mkv" -acodec copy "%%~nf.mp4"
)
PAUSE
Après avoir recherché le problème, j'ai constaté que le problème est le nom du fichier. Les crochets doivent être masqués (par exemple, [1080p]coolvid.mp4
devrait devenir \[1080p\]coolvid.mp4
. Comment puis-je faire cela avec le nom du fichier (%% f)?
ffmpeg
batch
batch-file
mdrlol
la source
la source
Réponses:
Les crochets doivent être échappés
Utilisez le fichier de commandes suivant:
Lectures complémentaires
ffmpeg
.EDIT: le code original échouera si vous exécutez un fichier (ou un chemin de fichier) contenant le
!
caractère, car l’expansion différée est activée et que la variable FOR est développée avant l’expansion retardée. Donc, les noms avec!
seront corrompus.Il est facile de remédier à ce problème en activant ou désactivant le développement retardé dans la boucle, de sorte qu'aucune variable FOR ne soit développée tant que le développement retardé est activé.
la source
%%~nf
corruption des noms de fichiers contenant!
do à l'expansion retardée. Cela pourrait être corrigé en activant et désactivant l'extension différée dans la boucle.ffmpeg
alors je ne pouvais pas le tester. Je n'étais pas sûre de savoir si vous aviez besoin de vous échapper,[]
alors j'ai ajouté le code pour les deux;) Je suis heureux que ça fonctionne!