合并Bash脚本:处理HD Homerun for PLEX的TS文件转MP4并提取字幕
没问题,我帮你把这两个Bash脚本合并成一个功能完整的版本,完美覆盖你提到的所有需求——扫描所有子文件夹的TS文件、转成MP4容器(还能顺便压缩到720p)、提取隐藏字幕为SRT,最后清理原TS文件。先直接上可运行的脚本,再给你拆解每个部分的作用:
#!/bin/bash # 遍历当前目录及所有子文件夹中的.ts文件 find . -type f -name "*.ts" | while read -r ts_file; do # 获取文件的目录、文件名(不带扩展名) file_dir=$(dirname -- "$ts_file") file_name=$(basename -- "$ts_file") base_name="${file_name%.*}" # 1. 将TS文件转码并封装为MP4(压缩至720p) echo "Processing video: $ts_file" ffmpeg -i "$ts_file" \ -c:v libx264 -crf 23 -preset medium -s 1280x720 \ -c:a aac -b:a 128k \ "${file_dir}/${base_name}.mp4" -y # 检查转码是否成功,成功则继续后续操作 if [ $? -eq 0 ]; then # 2. 提取隐藏字幕为SRT格式(如果存在) echo "Extracting subtitles for: $ts_file" ffmpeg -i "$ts_file" -map 0:s:0 -c:s srt "${file_dir}/${base_name}.srt" -y 2>/dev/null # 3. 删除原TS文件 echo "Deleting original TS file: $ts_file" rm "$ts_file" else echo "Error processing $ts_file - skipping deletion" fi done echo "All tasks completed!"
脚本功能拆解
- 遍历文件:用
find . -type f -name "*.ts"扫描当前目录及所有子文件夹下的TS文件,while read -r处理带空格的文件名,避免出错。 - 转码封装MP4:
-c:v libx264:用H.264编码压缩视频,保证兼容性和压缩率-crf 23:视频质量参数(数值越小质量越高,18-28是常用范围)-preset medium:速度与压缩率的平衡(可选fast/veryspeed加快转码,或slower获得更好压缩)-s 1280x720:强制输出720p分辨率-c:a aac -b:a 128k:用AAC编码音频,128kbps是兼顾质量和体积的常用码率
- 提取字幕:
-map 0:s:0指定提取第一个字幕轨道,转成SRT格式;2>/dev/null用来屏蔽“无字幕”的报错信息,避免干扰输出。 - 安全删除:只有当MP4转码成功(
$? -eq 0)时,才删除原TS文件,避免转码失败丢失源文件。
注意事项
- 先确保你的系统安装了
ffmpeg:- Debian/Ubuntu:
sudo apt update && sudo apt install ffmpeg - macOS:
brew install ffmpeg - Windows:可以通过Chocolatey或者官网下载安装包
- Debian/Ubuntu:
- 测试建议:第一次运行前,先把
rm "$ts_file"这行注释掉,确认转码和字幕提取都正常后,再开启删除功能。 - 如果不需要压缩编码(只是快速换容器),可以把转码行改成:
这样速度会快很多,但不会改变分辨率和编码格式。ffmpeg -i "$ts_file" -c:v copy -c:a copy "${file_dir}/${base_name}.mp4" -y
内容的提问来源于stack exchange,提问作者NixonShaun
相关产品推荐
相关产品推荐

