[problem help] 求助,能帮忙把这个脚本改成deepin v23可以使用的
Tofloor
poster avatar
qq4945286
deepin
2023-09-28 05:13
Author

[Desktop Entry]
Name=ConVideo
Name[zh_CN]=视频格式转换
Type=Service
ServiceTypes=KonqPopupMenu/Plugin
MimeType=video/*
Actions=VIDEOtoMOV;MOVtoMP4
X-KDE-Submenu=ConvertVideo
X-KDE-Submenu[zh_CN]=视频格式转换
Icon=video

[Desktop Action VIDEOtoMOV]
Name=VIDEOtoMOV
Name[zh_CN]=视频转MOV
Icon=video
Exec=file=%f; ffmpeg -i %f -vcodec mjpeg -q:v 2 -acodec pcm_s16be -q:a 0 -f mov "${file%.*}.mov"


[Desktop Action MOVtoMP4]
Name=MOVtoMP4
Name[zh_CN]=MOV转MP4
Icon=video
Exec=file=%f; ffmpeg -i %f -y "${file%.*}.mp4"


#this script is for manjaro kde and davinci reslove user
#down this script and move it to ~/.local/share/kservices5/ServiceMenus
#Exec=ffmpeg -i %u -vcodec mjpeg -q:v 2 -acodec pcm_s16be -q:a 0 -f mov %u.mov
#Exec=ffmpeg -i %u -y "%u"-test.mp4

作者用的是manjaro kde 它是放在~/.local/share/kservices5/ServiceMenus

deepin v23要把脚本放到这个下面/usr/share/deepin/dde-file-manager/oem-menuextensions

也就是在鼠标右键直接加入这么一个菜单

001.png

在deepin v23下,直接把脚本放进去没办法使用

Reply Favorite View the author
All Replies
.(柯南)
deepin
2023-09-28 06:50
#1

ffmpeg装了吗?

Exec后面说的哪个几个包装了吗?

Reply View the author
2023开始学习
deepin
2023-09-28 06:55
#2

以前搞过。

我感觉应该把那两行Exec换成下面注释的。下面注释的才是deepin的格式。

你试一下

Reply View the author
Barry-okx
Junior Packager
2023-09-28 07:18
#3

要价500 定金100。 搞不定定金全退。

Reply View the author
qq4945286
deepin
2023-09-28 07:19
#4
.(柯南)

ffmpeg装了吗?

Exec后面说的哪个几个包装了吗?

装了

Reply View the author
qq4945286
deepin
2023-09-28 07:28
#5
2023开始学习

以前搞过。

我感觉应该把那两行Exec换成下面注释的。下面注释的才是deepin的格式。

你试一下

还是 不行

Reply View the author
神末shenmo
deepin
Spark-App
2023-09-28 14:04
#6

exec后面内容写到sh里

Reply View the author
qq4945286
deepin
2023-09-28 15:52
#7
神末shenmo

exec后面内容写到sh里

好的,谢谢!

Reply View the author
hotime
deepin
2023-09-28 23:07
#8

dde-file-manager似乎不能很好地处理/usr/share/deepin/dde-file-manager/oem-menuextensions/中添加的右键菜单的Exec项

上述Exec中的多条命令在放入bash -c "" 中时无法执行,例如:

Exec=bash -c "file=%f; ffmpeg -i %f -vcodec mjpeg -q:v 2 -acodec pcm_s16be -q:a 0 -f mov \"\${file%.*}.mov\""
Exec=bash -c "file=%f; ffmpeg -i %f -y \"\${file%.*}.mp4\""

我的想法是再单独做个脚本吧,这里Exec直接调用脚本,传入参数。

1、创建右键菜单桌面入口文件

sudo vim /usr/share/deepin/dde-file-manager/oem-menuextensions/convertvideos.desktop

[Desktop Entry]
Version=1.0
Type=Application
Actions=ConvertToMOV;ConvertToMP4
Name=ConvertVideos
Name[zh_CN]=视频格式转换
Icon=video
MimeType=video/*
X-DDE-FileManager-SupportSchemes=file

[Desktop Action ConvertToMOV]
Name=ConvertToMOV
Name[zh_CN]=转换为MOV
Icon=video
Exec=convert-videos %F mov

[Desktop Action ConvertToMP4]
Name=ConvertToMP4
Name[zh_CN]=转换为MP4
Icon=video
Exec=convert-videos %F mp4

2、创建脚本:

sudo vim /usr/local/bin/convert-videos

#!/bin/bash

# 检查参数数量
if [ "$#" -lt 2 ]; then
    echo "传入参数不正确,要求:file1 file2 ... format"
    echo "例如:test1.mp4 test2.mp4 mov"
    echo "意为:将test1.mp4、test2.mp4转换为mov格式"
    exit 1
fi

# 获取输入文件名和字符串参数
paramiters=("$@")
input_files=("${paramiters[@]:0:${#paramiters[@]}-1}")
format=${paramiters[${#paramiters[@]}-1]}

# 检查文件是否存在
for input_file in "${input_files[@]}"; do
    if [ ! -f "$input_file" ]; then
        echo "错误:传入文件 $input_file 不存在"
        exit 1
    fi
done

# 检查文件后缀是否为ffmpeg支持的视频格式
# TODO

# 检查参数format是否在ffmpeg支持的格式中
# TODO

# 创建默认转换方法
command_convert_video() {
	ffmpeg -i "$input_file" -vcodec h264 "${output_file}" 2>/dev/null
}

if [[ $format == mov ]]; then
	command_convert_video() {
		ffmpeg -i "$input_file" -vcodec mjpeg -q:v 2 -acodec pcm_s16be -q:a 0 -f mov "${output_file}"
	}
fi

if [[ $format == mp4 ]]; then
	command_convert_video() {
		ffmpeg -i "$input_file" -y "${output_file}"
	}
fi

for input_file in "${input_files[@]}"; do
    # 生成输出文件名
    output_file="${input_file%.*}.${format}"
    # 检查输出文件是否已经存在。如果是,则修改输出文件名,避免覆盖已存在的文件。
    i=0
    while [[ -f "$output_file" ]]; do
        i=$((i+1))
        output_file="${input_file%.*}-${i}.${format}"
    done
    # 使用ffmpeg进行转换
    command_convert_video &> /dev/null
    if [ $? -eq 0 ]; then
        echo "视频 $input_file 成功转换为 $format 格式"
    else
        echo "错误:视频 $input_file 格式转换失败"
        exit 1
    fi
done

3、为脚本赋予执行权限:
sudo chmod +x /usr/local/bin/convert-videos

4、重新图形界面
sudo systemctl restart lightdm

Reply View the author
qq4945286
deepin
2023-09-29 00:06
#9
hotime

dde-file-manager似乎不能很好地处理/usr/share/deepin/dde-file-manager/oem-menuextensions/中添加的右键菜单的Exec项

上述Exec中的多条命令在放入bash -c "" 中时无法执行,例如:

Exec=bash -c "file=%f; ffmpeg -i %f -vcodec mjpeg -q:v 2 -acodec pcm_s16be -q:a 0 -f mov \"\${file%.*}.mov\""
Exec=bash -c "file=%f; ffmpeg -i %f -y \"\${file%.*}.mp4\""

我的想法是再单独做个脚本吧,这里Exec直接调用脚本,传入参数。

1、创建右键菜单桌面入口文件

sudo vim /usr/share/deepin/dde-file-manager/oem-menuextensions/convertvideos.desktop

[Desktop Entry]
Version=1.0
Type=Application
Actions=ConvertToMOV;ConvertToMP4
Name=ConvertVideos
Name[zh_CN]=视频格式转换
Icon=video
MimeType=video/*
X-DDE-FileManager-SupportSchemes=file

[Desktop Action ConvertToMOV]
Name=ConvertToMOV
Name[zh_CN]=转换为MOV
Icon=video
Exec=convert-videos %F mov

[Desktop Action ConvertToMP4]
Name=ConvertToMP4
Name[zh_CN]=转换为MP4
Icon=video
Exec=convert-videos %F mp4

2、创建脚本:

sudo vim /usr/local/bin/convert-videos

#!/bin/bash

# 检查参数数量
if [ "$#" -lt 2 ]; then
    echo "传入参数不正确,要求:file1 file2 ... format"
    echo "例如:test1.mp4 test2.mp4 mov"
    echo "意为:将test1.mp4、test2.mp4转换为mov格式"
    exit 1
fi

# 获取输入文件名和字符串参数
paramiters=("$@")
input_files=("${paramiters[@]:0:${#paramiters[@]}-1}")
format=${paramiters[${#paramiters[@]}-1]}

# 检查文件是否存在
for input_file in "${input_files[@]}"; do
    if [ ! -f "$input_file" ]; then
        echo "错误:传入文件 $input_file 不存在"
        exit 1
    fi
done

# 检查文件后缀是否为ffmpeg支持的视频格式
# TODO

# 检查参数format是否在ffmpeg支持的格式中
# TODO

# 创建默认转换方法
command_convert_video() {
	ffmpeg -i "$input_file" -vcodec h264 "${output_file}" 2>/dev/null
}

if [[ $format == mov ]]; then
	command_convert_video() {
		ffmpeg -i "$input_file" -vcodec mjpeg -q:v 2 -acodec pcm_s16be -q:a 0 -f mov "${output_file}"
	}
fi

if [[ $format == mp4 ]]; then
	command_convert_video() {
		ffmpeg -i "$input_file" -y "${output_file}"
	}
fi

for input_file in "${input_files[@]}"; do
    # 生成输出文件名
    output_file="${input_file%.*}.${format}"
    # 检查输出文件是否已经存在。如果是,则修改输出文件名,避免覆盖已存在的文件。
    i=0
    while [[ -f "$output_file" ]]; do
        i=$((i+1))
        output_file="${input_file%.*}-${i}.${format}"
    done
    # 使用ffmpeg进行转换
    command_convert_video &> /dev/null
    if [ $? -eq 0 ]; then
        echo "视频 $input_file 成功转换为 $format 格式"
    else
        echo "错误:视频 $input_file 格式转换失败"
        exit 1
    fi
done

3、为脚本赋予执行权限:
sudo chmod +x /usr/local/bin/convert-videos

4、重新图形界面
sudo systemctl restart lightdm

好的,非常感谢!

Reply View the author