如何通过命令行或批处理脚本与ffmpeg转换整个目录/文件夹?
当前回答
如果你想在子文件夹中进行相同的转换。 这里是递归代码。
for /R "folder_path" %%f in (*.mov,*.mxf,*.mkv,*.webm) do (
ffmpeg.exe -i "%%~f" "%%~f.mp4"
)
其他回答
对于Linux和macOS,这可以在一行中完成,使用参数展开来更改输出文件的扩展名:
for i in *.avi; do ffmpeg -i "$i" "${i%.*}.mp4"; done
这是我用来批量转换avi到1280x mp4
FOR /F "tokens=*" %%G IN ('dir /b *.avi') DO "D:\Downloads\ffmpeg.exe" -hide_banner -i "%%G" -threads 8 -acodec mp3 -b:a 128k -ac 2 -strict -2 -c:v libx264 -crf 23 -filter:v "scale=1280:-2,unsharp=5:5:1.0:5:5:0.0" -sws_flags lanczos -b:v 1024k -profile:v main -preset medium -tune film -async 1 -vsync 1 "%%~nG.mp4"
作为一个cmd文件,运行它,循环找到该文件夹中的所有avi文件。
调用MY(更改为您的)ffmpeg,传递输入名称,设置为缩放锐化。我可能不需要CRF和“-b:v 1024k”…
输出文件是减去扩展名的输入文件,mp4作为新的ext。
对于任何想要用ffmpeg批量转换任何东西,但想要有一个方便的Windows界面的人,我开发了这个前端:
https://sourceforge.net/projects/ffmpeg-batch
它为ffmpeg添加了一个窗口时尚界面,进度条和时间剩余信息,这些功能是我在使用ffmpeg时经常错过的。
我在linux中使用这一行程序将文件(通常是H265)转换为我可以在Kodi上毫无问题地播放的东西:
for f in *.mkv; do ffmpeg -i "$f" -c:v libx264 -crf 28 -c:a aac -b:a 128k output.mkv; mv -f output.mkv "$f"; done
这将转换为临时文件,然后替换原始文件,以便转换后名称保持不变。
Bash对我来说很糟糕,所以在Linux/Mac下,我更喜欢Ruby脚本:
(找到一个文件夹中的所有文件,然后将其从rmvb/rm格式转换为mp4格式)
# filename: run.rb
Dir['*'].each{ |rm_file|
next if rm_file.split('.').last == 'rb'
command = "ffmpeg -i '#{rm_file}' -c:v h264 -c:a aac '#{rm_file.split('.')[0]}.mp4'"
puts "== command: #{command}"
`#{command}`
}
你可以用:ruby run.rb运行它
推荐文章
- ffmpeg输出的含义(tbc, tbn, tbr)
- 最快的方法提取帧使用ffmpeg?
- 哪个HTTP状态代码表示“尚未准备好,稍后再试”?
- Android上的FFmpeg
- 实时http流到HTML5视频客户端的最佳方法
- 如何添加一个新的音频(不混合)到一个视频使用ffmpeg?
- ffmpeg、libav和avconv之间有什么不同和相似之处?
- Ffmpeg覆盖输出文件,如果存在
- 如何安装和运行phpize
- 使用ffmpeg将音频文件转换为mp3
- FFMPEG (libx264)高度不能被2整除
- 操作系统检测生成文件
- 如何创建一个视频从图像与FFmpeg?
- 如何用ffmpeg转换整个目录?
- 使用FFmpeg旋转视频