» 您尚未登录:请 登录 | 注册 | 标签 | 帮助 | 小黑屋 |


发新话题
打印

[数码手机] 写了两个脚本处理LG电视自带播放器的音频和字幕,分享一下

弄来弄去还是觉得电视自带播放器方便画质又好。
但是cx之后不支持dts音轨,一大堆旧的电影和美剧是dts或者dts-hd的。
字幕只支持srt不说,外置字幕和内置字幕识别谁不识别谁简直是玄学。
以前一直用n1盒子刷coreelec看,也能挺不错,不过家里又多了台电视所以要再买个盒子。
本来打算买z9x来着,后来觉得功能和画质跟n1也没啥区别。弄不好小厂的东西还不如开源的好使。
港真,n1能用lg的遥控器直接遥控,挺方便的
最后,还是写个脚本省钱了。
画质吊打各种盒子。音频嘛,反正我是当显示器用的,直接光纤输出到我的漫步者s1000。没啥区别。


TOP

音频处理主要是用ffmpeg,神器,什么都能转换,音频视频字幕。
apt install ffmpeg
复制内容到剪贴板
代码:
#/bin/bash

function dealwithonefile()
{
    filename=$1   
    if echo "${filename##*.}" | grep -iqw "mkv"
    then   
        
        tmpfilename=$filename".tmp.mkv"
        echo dealing with $filename $tmpfilename
        echo ffmpeg -i $filename  -y -vcodec copy -sn -acodec ac3 -b:a 640k $tmpfilename
        ffmpeg -i $filename  -y -vcodec copy -sn -acodec ac3 -b:a 640k $tmpfilename
        if [ $? == 0 ]; then   
        sleep 1m
        rm $filename
        mv $tmpfilename $filename
        return 0
        else
        echo ffmpeg err
        sleep 1m
        return -1
        fi
    else
        echo $filename is not mkv
    fi

}

function dealwithDirs()
{
    if [ -f $1 ]; then
        dealwithonefile $1
        return $?
    fi
    for file in `ls $1`
    do
        if [ -d $1"/"$file ] ; then
            echo $1"/"$file is dir
            dealwithDirs $1"/"$file
        else
            dealwithonefile $1"/"$file
            #return $?
        fi
    done

}

if test -z $1
then
pat=`pwd`
dealwithDirs $pat

else
echo "$1 is not empty."
  dealwithDirs $1
fi



TOP

字幕主要是用subfinder
先要有python3
然后pip3 install subfinder就行了
还用到了ffmpeg 从ass转srt
改了下,增加了类似”简体&中英“这种字幕的识别。去除了字幕里的字体信息

#/bin/bash

function dealwithsuffix()
{
    filename=$1
    suffix=$2
    resultFileName=${filename%.*}"."$suffix
    echo working on $filename $suffix ,finding $resultFileName
    array=(".zh_en."$suffix ".zh."$suffix ".简体."$suffix ".简体&中英."$suffix ".zh-chs."$suffix ".zh-cht."$suffix ".繁体."$suffix ".繁体&中英."$suffix)
    for(( i=0;i<${#array[@]};i++))
    do
        echo ${array}
        if [ ! -f "$resultFileName" ]; then
            if [ -f "${filename%.*}${array}" ]; then
                echo mv ''${filename%.*}''${array}'' $resultFileName
                mv ''${filename%.*}''${array}'' $resultFileName
            fi
        else
            return 0
        fi        
    done;

    return -1
}

function dealwithonefile()
{
    filename=$1   
    if echo "${filename##*.}" | grep -iqw "mkv"
    then         
        srtfilename=${filename%.*}".srt"
        array2=("ass" "ssa" "smi")  
        
        if [ ! -f "$srtfilename" ]; then         
            dealwithsuffix $filename "srt"
        fi      

        if [ ! -f "$srtfilename" ]; then         
            for(( i=0;i<${#array2[@]};i++))            
            do
                if [ ! -f "$srtfilename" ]; then         
                    resultFileName=${filename%.*}""${array2}
                    dealwithsuffix $filename ${array2}
                    ffmpeg -i $resultFileName $srtfilename
                fi
            done
        fi

        if [ -f "$srtfilename" ]; then         
            sed -i 's/<[^><]*>//g' $srtfilename
        else
            echo $srtfilename is not found!!!!!!!
        fi
    else
        echo $filename is not mkv
    fi

}

function dealwithDirs()
{
    if [ -f $1 ]; then
        dealwithonefile $1
        return $?
    fi
    for file in `ls $1`
    do
        if [ -d $1"/"$file ] ; then
            echo $1"/"$file is dir
            dealwithDirs $1"/"$file
        else
            dealwithonefile $1"/"$file
            #return $?
        fi
    done

}

param=""
if test -z $1
then
echo "input is empty."
param=`pwd`
echo pp $param  
else
  echo "$1 is not empty."
  param=$1
fi


echo param is $param
echo subfinder $param   --ignore --no-order-marker
subfinder $param  --ignore --no-order-marker
dealwithDirs $param

[ 本帖最后由 MrNobody 于 2021-11-12 12:20 编辑 ]


TOP

虽然是码农,
其实一直摸鱼很少写代码,
shell脚本更少接触了。
逻辑挺简单的,就是遍历一下挨个处理一遍。

[ 本帖最后由 MrNobody 于 2021-11-11 21:58 编辑 ]

TOP

lg自带播放器的字幕识别很玄学。
我实验了下。比较靠谱的就是 把内置字幕全删掉,外置字幕和视频名字完全相同的srt。
否则都有不识别的可能。
应该再加个正则表达式处理字母中的字体信息。得空再加。

加上这句
sed -i 's/<[^><]*>//g' $srtfilename
就可以把字幕里的字体信息都删掉了。要不lg播放器不认这个。

[ 本帖最后由 MrNobody 于 2021-11-12 09:39 编辑 ]

TOP

引用:
原帖由 zohu 于 2021-11-11 22:01 发表
CX当显示器用了,potplayer+madvr要比自带的差很多吗?
感觉是不是有一点太折腾了。尤其是对于PT下载,在NAS里放着的文件如果要保种的话,还得搞一下硬链接。
差不太多吧。
港真我还真没对比过我连pc只是一开始试过视频。
不过电视启动快些算是个优点。

TOP

引用:
原帖由 夏多南纳特 于 2021-11-12 10:20 发表
posted by wap, platform: Samsung
楼主牛逼,小白问下,该如何运行?
就是建个shell文件把内容拷贝进去。
比如你建个 fixSubtitle.sh
然后把3楼的脚本拷贝进去,保存。
然后chmod +x fixSubtitle.sh
然后 ./fixSubtitle.sh 你的电视剧目录
或者进到你的电视剧目录去不加参数运行fixSubtitle.sh也行

TOP

posted by wap, platform: Android
引用:
原帖由 @fenny  于 2021-11-13 09:31 发表
经常内置字幕都出不来,能选择,但是没有任何字幕
同一个视频有时有有时没有,这个bug有解吗
所以用ffmpeg处理一下把内置字幕弄到外面或者干脆删掉就行了。一条命令的事挺简单的。我感觉最靠谱就是无内置字幕,外置字幕是完全同名的srt。

TOP

posted by wap, platform: Android
引用:
原帖由 @fenny  于 2021-11-13 09:31 发表
经常内置字幕都出不来,能选择,但是没有任何字幕
同一个视频有时有有时没有,这个bug有解吗
顺便,这个播放器内部好像有个奇怪的cache,刚刚修改了文件或者字幕不会立刻生效。要等个几分钟。
不过也许是我的dlna服务的锅。不好说。

TOP

音频转ac3转truehd,字幕转别的格式都是改个参数的事情,也不怎么耗时间。
ffmpeg相当强大。

TOP

发新话题
     
官方公众号及微博