Skip to content

Instantly share code, notes, and snippets.

@AndreiCherniaev
Created July 24, 2025 04:45
Show Gist options
  • Save AndreiCherniaev/c44067569f3b32529ccb0522633a91a5 to your computer and use it in GitHub Desktop.
Save AndreiCherniaev/c44067569f3b32529ccb0522633a91a5 to your computer and use it in GitHub Desktop.
How to keep media?

with rotation

Use -vf "transpose=2" 0 = 90° counterclockwise and vertical flip (default) 1 = 90° clockwise 2 = 90° counterclockwise 3 = 90° clockwise and vertical flip

find * -type f -name '*.MOV' -exec bash -c 'ffmpeg -y -i "$0" -c:v libaom-av1 -crf 30 -b:v 500k -vf "transpose=2" -map_metadata 0:s:0 -metadata language="ru" -metadata title="${0/.MOV}" -metadata creation_time="2015-06-26T00:00:00.000000Z" "${0/MOV/webm}"' {} \;

no rotation

fdfind -tf --one-file-system --maxdepth 1 -e mp4 -x ffmpeg -hide_banner -y -i {} -c:v libaom-av1 -crf 30 -b:v 500k -b:a 128k -map_metadata 0:s:0 -metadata language="ru" -metadata title={.} {.}.webm

NVIDIA, no rotation

fdfind -tf --one-file-system --maxdepth 1 -e mp4 -x ffmpeg -hide_banner -y -i {} -c:v hevc_nvenc -b:v 1000k -c:a copy -map_metadata 0:s:0 -metadata language="ru" -metadata title={.} {.}.mp4
fdfind -tf --one-file-system --maxdepth 1 -e MOV -x ffmpeg -hide_banner -y -i {} -c:v hevc_nvenc -b:v 1000k -b:a 128k -map_metadata 0:s:0 -metadata language="ru" -metadata title={.} {.}.mp4

Change meta only

For single file

Tip1: copies all global metadata -map_metadata 0

ffmpeg -y -i '/home/a/mystorage/terinyLoveMusic/dropbox/ballroom dance/convertMe2/metaChange/Бал-презентация '\''Надежда, Вера, Любовь 2017'\''.webm'  -c:v copy -c:a copy -map_metadata 0 -metadata language="ru" -metadata title="${0/.mp4}" -metadata creation_time="2017-04-08T12:58:01.000000Z" '/home/a/mystorage/terinyLoveMusic/dropbox/ballroom dance/convertMe2/metaChange/Бал-презентация '\''Надежда, Вера, Любовь 2017'\''2.webm'

Make the same datetime for all files in current folder

Direct way will not works because of "FFmpeg cannot edit existing files in-place."

find * -type f -name '*.webm' -exec bash -c 'ffmpeg -y -i "$0" -c:v copy -c:a copy -map_metadata 0:s:0 -metadata language="ru" -metadata title="${0/.webm}" -metadata creation_time="2017-04-08T12:58:01.000000Z" "${0/mp4/webm}"' {} \;
fdfind -tf --one-file-system --maxdepth 1 -e webm -x ffmpeg -y -i {} -c:v copy -c:a copy -map_metadata 0:s:0 -metadata language="ru" -metadata title={.} -metadata creation_time="2014-12-19T19:19:00.000000Z" {.}_.webm

Pic

Add EXIF's ImageDescription based on current folder's name

exiftool -overwrite_original -ImageDescription="$(basename "$PWD")" "$PWD/"
fdfind -e '.jpg' -e '.jpeg' -e '.JPG' -e '.png' -tf --one-file-system --maxdepth 1 -x exiftool -overwrite_original -ImageDescription="$(basename "$PWD")" {}

jpg to webp

fdfind -e '.jpg' -e '.jpeg' -e '.JPG' -e '.png' -tf --one-file-system --maxdepth 1 -x convert -auto-orient -quality 90 {} {.}.webp

jpg resize to 4K, to webp

fdfind -e '.jpg' -e '.jpeg' -e '.JPG' -e '.png' -tf --one-file-system --maxdepth 1 -x convert -auto-orient -quality 80 -resize 8294400@\> {} {.}.webp

Trash jpg

fdfind -e '.jpg' -e '.jpeg' -e '.JPG' -e '.png' -tf --one-file-system --maxdepth 1 -x gio trash {}

Audio

telegramdesktop/tdesktop#29481 Get orig audio from video

not works
export e="mp4" && find * -maxdepth 0 -type f -name "*.$e" -exec bash -c 'ffmpeg -y -i "$0" -vn -acodec copy -map_metadata 0:s:0 -metadata language="ru" -metadata title="играет Дима Львов" -metadata creation_time="2019-09-28T00:00:00.000000Z" "${0/$e/acc}"' {} \;
fdfind -tf --one-file-system --maxdepth 1 -e mp4 -x ffmpeg -y -i {} -map 0:a -acodec copy {.}.m4a

Get audio from video

cd FolderWithCover.webp
fdfind -tf --one-file-system --maxdepth 1 -e MOV -x ffmpeg -hide_banner -y -i 'cover.webp' -i {} -map 1:a -c:v libtheora -q:v 10 -map 0:v -metadata title="Геннадий Айги в Чайковском" -metadata language="ru" -metadata artist="Григорий Битнев, Юра Бабединов, Паша Куприянов" {.}.ogg
fdfind -tf --one-file-system --maxdepth 1 -e MOV -x ffmpeg -hide_banner -y -i 'cover.webp' -i {} -map 1:a -c:v libtheora -q:v 10 -map 0:v -metadata title={.} -metadata language="ru" -metadata artist="Григорий Битнев, Паша Куприянов" {.}.ogg
fdfind -tf --one-file-system --maxdepth 1 -e mp4 -x ffmpeg -hide_banner -y -i 'cover.webp' -i {} -metadata title="декабрьский Бродский" -metadata language="ru" -metadata artist="Григорий Битнев, Юра Бабединов" -map 1:a -c:v libtheora -q:v 10 -map 0:v {.}.ogg
fdfind -tf --one-file-system --maxdepth 1 -e mp4 -x ffmpeg -hide_banner -y -i 'cover.webp' -i {} -metadata title="Лит музей https://vkvideo.ru/video-130272997_456239037" -metadata language="ru" -metadata artist="Сергей Севастьянов - кахон и перкуссия, Денис Попов - клавишные, Юрий Бабединов - гитара, Григорий Битнев - слово" -map 1:a -c:v libtheora -q:v 10 -map 0:v {.}.ogg

Without cover

fdfind -tf --one-file-system --maxdepth 1 -e MOV -x ffmpeg -hide_banner -y -i {} -map 1:a -vn -metadata title={.} -metadata language="ru" -metadata artist="Григорий Битнев, Юра Бабединов" {.}.ogg

stereo to mono

Thanks https://trac.ffmpeg.org/wiki/AudioChannelManipulation For audio in file

fdfind -tf --one-file-system --maxdepth 1 -e mp4 -x ffmpeg -hide_banner -y -i {} -map 0:a -filter_complex '[0:a]channelsplit=channel_layout=stereo:channels=FR[right]' -map '[right]' -vn -metadata title={.} -metadata language="ru" -metadata artist="Григорий Битнев" {.}.ogg

For mp4 in file

fdfind -tf --one-file-system --maxdepth 1 -e mp4 -x ffmpeg -hide_banner -y -i {} -c:v hevc_nvenc -b:v 900k -b:a 128k -af 'channelmap=map=FR|FR' -map_metadata 0:s:0 -metadata language="ru" -metadata title={.} {.}_.mp4

Replace newlines with literal \n

sed -E ':a;N;$!ba;s/\r{0,1}\n/\\n/g' file.txt

mp3

fdfind -tf --one-file-system --maxdepth 1 -e MOV -x ffmpeg -hide_banner -y -i {} -ss 24 -t 27 -map 0:a -b:a 128k -af 'channelmap=map=FR|FR' -map_metadata 0:s:0 -metadata language="ru" -metadata title={.} -metadata artist="Андрей Тернити" {.}.mp3
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment