ffmprovisr: Kumpulan resep untuk mempermudah membuat perintah FFmpeg
(amiaopensource.github.io)- ffmprovisr adalah situs bantu pembuatan perintah yang memungkinkan pengguna yang kesulitan menulis perintah FFmpeg memilih tugas lalu melihat contoh perintah dan penjelasan tiap flag
- Resep-resepnya berfokus pada
ffmpeg,ffplay, danffprobe, dengan menguraikan elemen seperti file input, codec, filter, stream mapping, dan container output - Cakupan yang dibahas luas, mulai dari re-wrap/transcoding hingga memotong·menggabungkan, subtitle·watermark, thumbnail·GIF, file uji, serta metadata·checksum·laporan QCTools
- Tidak ada pencarian bawaan, tetapi disarankan membuka semua resep lalu mencari kata kunci yang dibutuhkan dengan pencarian browser
- Selain FFmpeg, situs ini juga membahas alat seperti ripping CDDA, ImageMagick, dan
flac, sehingga bisa dipakai sebagai kumpulan perintah praktis untuk workflow preservasi digital
Apa yang disediakan ffmprovisr
- ffmprovisr menyediakan contoh perintah dan penjelasan opsi per tugas, sehingga mengurangi beban harus merangkai sendiri perintah FFmpeg
- Pengguna dapat menekan tombol tugas untuk berpindah ke satu perintah atau daftar perintah terkait, lalu memeriksa contoh perintah dan fungsi tiap flag
- Halaman ini sendiri tidak memiliki fitur pencarian, dan menyarankan untuk membuka semua resep lalu memakai
ctrl+fataucmd+funtuk pencarian di browser - Sebagai referensi dasar, situs ini menautkan situs resmi FFmpeg official website, installation instructions dari Reto Kromer, Command Line Crash Course, dan explainshell.com
- Lisensinya adalah Creative Commons Attribution 4.0 International License
Cara dasar membaca perintah FFmpeg
- Setelah terpasang, FFmpeg dipanggil dari command prompt dengan mengetik
ffmpeg - Perintah biasanya terdiri dari pasangan flag dan nilai
- Pada
-i input_file.ext,-iadalah flag untuk menentukan file input, daninput_file.extadalah file target - Pada
-c:v prores,-c:vmenentukan encoding stream video, danproresadalah codec yang akan digunakan
- Pada
- Nama file output diletakkan di akhir perintah, dan ditentukan lewat nama file tanpa flag output terpisah
ffmpegmenyimpan video, sedangkanffplaydapat memutar video yang dihasilkan tanpa menyimpannya- Contoh menyimpan SMPTE bars adalah
ffmpeg -f lavfi -i smptebars=size=640x480 -t 5 output_file - Contoh memutar SMPTE bars adalah
ffplay -f lavfi smptebars=size=640x480 - Contoh FFmpeg memerlukan
-i, durasi perekaman-t 5, dan file output, tetapi contoh FFplay tidak memerlukan-i
- Contoh menyimpan SMPTE bars adalah
Checkpoint untuk mengurangi kesalahan
- Pastikan file output bisa dibuka, diputar, serta terlihat dan terdengar sesuai yang diinginkan
- Ekstensi output harus cocok dengan codec yang dimaksud, dan beberapa ekstensi di FFmpeg mengarah ke nilai bawaan codec tertentu
- Misalnya,
.mp4bisa secara default disetel ke encoding H.264
- Misalnya,
"Error: No such file or directory"bisa terjadi karena direktori yang salah, salah ketik, spasi yang hilang, atau flag yang menempel secara keliru- Untuk berpindah ke folder Downloads di macOS, gunakan
cd $HOME/Downloads - Jika perintah hasil copy-paste terlihat benar tetapi tetap error, disarankan menulis ulang langsung di command line
- Untuk berpindah ke folder Downloads di macOS, gunakan
"Could not find tag for codec"dapat muncul saat mencoba me-rewrap file yang memiliki codec audio·video yang tidak kompatibel dengan ekstensi output- Anda bisa terlebih dahulu melakukan transcoding ke codec yang sesuai, atau menghapus
-c copyjika yakin ekstensi akan melakukan encoding otomatis ke codec yang benar
- Anda bisa terlebih dahulu melakukan transcoding ke codec yang sesuai, atau menghapus
"Killed"bisa muncul ketika ukuran file melebihi kapasitas memori server- Pada server jarak jauh, ini bisa diatasi dengan menambah kapasitas memori
- Pada server lokal, sebaiknya gunakan FFmpeg versi terbaru dan jangan menjalankannya bersamaan dengan program lain yang banyak memakai memori
- Jika saat memakai filter muncul
"Error splitting argument list: option not found", periksa penggunaan tanda kutip dan format filtergraph - Filter memerlukan re-encoding stream, sehingga bisa menimbulkan masalah jika dipakai bersama
-c copyyang menyalin stream file secara langsung
Filtergraph, stream mapping, dan codec bawaan
- Saat menjalankan pekerjaan batch FFmpeg di dalam loop, Anda bisa menambahkan
-nostdinsebelum input untuk menimpa perilaku default interaksi standard input- Contoh:
ffmpeg -nostdin -i input_file ...
- Contoh:
- FFmpeg secara otomatis menetapkan nilai bawaan codec dan parameter codec berdasarkan format file output
.avi: audiomp3, videompeg4.mkv: audioac3, video H.264.mov: audio AAC, video H.264.mp4: audio AAC, video H.264.mpg: audiomp2, videompeg1video.mxf: audiopcm_s16le, videompeg2video.wav: audiopcm_s16le
- Filtergraph adalah gabungan nama filter dan opsi yang diletakkan setelah
-vfatau-af-vfadalah alias dari-filter:v- Contoh filter video adalah
hflip, dan contoh filter audio adalahamerge - Beberapa filter dihubungkan dengan koma, dan beberapa rantai filter dipisahkan dengan titik koma
-vf "fieldmatch,yadif,decimate"adalah satu rantai filter yang dipakai untuk pemrosesan inverse telecine- Jika ada lebih dari satu input atau output, Anda harus memakai
-filter_complexalih-alih-vf - Gunakan tanda kutip lurus, dan hindari tanda kutip melengkung
- Stream mapping menentukan stream video, audio, subtitle, data, dan lampiran mana dari file input yang akan disertakan dalam output
- FFmpeg mengenali tipe stream
a,v,s,d,t -map 0:vmemilih semua stream video dari file input pertama-map 0:3memilih stream keempat dari file input pertama-map 0:a:2memilih stream audio ketiga dari file input pertama- Jika mapping tidak ditentukan, nilai bawaan untuk file video adalah hanya membawa 1 video dan 1 audio ke output
- Untuk memetakan semua stream, gunakan
-map 0 - Menambahkan
?seperti pada-map 0:a?memungkinkan pemrosesan batch tetap berjalan tanpa error untuk file yang tidak memiliki audio
- FFmpeg mengenali tipe stream
Perubahan kontainer dan transcoding
- Rewrap file dilakukan dengan
ffmpeg -i input_file.ext -c copy -map 0 output_file.ext- Video, audio, dan data subtitle di dalamnya tidak diubah, hanya dipindahkan ke format kontainer lain
- Rewrap juga disebut remuxing atau re-multiplexing
-map 0harus digunakan agar semua stream seperti beberapa trek audio tetap dipertahankan- Beberapa kontainer hanya dapat memuat encoding stream tertentu, sehingga rewrap tanpa re-encoding mungkin tidak bisa dilakukan
- Pembuatan Broadcast WAV menggunakan
-write_bext 1dan-metadata field_name='Content'untuk menulis chunk BEXT dan metadata terkait- Field yang sering digunakan adalah
description,originator,originator_reference,origination_date,origination_time,coding_history,IARL - Field metadata BWF memiliki batas jumlah karakter, dan
OriginatorReferencemaksimal 32 karakter
- Field yang sering digunakan adalah
- Saat me-rewrap video codec DV ke file
.dv, gunakan-f rawvideo -c:v copyuntuk menghindari metadata asal di dalam stream DV terhapus tanpa sengaja - Contoh transcoding Apple ProRes LT adalah
-c:v prores -profile:v 1 -vf yadif -c:a pcm_s16le- Profil ProRes 422 dibagi menjadi
0Proxy,1LT,2Standard,3HQ - Kontainer ProRes yang didukung FFmpeg adalah QuickTime
.mov, Matroska.mkv, MXF.mxf
- Profil ProRes 422 dibagi menjadi
- Contoh transcoding H.264 adalah
-c:v libx264 -pix_fmt yuv420p -c:a aac- Nilai default
libx264adalah presetmediumdan CRF 23 -pix_fmt yuv420pmenetapkan chroma subsampling 4:2:0 untuk kompatibilitas dengan QuickTime dan sebagian besar pemutar non-FFmpeg- Untuk optimasi streaming, tambahkan
-movflags +faststart - Contoh kualitas lebih tinggi adalah
-preset veryslow -crf 18, dan CRF 18 sering dianggap “secara visual lossless”
- Nilai default
- Encoding H.264/H.265 berbasis GPU Nvidia menggunakan
h264_nvencatauhevc_nvenc- Hardware fixed-function Nvidia bisa 10 kali lebih cepat daripada encoding CPU, tetapi optimasi kualitas pada bitrate rendah memerlukan lebih banyak parameter
- HEVC dijelaskan sebagai codec yang lebih efisien dan didukung pada GPU kira-kira sejak 2015
- Transcoding H.265/HEVC menggunakan
-c:v libx265 -pix_fmt yuv420p -c:a copy- Nilai default
libx265adalah presetmediumdan CRF 28 - CRF 28 pada H.265 setara dengan CRF 23 pada H.264, dan ukuran file bisa menjadi sekitar setengahnya
- Nilai default
- Contoh lossless untuk preservasi adalah perintah yang menaruh FFV1 Version 3 ke dalam kontainer Matroska sambil membuat
framemd5input-map 0memetakan semua stream-dnmengecualikan stream data yang tidak diizinkan oleh Matroska-slicecrc 1menambahkan informasi CRC agar decoder dapat mendeteksi slice yang rusak-f framemd5 -anmenghasilkan checksum MD5 per frame video
Mengubah properti video dan audio
- Resep mengubah rasio tampilan menggunakan filter padding
- Untuk mengubah 4:3 menjadi 16:9, terapkan pillarbox
- Untuk mengubah 16:9 menjadi 4:3, terapkan letterbox
- Untuk video tanpa audio,
-andapat digunakan sebagai ganti-c:a copy
- Contoh konversi SD ke HD menggunakan tiga filter:
colormatrix=bt601:bt709,scale=1440:1080:flags=lanczos,pad=1920:1080:240:0- Mengubah koefisien luma dari Rec. 601 ke Rec. 709
- Scaling Lanczos lebih lambat daripada bilinear bawaan, tetapi memberi hasil yang lebih baik
- Sumber interlaced disarankan untuk di-deinterlace dengan
yadifsebelum scaling
- Display aspect ratio dapat diubah pada level kontainer dengan opsi seperti
-aspect 4:3- Jika digunakan bersama
-c:v copy, ini memengaruhi rasio aspek yang disimpan di kontainer, bukan rasio aspek di dalam frame yang telah di-encode
- Jika digunakan bersama
- Konversi color space menggunakan filter
colormatrix=src:dst- Nilai yang diizinkan mencakup
bt601,smpte170m,bt470bg,bt709,bt2020 - Penyematan metadata color space menggunakan
-color_primaries,-color_trc,-colorspace - Perlu hati-hati karena file Rec.601 yang sebenarnya juga bisa diberi tag Rec.709
- Tag metadata ditulis oleh
libx264ataulibx265, jadi tidak bisa ditambahkan tanpa re-encoding
- Nilai yang diizinkan mencakup
- Perubahan kecepatan menggunakan
setptsdanatemposecara bersamaan- Contohnya adalah membuat salinan pendekatan PAL yang mengubah 24fps menjadi 25fps sambil mempertahankan pitch audio
- Efek fade menggunakan filter
fadedanafade, dan karena penggunaan filter, video serta audio harus di-encode ulang - Ekstraksi audio menggunakan
-c:a copy -vnuntuk mengambil stream audio tanpa kehilangan dan tanpa video - Menggabungkan dua trek audio menggunakan
amergedan-filter_complex- Ini bisa berguna untuk proses lanjutan yang mengharapkan satu trek audio, seperti caption otomatis YouTube
- Untuk memastikan trek yang diinginkan, disarankan menjalankan
ffprobesebelum menulis skrip
- Analisis dan normalisasi volume menggunakan filter
loudnorm- Output JSON dapat digunakan sebagai nilai input untuk normalisasi 2-pass
- Nilai default dijelaskan selaras dengan target loudness yang direkomendasikan PBS
- 1-pass lebih cepat, tetapi kurang akurat dibanding 2-pass
- Juga disertakan resep untuk CD pre-emphasis, RIAA equalization, audio resampling, dan memaksa interpretasi WAV 192kHz sebagai 96kHz
Memotong, menggabungkan, dan segmentasi
- Saat menggabungkan file dengan spesifikasi teknis yang sama, gunakan concat demuxer
ffmpeg -f concat -i mylist.txt -c copy output_file- File yang akan digabung harus memiliki codec dan spesifikasi teknis yang sama, dan file hasil harus selalu dipratinjau
- Untuk menggunakan path absolut, tambahkan
-safe 0
- Saat menggabungkan file dengan format atau codec berbeda, gunakan filter
concatdan-filter_complex- File input dapat berbeda dalam kontainer, codec, chroma subsampling, frame rate, dan sebagainya
- Contoh dasarnya hanya akan bekerja dengan benar jika resolusinya sama
- Jika frame rate berbeda, output bisa menjadi variable frame rate
- Jika resolusi berbeda, sesuaikan dulu dengan
scalesebelum concat, dan saat menggabungkan SD dengan HD, SD dapat diproses dengan pillarbox
- Pemecahan file ditangani dengan segment muxer
-segment_time 60membuat segmen dengan durasi maksimum 60 detik%03dmembuat nama file angka dengan padding nol 3 digit
- Trimming tanpa re-encoding menggunakan
-ss,-to,-t,-c copy,-map 0- Codec interframe seperti H.264 bisa mulai dari titik terdekat berdasarkan i-frame
-sseof -5adalah metode menyalin mulai 5 detik sebelum akhir file
- Menghapus keheningan di awal file audio menggunakan
silenceremove=start_threshold=-57dB:start_duration=1:start_periods=1-57dBdisajikan sebagai tingkat yang cocok untuk mempertimbangkan hiss analog- Karena menggunakan filter, audio akan di-encode ulang
- Menghapus keheningan di akhir file audio diproses dengan urutan
areverse,silenceremove,areverse- Karena
silenceremovelebih cocok untuk menghapus keheningan di awal, audio dibalik lalu dikembalikan lagi
- Karena
Pemrosesan video interlaced
- Saat membuat access file HD H.264 dari sumber SD NTSC, gunakan
yadif,scale,pad, danformat=yuv420pbersama-samayadifadalah filter deinterlacescale=1440:1080:flags=lanczosmenyesuaikan gambar menjadi 1440x1080pad=1920:1080:(ow-iw)/2:(oh-ih)/2menambahkan padding agar input 4:3 sesuai dengan frame output 16:9
- Contoh deinterlace umum adalah
-vf "yadif,format=yuv420p"format=yuv420pmenentukan subsampling kroma 4:2:0 demi kompatibilitas pemutaran H.264- Selain
yadif, FFmpeg juga memiliki deinterlacerbwdif,w3fdif,kerndeint, dannnedi
- Untuk deinterlace yang memisahkan field menjadi frame, gunakan
idet,bwdif,format=yuv420p- Ini disukai untuk mempertahankan cadence visual sumber pada video interlaced dengan banyak gerakan
idetmendeteksi urutan fieldbwdifsecara default menghasilkan satu frame untuk setiap field
- Inverse telecine menggunakan
fieldmatch,yadif,decimate- Ini membalik 3:2 pulldown untuk memulihkan video interlaced 29.97fps ke frame rate 24fps dari sumber film aslinya
- Jika diterapkan pada file 29.97i, frame rate output sebenarnya menjadi 23.976fps
- Untuk mengubah urutan field, gunakan
setfield=tffatausetfield=bff- Karena menggunakan filter video,
-c copytidak bisa dipakai dan perlu re-encoding
- Karena menggunakan filter video,
- Untuk memeriksa pola interlaced, analisis tanpa file output dengan
ffmpeg -i input_file -filter:v idet -f null -
Watermark, subtitle, thumbnail, GIF
- Watermark teks dibuat dengan filter
drawtext- Tentukan opsi
fontfile,fontsize,text,fontcolor,alpha,x, dany x=(w-text_w)/2:y=(h-text_h)/2menempatkannya di tengah tanpa bergantung pada ukuran video
- Tentukan opsi
- Watermark gambar bisa ditempatkan di kanan atas dengan
overlay=main_w-overlay_w-5:5 - Burn-in timecode menggunakan opsi
timecode,box,boxcolor, danratedaridrawtext- Timecode awal berformat
hh:mm:ss[:;.]ff
- Timecode awal berformat
- Untuk menyematkan file subtitle, gunakan
-i subtitles_file -c copy -c:s mov_textmov_textbekerja pada kontainer MP4 dan MOV- Format yang didukung kontainer MKV adalah
ASS,SRT, danSSA
- Satu thumbnail dapat diekstrak dengan
-ss 00:00:20 -vframes 1 thumb.png - Untuk membuat thumbnail setiap 1 menit, gunakan
-vf fps=1/60 out%d.png - Saat membuat GIF dari image sequence, gunakan
image2,-framerate,-pattern_type glob, danscale - GIF berkualitas tinggi dibuat dalam dua tahap
- Perintah pertama membuat palet kustom dengan
palettegen - Perintah kedua menerapkan palet dengan
paletteuse - Cara yang lebih sederhana adalah memakai
-vf "fps=10,scale=500:-1", tetapi dithering akan lebih terlihat dan ukuran file lebih kecil
- Perintah pertama membuat palet kustom dengan
Image sequence, scope, OCR
- Untuk membuat image sequence menjadi video 10-bit tak terkompresi, gunakan
-f image2 -framerate 24 -i input_file_%06d.ext -c:v v210- Frame rate default demuxer
image2adalah 25fps %06dmembaca nama file bernomor enam digit secara berurutan naik
- Frame rate default demuxer
- Untuk menggabungkan file gambar dan audio menjadi video, gunakan
-loop 1,-shortest, dan-vf scale=1280:720- Ini bisa berguna saat ingin mengunggah file audio ke platform seperti YouTube
- Dengan
ffplay -f lavfidan filter, Anda bisa memvisualisasikan bit depth audio, grafik desibel, piksel di luar broadcast range, dan menampilkan vectorscope tblend=all_mode=difference128danhstackmenampilkan perbedaan temporal dua video input secara berdampinganxstackdigunakan untuk membuat jendela output yang menumpuk beberapa sumber video secara vertikal atau horizontal, dan berguna untuk tujuan yang sama seperti jendela output yang dipakai divrecord- Contoh OCR menggunakan filter
ocrdandrawtextuntuk menampilkan teks yang dikenali di atas video - Output data OCR ditampilkan ke layar dalam bentuk
ffprobe -show_entries frame_tags=lavfi.ocr.text -f lavfi -i "movie=input_file,ocr"
Metadata, checksum, pekerjaan preservasi
- Ekstraksi metadata teknis dilakukan dengan
ffprobe -i input_file -show_format -show_streams -show_data -print_format xml- Selain XML, format output bisa memakai JSON dan flat
- Untuk menghapus metadata, gunakan
-map_metadata -1 -c:v copy -c:a copy- Video dan audio disalin, tetapi metadata tidak disalin
- Pemrosesan batch Bash dilakukan dengan file
.shdan loopfor- Contoh:
for file in *.mxf; do ffmpeg -i "$file" -map 0 -c copy "${file%.mxf}.mov"; done - File
.shdan file.mxfyang akan diproses harus berada di direktori yang sama, dan perintah harus dijalankan dari direktori tersebut - Untuk pemrosesan rekursif, bisa gunakan
find input_directory -iname "*.mxf" -exec ffmpeg -i {} -map 0 -c copy {}.mov \;
- Contoh:
- Di Windows, pemrosesan batch dilakukan dengan skrip PowerShell
.ps1- Contohnya membuat daftar file
.mp4lalu me-remux masing-masing file dengan mengganti ekstensinya menjadi.mkv - Agar
ffmpegbisa dipanggil tanpa path lengkap, konfigurasinya harus benar
- Contohnya membuat daftar file
- Untuk memeriksa error decoder, lakukan decoding tanpa file output dengan
ffmpeg -i input_file -f null -dan tampilkan error ke layar - Pemeriksaan fixity FFV1 Version 3 menggunakan
-report -i input_file -f null -untuk memeriksa CRC checksum mismatch- Frame CRC aktif secara default di FFV1 Version 3
- Video MD5 per frame dibuat dengan
-f framemd5 -an - MD5 per kelompok sampel audio dibuat dengan
asetnsamples=n=48000 -f framemd5 -vn- Menyamakan jumlah kelompok sampel dengan sample rate media disebut sebagai praktik yang baik
- Secara default, audio ditranskode ke PCM 16-bit saat framemd5 dibuat
- Stream MD5 bisa dibuat dengan memetakan stream video dan audio masing-masing memakai
-mapdan-c copy -f md5- Ini digunakan untuk memverifikasi integritas informasi A/V secara terpisah dari perubahan metadata kontainer
streamhashmenghasilkan hash per stream untuk semua stream- Ini berguna untuk hashing mixed born-digital material karena tidak perlu tahu ada berapa stream
- Laporan QCTools membuat
.qctools.xml.gzmenggunakanffprobe -f lavfisertasignalstats,cropdetect,idet,psnr,ssim,ebur128,astats, dan lainnya- Perintah terpisah disediakan untuk file dengan audio dan tanpa audio
- Ekstraksi closed caption EIA-608 Line 21 menghasilkan nilai hex ke CSV dengan filter
readeia608danffprobe
File uji dan contoh FFmpeg lainnya
- Video uji dapat dibuat atau diputar dengan input lavfi seperti
mandelbrot,smptebars,testsrc, dansmptehdbars- Contoh Mandelbrot menghasilkan output H.264 1280x720, 25fps, 10 detik
- Contoh SMPTE bars menghasilkan output ProRes 720x576, 25fps, 10 detik
- Pemutaran HD SMPTE bars menggunakan
ffplay -f lavfi -i smptehdbars=size=1920x1080 - Pemutaran VGA SMPTE bars menggunakan
ffplay -f lavfi -i smptebars=size=640x480
- Audio uji gelombang sinus membuat file WAV dengan
sine=frequency=1000:sample_rate=48000:duration=5danpcm_s16le - Video uji yang menggabungkan SMPTE bars dan gelombang sinus 1kHz menggunakan dua input lavfi serta
-c:v ffv1,-c:a pcm_s16le - File uji rusak dengan sengaja merusak isi paket memakai
-bsf noise=1 -c copy, tetapi tidak merusak kontainernya - Conway's Game of Life disimulasikan dengan
ffplay -f lavfi life=..., dan denganffmpegserta-t 5, sebagian segmen dapat disimpan - Perbandingan kemiripan perseptual antara dua video menggunakan filter
signature=detectmode=full:nb_inputs=2 - Hash perseptual video input membuat file XML dengan
signature=format=xml:filename="output.xml" - Urutan gambar dapat langsung diputar tanpa membuat video terlebih dahulu dengan
ffplay -framerate 5 input_file_%06d.ext - Pemisahan trek audio dan video menggunakan
-map 0:v:0dan-map 0:a:0 - Penggabungan trek audio dan video memakai
-map 0:v -map 1:a -c copyuntuk menggabungkan video dari file pertama dengan audio dari file kedua - File MPEG untuk membuat ISO agar dapat diakses di DVD dibuat dengan
-aspect 4:3 -target ntsc-dvd output_file.mpg, dan memerlukan instalasidvdauthor - CSV untuk deteksi adegan berbasis YDIF mengeluarkan nilai
lavfi.signalstats.YDIFdariffprobedansignalstats - Head switching noise dapat ditutupi dengan menggambar kotak hitam di bagian bawah frame memakai
drawbox=w=iw:h=7:y=ih-h:t=max - Untuk live streaming ke target RTMP sambil sekaligus merekam MP4 lokal, gunakan muxer
tee- Input diskalakan ke lebar 1280px, lalu stream dihentikan setelah waktu yang ditentukan
- Contohnya menyertakan catatan bahwa ini digunakan setiap hari untuk live streaming acara TV sungguhan selama sekitar 4 tahun
- Informasi decoder, encoder, demuxer, muxer, dan filter tertentu dapat dilihat dengan
ffmpeg -h type=name- Contohnya adalah
encoder=libx264,decoder=mp3,muxer=matroska,demuxer=mov,filter=crop
- Contohnya adalah
Alat terkait yang diperkenalkan bersama FFmpeg
- Alat ripping CDDA membahas pengecekan offset drive CD dan ripping audio CD yang akurat
- Model drive CD yang berbeda memiliki posisi awal pembacaan yang berbeda, sehingga koreksi offset diperlukan untuk verifikasi checksum atas konten yang sama
- Identifikasi drive dapat dicek dengan
cdda2wav -scanbus,cdda2wav,cdparanoia -vsQ - Offset dapat dicari di Accurate Rip CD drive offset list
- Sebagai alat GUI macOS, diperkenalkan XLD
- Ripping CD Paranoia menggunakan
cdparanoia -L -B -O [Drive Offset] [Starting Track Number]-[Ending Track Number] output_file.wav-Badalah mode batch yang otomatis memisahkan tiap trek menjadi file terpisah
- Cdda2wav adalah alat untuk meripping audio CD secara akurat dengan menggunakan Paranoia library
- Perintah instalasi Homebrew adalah
brew install cdrtools - Perintah contoh melakukan ripping seluruh CD menjadi satu WAV, melakukan lookup CDDB, dan membuat cue sheet
- Di macOS, CD harus di-unmount sebelum menjalankan perintah
- Perintah instalasi Homebrew adalah
- CD emphasis dijelaskan sebagai metode pengurangan noise yang dapat memengaruhi beberapa CD awal 1980-an dan CD hasil pressing Jepang
- Pengecekan presence dilakukan dengan
cdda2wav -Jataucdparanoia -Q - Untuk mengoreksi saat ripping dengan Cdda2wav, tambahkan flag
-T
- Pengecekan presence dilakukan dengan
- ImageMagick adalah kumpulan perangkat lunak gratis dan open source untuk menampilkan, mengonversi, dan menyunting file gambar raster maupun vektor
- Perintah dipanggil sebagai perintah terpisah seperti
convert,montage,mogrify - Perbandingan gambar menggunakan
compare -metric ae image1.ext image2.ext null:untuk mengembalikan jumlah piksel yang berbeda - Pembuatan thumbnail menggunakan
mogrify -resize 80x80 -format jpg -quality 75 -path thumbs *.jpg - Grid gambar dibuat dengan
montage @list.txt -tile 6x12 -geometry +0+0 output_grid.jpg - Penghapusan EXIF menggunakan
mogrify -path ./stripped/ -strip *.jpg
- Perintah dipanggil sebagai perintah terpisah seperti
- Alat
flacadalah alat transcoding FLAC dan manipulasi metadata yang dibuat oleh proyek FLAC- Dibandingkan alat lain, keunggulannya adalah dapat menyematkan foreign metadata seperti BWF
- Untuk mengonversi WAV ke FLAC sambil mempertahankan metadata BWF, gunakan
flac --best --keep-foreign-metadata --preserve-modtime --verify input.wav - Untuk merekonstruksi BWF asli dari FLAC, gunakan
--decodesebagai pengganti--best
1 komentar
Komentar Hacker News
Sedikit keluar dari topik, tapi menurut saya ffmpeg adalah salah satu perangkat lunak terbaik yang pernah dibuat
Engineer berbakat seperti Fabrice Bellard adalah hadiah besar bagi komunitas FOSS, dan bahkan di unicorn bernilai sekitar 2 miliar dolar tempat saya dulu bekerja, sebagian besar produknya bergantung pada ffmpeg
https://ffmpeg.org/donations.html
Dia juga pembuat QEMU, TCC, QuickJS, dan lainnya
Serius, pada momen mana pun, jumlah perangkat yang menjalankan kode yang ia tulis benar-benar tidak masuk akal
Baris perintah ffmpeg tetap bikin frustrasi meski memakai panduan yang bagus, jadi saya ingin merekomendasikan VapourSynth
https://www.vapoursynth.com/
Ini alat pemfilteran video bergaya Python yang dioptimalkan, tapi juga jauh lebih dari itu: https://vsdb.top/
Dan StaxRip memanfaatkan ffmpeg, VapourSynth, serta puluhan encoder dan tool dengan sangat baik, sampai-sampai saya reboot dari Linux ke Windows hanya karena ini: https://github.com/staxrip/staxrip
Ini rumit tanpa perlu; dari sudut pandang tertentu mungkin seluruh strukturnya masuk akal, tapi untuk melakukan tugas yang sangat umum, harus mengetahui opsi seperti mantra sihir itu tidak tepat
Sepertinya ada puluhan alias bash yang meringkas perintah ffmpeg 150 karakter menjadi dua kata
ffprobe juga tidak masuk akal; 99% penggunaannya adalah menjalankannya tanpa argumen untuk cepat melihat durasi, resolusi, frame rate, dan jumlah track audio, tapi 99% output-nya justru hal yang sama sekali tidak relevan seperti opsi kompilasi
Materi lain yang layak dilihat:
https://ffmpeg.guide/ — membuat graph filter FFmpeg yang kompleks dengan cepat dan akurat
https://www.hadet.dev/ffmpeg-cheatsheet/ — memotong, menambahkan fade in/out, scaling, menggabungkan, dan sebagainya
Entah kenapa, ffmpeg berperilaku berbeda tergantung apakah flag
-ssdan-t/-todiletakkan sebelum atau sesudah-i, dan dalam kasus saya meletakkannya sebelum lebih berhasilSumber aslinya juga punya masalah yang sama
Aneh rasanya memaksa graph yang nonlinier masuk ke command-line yang datar dan linier
Bahkan konfigurasi JSON yang lebih terperinci saja akan jauh lebih baik
Sangat berguna
Saya mulai memakai ChatGPT saat membuat perintah ffmpeg, dan jauh lebih cepat serta mudah menemukan yang saya perlukan
Saya juga membuat tool kecil agar bisa langsung dipakai dari command-line: https://github.com/alexkrkn/help-cli
Saya juga membuat video terkait: https://www.youtube.com/watch?v=pOda6TDBqcY
Baru-baru ini saat mencari UI untuk ffmpeg, saya menemukan Shutter Encoder; ini software open source yang sangat bagus dan mendukung mac/windows
Akhirnya saya mulai mengompresi koleksi video pribadi 300GB selama 15 tahun
https://www.shutterencoder.com/
Semuanya sedang saya kompres ke H.265, dan ukuran video terkadang turun sampai 1/10. Apakah ada alasan untuk tidak melakukan ini? Saya memang membaca bahwa memutar video terkompresi membutuhkan daya pemrosesan lebih besar, tapi saya tidak yakin apakah itu akan jadi masalah besar ke depannya
Anggap saja ini peringatan untuk memverifikasi beberapa video sebelum menghapus sumber aslinya
Namun kalau hanya 300GB, penyimpanan sudah cukup murah, jadi simpan saja aslinya
Selain itu, untuk dipakai di Plex tanpa transcoding, opsi itu juga lebih mudah di homelab saya
Panduan ini merekomendasikan
yadifsebagai filter deinterlacing, tapi di mata saya w3fdif terlihat lebih baikIa tidak melakukan pelacakan gerakan seperti yadif, jadi cukup cepat, dan bisa menghindari artefak mengganggu yang kadang dibuat oleh pelacakan gerakan
Menurut saya hasil yang konsisten biasa-biasa saja lebih baik daripada hasil yang kadang luar biasa dan kadang buruk
Namun, berbeda dari yadif yang melihat dua field, w3fdif mempertimbangkan tiga field sekaligus sehingga lebih baik menyembunyikan artefak interlacing
Kalau memang akan re-encode, lebih baik sekalian pakai QTGMC
w3fdif bisa menimbulkan efek berkilau, sedangkan yadif tidak; jadi bwdif bekerja seperti yadif sambil menggunakan field matching w3fdif yang lebih baik
bwdifadalah hybrid dariyadifdanw3fdifHambatan terbesar untuk mengadopsi ffmpeg mungkin adalah tool freemium premium offline dan berbagai frontend web
Situs-situs mengoptimalkan pencarian untuk frasa yang sering dimasukkan orang ke Google, seperti “avi to mp4” atau “mp3 to wav”
Butuh waktu lebih lama dari yang diduga sampai bisa menerima aplikasi command line, karena dunia Windows telah mengajarkan bahwa segala sesuatu harus punya GUI
Orang bilang ffmpeg itu rumit, tetapi meski dibuat menjadi GUI yang keren pun tidak banyak menjadi lebih mudah. Yang rumit adalah kompresi video itu sendiri
Kecuali dengan cara mengambil keputusan untuk pengguna seperti antarmuka klik ala HandBrake, rasanya tidak ada software yang bisa membuatnya lebih mudah
Saya tidak yakin, tetapi setelah mempelajari encoding dan kompresi video digital dengan cukup rinci, sepertinya apa yang harus dilakukan di ffmpeg juga akan terasa cukup intuitif. Apakah ada yang benar-benar pernah melakukan ini?
Saat itu format seperti mkv atau codec seperti HEVC belum ada, tetapi konsep memanipulasi audio/video lewat berbagai filter itu bagus, dan sebagian besar software konversi A/V bekerja seperti itu
Begitu mulai melihat halaman manual FFmpeg, saya melihat keterkaitannya, dan setelah mengutak-atik sekitar sehari saya bisa memakainya
Mungkin karena saya menyukai command line dan biasa membaca halaman man, hal itu menjadi keuntungan
ffmpeg kuat sehingga sering saya pakai, tetapi struktur API-nya tidak masuk ke kepala saya. Akan bagus kalau ada frontend LLM
Ide yang bagus. Membuat FFmpeg melakukan pekerjaan yang diinginkan selalu terasa membebani
ChatGPT memang membantu, tetapi belum sempurna
Menghafal opsi dan argumen OpenSSL selalu terasa sulit, sekarang saya cukup memakai GPT
Namun perbedaan kecil antar-sistem operasi masih menjadi masalah kecil