Я загрузил видео с разрешением 1080p с YouTube, используя YouTube. Видео файл (.f137.mp4) и аудио файлы (f140.m4a) были загружены. Они ffmpeg объединили видеофайл и аудиофайл в файл mp4 (.mp4). Я хочу сохранить файл .f140.m4a и файл .mp4, а удалить файл f137.mp4. Как я могу это сделать?
Я попробовал опцию --exec в youtube-dl, но она не удалась.
Это были мои команды:
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