V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
mfsw
V2EX  ›  Windows

请教批处理编写问题,大佬请进。

  •  
  •   mfsw · 335 天前 · 1655 次点击
    这是一个创建于 335 天前的主题,其中的信息可能已经有所发展或是发生改变。

    ffmpeg -display_rotation:v:0 90 -i input.mp4 -c copy output.mp4

    以上代码可以把 mp4 视频旋转 90 度后生成一个新的视频。

    我现在想把这个代码转换成批处理文件。

    首先,批处理提供一个输入选项,让我可以输入要处理的 mp4 文件所在的文件夹路径。

    其次,批处理开始旋转文件夹中的所有视频,删除原始 mp4 文件,把旋转后的 mp4 文件,命名为旋转之前的文件名。

    感谢大佬援手。刚问了 gpt3.5 跟 google 双子星,都没得到正确答案。

    12 条回复    2024-01-01 11:43:37 +08:00
    mfsw
        1
    mfsw  
    OP
       335 天前
    补充下,我希望批处理中调用的 ffmpeg 所在的路径是 C:\ffmpeg\ffmpeg.exe
    defunct9
        2
    defunct9  
       335 天前 via iPhone
    写个 python
    ltyj2003
        3
    ltyj2003  
       335 天前 via Android
    https://blog.csdn.net/McdullGemini/article/details/104256559
    参考这个写批量转换
    整体流程
    源文件夹 转换 存入新文件夹
    源文件夹删除
    新文件夹改名为原文件夹
    ltyj2003
        4
    ltyj2003  
       335 天前 via Android
    针对一楼问题,两个方法
    1 、命令行里面把 ffmpeg 写为绝对路径即可
    2 、系统设置里添加环境变量
    jasonyang9
        5
    jasonyang9  
       335 天前
    照一个之前写的批处理魔改的,参考下

    SET FFMPEG=C:\ffmpeg\ffmpeg.exe
    SET FFPARAM=-display_rotation:v:0 90 -c copy
    SET SRCPATH=???
    SET SRCEXT=*.mp4
    SET DSTEXT=*.new.mp4

    FOR /R "%SRCPATH%" %%F IN (%SRCEXT%) DO (
    SET "infile=%%~fF"
    SET "outfile=%%~fF"
    SETLOCAL enableDelayedExpansion
    "%FFMPEG%" %FFPARAM% "!infile!" "!outfile!"
    ENDLOCAL
    )

    SRCPATH 是 Hard-coded ,你要传参进去另写
    没有覆盖原始 MP4 的逻辑,你自己写

    成品后希望 LZ 能共享出来

    哈哈
    e2k
        6
    e2k  
       335 天前
    @echo off
    chcp 65001
    setlocal enabledelayedexpansion

    set /p folderPath=请输入要处理的文件夹路径:

    set "ffmpegPath=C:\ffmpeg\ffmpeg.exe"

    for %%F in ("%folderPath%\*.mp4") do (
    echo 正在处理文件:"%%~nfF"
    "%ffmpegPath%" -display_rotation:v:0 90 -i "%%F" -c copy "%%~dpnF_rotated.mp4"

    echo 处理命令:"%ffmpegPath%" -display_rotation:v:0 90 -i "%%F" -c copy "%%~dpnF_rotated.mp4"
    if exist "%%~dpnF_rotated.mp4" (
    del "%%F"
    ren "%%~dpnF_rotated.mp4" "%%~nxF"
    echo 文件处理完成:"%%~nxF"
    ) else (
    echo 无法旋转文件:"%%~nxF"
    )
    )

    endlocal

    pause
    SuperXX
        7
    SuperXX  
       335 天前 via iPhone
    用 Python glob 和 subprocess 运行你的命令就行了
    Tsccai
        8
    Tsccai  
       335 天前
    这还不简单。
    第一步,把 ffmpeg 添加到环境变量,这样你在任意目录下都可以调用。
    第二步,写个批处理,遍历*.mp4 ,逐一转码写入目标目录,再删除原文件,把这个批处理放进你的视频目录即可。

    至于如何用批处理遍历文件和字符串操作来生成新的文件名,建议直接百度。最后要提醒的是不要在一开始就使能删除原文件的代码,否则很可能出现你这边还在调试呢,那边批处理直接把你原文件干掉了。
    janus77
        9
    janus77  
       335 天前
    这种就真可以问 GPT 了,我也确实用 GPT 帮我写了好几个脚本
    XxxxD
        10
    XxxxD  
       335 天前
    python 有个库是 subprocess, 引用命令行,写个小脚本批量处理
    mfsw
        11
    mfsw  
    OP
       334 天前
    @e2k 感谢大佬,完美运行,太高效了。人真的比 ai 靠谱。
    感谢其他帮忙出主意的大佬。结贴。
    PrinceofInj
        12
    PrinceofInj  
       334 天前
    这个 GPT 绝对可以搞定,我之所以这么肯定是因为前不久望让 GPT 给我写了一个几乎一样功能的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2742 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 14:58 · PVG 22:58 · LAX 06:58 · JFK 09:58
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.