gpt4 book ai didi

shell - 合并视频和音频后如何删除下载的视频文件?

转载 作者:行者123 更新时间:2023-12-04 23:24:04 25 4
gpt4 key购买 nike

我使用 youtube-dl 从 youtube 下载了 1080p 视频。下载了视频文件 (.f137.mp4) 和音频文件 (f140.m4a)。他们 ffmpeg 将视频文件和音频文件合并为 mp4 文件(.mp4)。我想保留 .f140.m4a 文件和 .mp4 文件,同时删除 f137.mp4 文件。我能怎么做?

我在 youtube-dl 中尝试了 --exec 选项,但它失败了。

这些是我的命令:

root@OMV:~/youtube-dl# cat dl-test.sh
DL_DIR="/srv/dev-disk-by-id-ata-QEMU_HARDDISK_QM00007"
ALBUM="Test"
mkdir -p "$DL_DIR/$ALBUM"
youtube-dl --batch-file /root/youtube-dl/url-test.list --download-archive /root/youtube-dl/archive-test.list \
-f 'bestvideo[ext=mp4]+bestaudio[ext=m4a]/bestvideo+bestaudio' \
--write-sub --embed-sub --all-subs \
--embed-thumbnail --add-metadata \
-o "$DL_DIR/$ALBUM/%(title)s.%(ext)s" \
--exec "rm "$(ls {} | cut -d . -f1)""

结果是:
root@OMV:~/youtube-dl# ./dl-test.sh
ls: cannot access '{}': No such file or directory
...
[ffmpeg] Merging formats into "/srv/dev-disk-by-id-ata-QEMU_HARDDISK_QM00007/Test/UpTown Spot.mp4"
...
[atomicparsley] Adding thumbnail to "/srv/dev-disk-by-id-ata-QEMU_HARDDISK_QM00007/Test/UpTown Spot.mp4"
[exec] Executing command: rm '/srv/dev-disk-by-id-ata-QEMU_HARDDISK_QM00007/Test/UpTown Spot.mp4'

.mp4 文件被删除,.f137.mp4 文件仍然存在。我得到了相反的结果。
root@OMV:~/youtube-dl# ls '/srv/dev-disk-by-id-ata-QEMU_HARDDISK_QM00007/Test'
UpTown Spot.f137.mp4 UpTown Spot.f140.m4a

更新 1:
我改为
--exec "rm "$(ls {} -1 | sed -n '/\.f[0-9]*\.mp4$/p')""

它仍然删除 .mp4 文件。输出是:
root@OMV:~/youtube-dl# echo "" > "/root/youtube-dl/archive-test.list"
root@OMV:~/youtube-dl# ./dl-test.sh
ls: cannot access '{}': No such file or directory
...
[download] /srv/dev-disk-by-id-ata-QEMU_HARDDISK_QM00007/Test/UpTown Spot.mp4 has already been downloaded and merged
...
[exec] Executing command: rm '/srv/dev-disk-by-id-ata-QEMU_HARDDISK_QM00007/Test/UpTown Spot.mp4'

然后改成:
--exec "rm "$(ls -1 | sed -n '/\.f[0-9]*\.mp4$/p')""

输出几乎相同:
root@OMV:~/youtube-dl# ./dl-test.sh
...
[exec] Executing command: rm '/srv/dev-disk-by-id-ata-QEMU_HARDDISK_QM00007/Test/UpTown Spot.mp4'

我在 SHELL 中测试了正常的表达式,它起作用了:
root@OMV:~/youtube-dl# cd /srv/dev-disk-by-id-ata-QEMU_HARDDISK_QM00007/Test
root@OMV:/srv/dev-disk-by-id-ata-QEMU_HARDDISK_QM00007/Test# ls "$(ls /srv/dev-disk-by-id-ata-QEMU_HARDDISK_QM00007/Test | sed -n '/\.f[0-9]*\.mp4$/p')"
UpTown Spot.f137.mp4
root@OMV:/srv/dev-disk-by-id-ata-QEMU_HARDDISK_QM00007/Test# rm "$(ls /srv/dev-disk-by-id-ata-QEMU_HARDDISK_QM00007/Test | sed -n '/\.f[0-9]*\.mp4$/p')"

但是在 youtube-dl --exec 选项中运行的类似命令失败了!

更新 2:
管道后的 cmd 似乎不会被执行。
root@OMV:~/youtube-dl# ./dl-test.sh
+ DL_DIR=/srv/dev-disk-by-id-ata-QEMU_HARDDISK_QM00007
+ ALBUM=Test
+ mkdir -p /srv/dev-disk-by-id-ata-QEMU_HARDDISK_QM00007/Test
+ youtube-dl --batch-file /root/youtube-dl/url-test.list --download-archive /root/youtube-dl/archive-test.list -f 'bestvideo[ext=mp4]+bestaudio[ext=m4a]/bestvideo+bestaudio' --write-sub --embed-sub --all-subs --embed-thumbnail --add-metadata -o '/srv/dev-disk-by-id-ata-QEMU_HARDDISK_QM00007/Test/%(title)s.%(ext)s' --exec 'ls | grep mp4'
...
[exec] Executing command: ls | grep mp4 '/srv/dev-disk-by-id-ata-QEMU_HARDDISK_QM00007/Test/UpTown Spot.mp4'
Binary file /srv/dev-disk-by-id-ata-QEMU_HARDDISK_QM00007/Test/UpTown Spot.mp4 matches
ls: write error: Broken pipe

最佳答案

尝试这个:

改变

$(ls {} | cut -d . -f1)


$(ls -1 {} | sed -n '/\.f[0-9]*\.mp4$/p')

解释
ls -1      # print every file in one line

sed -n # suppress automatic output
'/\. # pattern start with .
f # followed by f
[0-9]* # some numbers
\.mp4$ # and .mp4
/p' # print line

关于shell - 合并视频和音频后如何删除下载的视频文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56054100/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com