一、ffmpeg将视频转为640*360
思路:编程将视频名称变成只有英文和集数,在编程写入转换的指令到文本文件,接着写一个bat脚本,使得可以在cmd命令行批量执行ffmpeg指令。
1、视频名称预处理(必须无空格,可以有中文)
不能有空格的原因:ffmpeg命令是以空格来划分参数的,如果文件名称有空格就会把文件名称给分开,会读取错误的参数,导致无法执行
ffmpeg转换的指令:
ffmpeg -i name.mp4 -vf "scale=640:360" -c:v libx264 -preset medium -crf 23 -c:a aac -b:a 128k name1.mp4
需要把name.mp4换成待转换的文件,name1.mp4换成转换后的名称
python正则表达式改名、和把所有的指令输入到文本(省人力)
import os
import re
path = 'D:\BaiduNetdiskDownload\中英双字幕版第1季52集'
for i in os.listdir(path):
if '.mp4' not in i:
continue
data = re.findall('CE0(\d+).*?', i) # 这里要看原文件的名称特点,提取出集数
new_name = 'peiqi' + data[0] + '.mp4'
with open('order.txt', 'a', encoding='utf-8') as f:
order = 'ffmpeg -i {} -vf "scale=640:360" -c:v libx264 -preset medium -crf 23 -c:a aac -b:a 128k output\\{}'.format(i, new_name)
f.write(order)
f.close()
print(order)
效果图预览:
2、编写bat脚本,并命名为test.bat
第一行的chcp 65001
使得可以在命令行中输入含有中文的指令
chcp 65001
@echo off
setlocal enabledelayedexpansion
REM 检查参数是否提供
if "%~1" == "" (
echo 请提供要执行的文本文件名。
pause
exit /b
)
REM 逐行读取文本文件并执行每行内容
for /f "tokens=*" %%A in (%1) do (
echo 执行命令: %%A
%%A
)
pause
3、输入cmd打开命令行
输入以下命令,即可批量运行ffmpeg指令。
test.bat order.txt
结语:主要是11年前的学习机只支持该格式的视频规格,且好似部分网页视频只支持avi格式,但是这次的却又不用转avi,到时再摸索下。
二、ffmpeg指令将视频转为avi格式
以下是bat脚本,将其放在带转换的视频文件夹下,双击即可完成转换
chcp 65001
@echo off
setlocal enabledelayedexpansion
rem 创建一个新的文件夹用于存放转换后的AVI文件
set "output_folder=output_avi"
if not exist "!output_folder!" mkdir "!output_folder!"
rem 循环处理当前目录下的所有MP4文件
for %%I in (*.mp4) do (
rem 构造输出文件的路径和名称,将扩展名改为avi
set "output_file=!output_folder!\%%~nI.avi"
rem 使用FFmpeg进行无损转换
ffmpeg -i "%%I" -c:v copy -c:a pcm_s16le "!output_file!"
)
endlocal