我的问题是,我有 2 个字幕轨道,一个叫做“英文标志和歌曲”,另一个叫做“英文全集”。我还有英文和日文音轨(双音频)。
我需要将视频缩小到 PSP 分辨率,为此我使用了 Handbrake。对于我的字幕选择行为,我将其设置为首先匹配所选语言;英语;烧录行为=第一轨。
但是即使使用它,它也会选择标志和歌曲作为刻录字幕。但是标志和歌曲是空白字幕。由于它是自动选择的,因此很难更改我正在转换的 200 多个视频中的每一个的字幕。
那么有没有办法自动选择英文全字幕或者完全删除标志和歌曲字幕?
我知道我可以在手刹上单独完成此操作,但这会耗费太多时间。
编辑:我想扩展我的问题 - 我真正想要的是完全删除“英语标志和歌曲”字幕而不重新编码整个视频。我只想删除字幕轨道。
答案1
您可以将 ffmpeg 与批处理或 powershell 脚本结合使用来自动实现您的目标。
请看一下可以与 ffmpeg 一起使用的命令: https://newbedev.com/how-to-remove-one-track-from-video-file-using-ffmpeg
以下是一个例子:
https://www.youtube.com/watch?v=jZWxWkl7yq0
批量删除第 1 轨字幕(无需重新编码):
@echo off
IF /i exist "%~1" (set "Folder=%~1") else (exit)
pushd "%Folder%"
For /f "Delims=" %%a in ('dir /b /a-d *.mkv *.mp4 *.avi *.mpg') do ffmpeg -i "%%a" -map 0 -map -0:s:0 -c:v copy -c:a copy -c:s copy "%%~na_NEW%%~xa"
批量删除字幕轨 1 并将分辨率更改为 PSP (480x272)(需要重新编码):
@echo off
IF /i exist "%~1" (set "Folder=%~1") else (exit)
pushd "%Folder%"
For /f "Delims=" %%a in ('dir /b /a-d *.mkv *.mp4 *.avi *.mpg') do ffmpeg -i "%%a" -vf "scale=480:-1" -map 0 -map -0:s:0 -c:v libx265 -c:a copy -c:s copy "%%~na_NEW%%~xa"
考虑以下视频:
视频
声音的:
有声日语 [索引 0]
音频英语 [索引 1]
字幕:
英语 [索引 0]
意大利语 [索引 1]
西班牙语(西班牙)[索引 2]
西班牙语(拉丁语)[索引 3]
巴西葡萄牙语 [索引 4]
俄罗斯 [索引 5]
阿拉伯语 [索引 6]
英文全文 [索引 7]
英文歌曲 [索引 8]
- 删除除日语之外的所有音频以及除英语之外的所有字幕(完整版):
删除英语音频(索引 1):-map -0:a:1
删除所有字幕:-map -0:s
添加英文全字幕(索引 7):-map 0:s:7
@echo off
IF /i exist "%~1" (set "Folder=%~1") else (exit)
pushd "%Folder%"
For /f "Delims=" %%a in ('dir /b /a-d *.mkv *.mp4 *.avi *.mpg') do ffmpeg -i "%%a" -map 0 -map -0:a:1 -map -0:s -map 0:s:7 -c:v copy -c:a copy -c:s copy "%%~na_NEW%%~xa"
- 删除日语音频和英文完整字幕:
删除日语音频(索引 0):-map -0:a:0
删除英文完整字幕(索引 7):-map -o:s:7
@echo off
IF /i exist "%~1" (set "Folder=%~1") else (exit)
pushd "%Folder%"
For /f "Delims=" %%a in ('dir /b /a-d *.mkv *.mp4 *.avi *.mpg') do ffmpeg -i "%%a" -map 0 -map -0:a:0 -map -0:s:7 -c:v copy -c:a copy -c:s copy "%%~na_NEW%%~xa"