一个视频文件整理脚本
ffmpeg吧
全部回复
仅看楼主
level 1
zx_Sunrise 楼主
目的:检查指定目录下的所有视频文件,找到有广告软字幕和广告图片的文件,删除文件中的广告软字幕和广告图片
我自己花了点时间写一个windows 下的powershell 脚本用于达到上述目的。
脚本如下:
$backup_orginal_file = 1
$remove_subtitles = 1
$remove_images = 1
$files = get-childitem | where extension -in '.mkv', '.mp4'
foreach ($file in $files) {
$name = $file.name
$f = ffprobe -loglevel quiet -select_streams s -show_entries stream=index,codec_type -of json "$name" | ConvertFrom-Json
$txt_count = $f.streams.length
if ($txt_count -gt 0) {
echo "$($name)有$($txt_count)条字幕"
}
$disp = ffprobe -loglevel quiet -select_streams v -show_entries disposition=attached_pic,timed_thumbnails,still_image -of json "$name" | ConvertFrom-Json
$img_count = 0
foreach ($stream in $disp.streams) {
if ($stream.disposition.attached_pic -eq 1 -or $stream.disposition.timed_thumbnails -eq 1 -or $stream.disposition.still_image -eq 1) {
$img_count++
}
}
if ($img_count -gt 0) {
echo "$($name)有$($img_count)张图片"
}
if ($txt_count -eq 0 -and $img_count -eq 0) {
continue
}
if ($remove_subtitles -eq 0 -and $remove_images -eq 0) {
continue
}
$from_name = "[backup] $($name)"
rename-item -LiteralPath $name -NewName $from_name
if ($remove_subtitles -eq 1 -and $remove_images -eq 1) {
ffmpeg -loglevel quiet -i "$from_name" -map 0:V -map 0:a -c copy "$name"
echo "$($name)已去除字幕和图片"
} elseif ($remove_subtitles -eq 0 -and $remove_images -eq 1) {
ffmpeg -loglevel quiet -i "$from_name" -map 0:V -map 0:a -map 0:s -c copy "$name"
echo "$($name)已去除图片"
} elseif ($remove_subtitles -eq 1 -and $remove_images -eq 0) {
ffmpeg -loglevel quiet -i "$from_name" -map 0:v -map 0:a -c copy "$name"
echo "$($name)已去除字幕"
}
if ($backup_orginal_file -eq 0) {
reomove-item -LiteralPath "$from_name"
}
}
2024年12月11日 11点12分 1
level 1
zx_Sunrise 楼主
用法:打开视频文件目录,按住Shift键,点击鼠标右键,在弹出的快捷菜单中,选择【在此处打开PowerShell窗口】,出现PowerShell 命令行窗口中,将脚本粘贴进去执行就行了。
关键思路:
判断是否有字幕:通过检查是否有字幕流获取,-select_streams s
判断是否有图片:检查每个流中的disposition中attached_pic,timed_thumbnails,still_image 三个字段值是否为1,为1则认为是有图片
前3行为配置值:
# 是否备份原始文件,1=是,0=否
$backup_orginal_file = 1
# 是否删除字幕,1=是,0=否
$remove_subtitles = 1
# 是否删除图片,1=是,0=否
$remove_images = 1
后面2项为0时,只显示是否有字幕和图片,不作删除操作
使用删除字幕时要当心,只有确认视频有硬字幕,软字幕为广告时才设置为1
免责声明
此脚本仅用于学习,作者不对用户的误操作造成的损失承担任何责任。
2024年12月11日 12点12分 2
level 7
道友下的资源都好奇怪,封装了专辑封面和软字幕就是广告。找几个正规网站下?
卡在一个问题上很久了,在想办法自动去除动漫、剧集中的片头曲、片尾曲、广告、中段等高度重复性的视频段。难点是自动识别切割时间点。B站资源还可以参考缓存中跳过片头片尾时间码,可以提高识别效率,其他没参考的识别不准确,还得手工校对生成切割时间。
2024年12月11日 14点12分 3
一些高码率的国漫视频,有可能会有发布小组的二维码,或只包括一个发布地址的软字幕。这些情况是真实存在的。如PanWEB组发布的国漫视频就包括二维码图片。
2024年12月12日 02点12分
level 5
请问各位大佬 如何用批处理命令
去掉片头片尾
2024年12月13日 07点12分 4
片头时间固定好弄,ffmpeg切掉就行了。不固定就弄不了了,需要图像识别,可能比较慢
2025年02月19日 09点02分
level 1
脚本基本没有通用型。只能给和你使用相同视频网站的道友分享。
2025年02月19日 09点02分 5
level 1
压入视频的字幕和logo才是常态……如果只是外挂字幕和logo,我直接都是原视频完全去除多余视频流和字幕,然后字幕网站下载字幕重新封装,特殊版本没有适合的字幕,甚至可以请出AI自动翻译生成字幕文件,然后再封装进去,现在AI自动翻译生成字幕牛得不行,字幕网站的听译怕是要失业了……
2025年02月20日 18点02分 6
1