吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 483|回复: 8
收起左侧

[经验求助] FFmpeg Batch AV Converter 帮忙写个命令

[复制链接]
joody 发表于 2024-12-26 16:53
50吾爱币
本帖最后由 joody 于 2024-12-27 10:34 编辑

在用FFmpeg Batch AV Converter,人笨,不会直接用ffmpeg
有一些产品mp4视频,分辨率不同,宽高比不同,想把宽度大于720的原始视频转换为720,如果原始视频宽度小于720则复制一份,格式前后都是MP4,宽高比,音频,编码都跟原始视频一样。
谢谢!

最佳答案

查看完整内容

使用FFmpeg Batch AV Converter,你可以创建一个批处理脚本来实现你描述的功能。下面是一个简单的批处理命令行,用于Windows操作系统。如果你使用的是Linux或MacOS,请告诉我,以便提供相应的脚本。 首先,请确保你已经安装了FFmpeg并且可以从命令行调用它。 这个任务可以通过编写一个简单的批处理文件(.bat)来完成,该文件会遍历指定目录中的所有MP4文件,并根据你的要求处理它们。这里是一个示例脚本: @echo off ...

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

pxhzai 发表于 2024-12-26 16:53
本帖最后由 pxhzai 于 2024-12-26 17:00 编辑

使用FFmpeg Batch AV Converter,你可以创建一个批处理脚本来实现你描述的功能。下面是一个简单的批处理命令行,用于Windows操作系统。如果你使用的是Linux或MacOS,请告诉我,以便提供相应的脚本。

首先,请确保你已经安装了FFmpeg并且可以从命令行调用它。

这个任务可以通过编写一个简单的批处理文件(.bat)来完成,该文件会遍历指定目录中的所有MP4文件,并根据你的要求处理它们。这里是一个示例脚本:


@echo off
setlocal enabledelayedexpansion

REM 设置输出目录
set "output_dir=output"

REM 如果输出目录不存在,则创建它
if not exist "%output_dir%" mkdir "%output_dir%"

REM 遍历当前目录下的所有mp4文件
for %%f in (*.mp4) do (
    REM 获取视频的宽度
    for /f "tokens=2 delims=:=" %%i in ('ffprobe -v error -select_streams v:0 -show_entries stream=width -of default=noprint_wrappers=1:nokey=1 "%%f"') do set "width=%%i"
   
    REM 检查宽度是否大于720
    if !width! gtr 720 (
        REM 宽度大于720,进行转换
        ffmpeg -i "%%f" -vf "scale=720:-1" -c:a copy "%output_dir%\%%~nf_converted.mp4"
    ) else (
        REM 宽度小于等于720,直接复制
        copy "%%f" "%output_dir%\%%~nf.mp4"
    )
)

echo 处理完成。
pause


将上述代码保存为一个`.bat`文件,比如`convert_videos.bat`。然后将这个批处理文件放在包含你要处理的MP4文件的同一目录中。双击运行这个批处理文件,它将会:

1. 创建一个名为`output`的子目录来存放处理后的文件(如果该目录尚不存在的话)。
2. 使用`ffprobe`工具检查每个视频文件的宽度。
3. 如果视频宽度大于720像素,使用`ffmpeg`命令将其宽度调整到720像素,同时保持原始的宽高比和音频流不变(通过`-c:a copy`参数)。转换后的文件将被保存在`output`目录中,文件名后附加`_converted`以示区别。
4. 如果视频宽度小于或等于720像素,直接复制原文件至`output`目录而不做任何修改。

请注意,这段脚本假设你有一个相对简单的环境设置。如果你有更复杂的需求或者需要对脚本进行定制,请告知我更多细节。



[Asm] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
@echo off
setlocal enabledelayedexpansion
 
REM 设置输出目录
set "output_dir=output"
 
REM 如果输出目录不存在,则创建它
if not exist "%output_dir%" mkdir "%output_dir%"
 
REM 遍历当前目录下的所有mp4文件
for %%f in (*.mp4) do (
    REM 获取视频的宽度
    for /f "tokens=2 delims=:=" %%i in ('ffprobe -v error -select_streams v:0 -show_entries stream=width -of default=noprint_wrappers=1:nokey=1 "%%f"') do set "width=%%i"
     
    REM 检查宽度是否大于720
    if !width! gtr 720 (
        REM 宽度大于720,进行转换
        ffmpeg -i "%%f" -vf "scale=720:-1" -c:a copy "%output_dir%\%%~nf_converted.mp4"
    ) else (
        REM 宽度小于等于720,直接复制
        copy "%%f" "%output_dir%\%%~nf.mp4"
    )
)
 
echo 处理完成。
pause
 楼主| joody 发表于 2024-12-26 17:08
pxhzai 发表于 2024-12-26 16:58
使用FFmpeg Batch AV Converter,你可以创建一个批处理脚本来实现你描述的功能。下面是一个简单的批处理命 ...

感谢大神,
前提:命令行运行ffmpeg ;
是否可以调用 我在d盘的 “D:\Program Files\1 green\FFmpeg_Batch_AV_Converter_Portable_3.1.2_x64\ffmpeg.exe”
 楼主| joody 发表于 2024-12-26 17:21
好吧 我老老实实安装了ffmpeg,现在命令行ok,但是提示
Argument 'noprint_wrappers ' provided as input filename, ,but. width was already specified.
pxhzai 发表于 2024-12-26 19:34
joody 发表于 2024-12-26 17:21
好吧 我老老实实安装了ffmpeg,现在命令行ok,但是提示
Argument 'noprint_wrappers ' provided as input  ...

用通义千问自己问


错误信息 `Argument 'noprint_wrappers' provided as input filename` 表明 `ffprobe` 命令中 `-of default=noprint_wrappers=1:nokey=1` 的格式可能有问题。具体来说,`noprint_wrappers` 应该和 `nokey` 一样作为一个键值对出现,而不是被误解为输入文件名的一部分。

你可以尝试调整 `ffprobe` 的命令部分如下:


for /f "tokens=2 delims=:=" %%i in ('ffprobe -v error -select_streams v:0 -show_entries stream=width -of default=nw=1:nk=1 "%%f"') do set "width=%%i"


这里我使用了 `nw=1` 和 `nk=1` 来代替 `noprint_wrappers=1` 和 `nokey=1`,这是 `ffprobe` 对应选项的简写形式。

此外,请确保你的 `ffmpeg` 和 `ffprobe` 工具都在系统的 PATH 环境变量中,或者你在调用它们时提供完整路径。如果你是在 Windows 上运行此脚本,并且 `ffmpeg` 和 `ffprobe` 不在 PATH 中,你需要给出这些工具的完整路径,例如 `C:\path\to\ffmpeg\bin\ffmpeg` 和 `C:\path\to\ffmpeg\bin\ffprobe`。

下面是修改后的脚本段落:

@echo off
setlocal enabledelayedexpansion

REM 设置输出目录
set "output_dir=output"

REM 如果输出目录不存在,则创建它
if not exist "%output_dir%" mkdir "%output_dir%"

REM 遍历当前目录下的所有mp4文件
for %%f in (*.mp4) do (
    REM 获取视频的宽度
    for /f "tokens=2 delims=:=" %%i in ('ffprobe -v error -select_streams v:0 -show_entries stream=width -of default=nw=1:nk=1 "%%f"') do set "width=%%i"
     
    REM 检查宽度是否大于720
    if !width! gtr 720 (
        REM 宽度大于720,进行转换
        ffmpeg -i "%%f" -vf "scale=720:-1" -c:a copy "%output_dir%\%%~nf_converted.mp4"
    ) else (
        REM 宽度小于等于720,直接复制
        copy "%%f" "%output_dir%\%%~nf.mp4"
    )
)

echo 处理完成。
pause


请根据上述建议调整你的脚本并再次尝试运行。如果还有其他问题或错误,请随时告知。
 楼主| joody 发表于 2024-12-26 20:30
明天我测试
 楼主| joody 发表于 2024-12-27 09:20
仍然提示 Argument 'noprint_wrappers ' provided as input filename, ,but. width was already specified.
问了千问和百度ai,还是不行。
变量和cmd如下图,没问题吧。

 楼主| joody 发表于 2024-12-27 10:53
pxhzai 发表于 2024-12-26 19:34
用通义千问自己问

老样子

尝试了换ffmpeg版本,环境变量,文件放在根目录下等,也问了ai,仍然不得其法
增加了吾爱币,麻烦帮忙看一下,谢谢
 楼主| joody 发表于 2024-12-27 13:24
joody 发表于 2024-12-27 10:53
老样子

尝试了换ffmpeg版本,环境变量,文件放在根目录下等,也问了ai,仍然不得其法

也尝试了win10,win7,仍然这样
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2025-5-18 17:35

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表