批量视频格式转换

最近想找一款视频格式转换工具,可以满足以下的需求:

  • 只需要设置分辨率、编码格式,不要把参数全部罗列出来让我去设置;
  • 如果视频本身的分辨率小于设定值,就沿用视频本身的分辨率;
  • 可以批量转换。

然而网上搜了一下,没有找到满足需求的。想到大多数视频格式转换工具,都是基于 ffmpeg 开发的桌面应用,干脆自己写个脚本来调用 ffmpeg 就好了。下面将一步步实现该脚本。

首先,需要下载 ffmpegGow。Gow 提供了常用的 Unix 命令的 Windows 版本,会让事情变得简单些。

然后,遍历当前文件夹下的所有视频文件,逐一进行格式转换。

@echo off

setlocal enabledelayedexpansion

set convert=path_to_ffmpeg_exe
set probe=path_to_ffprobe_exe
rem 转换后的文件保存在 output 目录中。
set output=output

rem 转换后的文件后缀。
set flag=out
rem 转换后的文件长边限制为 1280。如果是横屏视频,则宽度不超过 1280;如果是竖屏视频,则高度不超过 1280;保持原视频的宽高比。
set long_edge=1280
set vf_landscape=-vf "scale=!long_edge!:-2"
set vf_portrait=-vf "scale=-2:!long_edge!"

rem 处理扩展名为 mp4 和 mkv 的视频。
set ext_list=mp4 mkv

for %%a in (%ext_list%) do (
    set ext=%%a
    for %%i in (*.!ext!) do (
        echo %%i | findstr /i /c:"%flag%" > nul
        if !errorlevel! neq 0 (
            set src=%%i
            set dst=!src:~0,-4!.%flag%.mp4

            rem 探测视频的宽度和高度,决定是否需要缩放。
            rem 探测占位
            rem 转换编码格式。
            rem 转码占位
        )
    )
)

接下来,通过 ffprobe.exe 来探测视频的宽度和高度,决定是否需要缩放。将下面的脚本拷贝到“探测占位”即可。

rem 探测视频的宽度和高度,决定是否需要缩放。
set width=0
set height=0
set temp=temp.txt

%probe% -v quiet -show_entries stream=width,height -of default=noprint_wrappers=1 !src! > !temp!

sed -i "s/=/:/g" !temp!
rm -rf sed*

for /f "tokens=1,2 delims=:" %%p in ('cat !temp!') do (
    if "%%p" == "width" (
        set width=%%q
    ) else if "%%p" == "height" (
        set height=%%q
    )
)

rm -rf !temp!

紧接着,通过 ffmpeg.exe 来转换编码格式。将下面的脚本拷贝到“转码占位”即可。

rem 转换编码格式。
set vt=

if !width! gtr !height! (
    if !width! gtr !long_edge! (
        rem 横屏视频,并且宽度大于指定值,需要缩放。
        set vf=%vf_landscape%
    )
) else (
    if !height! gtr !long_edge! (
        rem 竖屏视频,并且高度大于指定值,需要缩放。
        set vf=%vf_landscape%
    )
)

rem 指定画面使用 h264 编码,码率为 crf 22
rem 指定声音使用 aac 编码,码率为 128,采样率为 48000
%convert% -y -i !src! -map 0:v:0 -c:v h264 -preset medium -crf 22 !vf! -map 0:a:0 -c:a aac -b:a 128K -ar 48000 -ac 2 -sn -threads 16 !dst!
choice /t 1 /d y /n > nul

最后是收尾工作,将转换后的文件,拷贝到 output 目录中。

if not exist %output% (
    mkdir %output%
)

for %%i in (*.%flag%.mp4) do (
    set src=%%i
    set dst=!src!
    mv !src! %output%\!dst!
)

大功告成,赶紧用起来吧。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,258评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,335评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,225评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,126评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,140评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,098评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,018评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,857评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,298评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,518评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,678评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,400评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,993评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,638评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,801评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,661评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,558评论 2 352

推荐阅读更多精彩内容