3 poin oleh GN⁺ 2023-07-31 | 1 komentar | Bagikan ke WhatsApp
  • 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, dan ffprobe, 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+f atau cmd+f untuk 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, -i adalah flag untuk menentukan file input, dan input_file.ext adalah file target
    • Pada -c:v prores, -c:v menentukan encoding stream video, dan prores adalah codec yang akan digunakan
  • Nama file output diletakkan di akhir perintah, dan ditentukan lewat nama file tanpa flag output terpisah
  • ffmpeg menyimpan video, sedangkan ffplay dapat 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

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, .mp4 bisa secara default disetel ke encoding H.264
  • "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
  • "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 copy jika yakin ekstensi akan melakukan encoding otomatis ke codec yang benar
  • "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 copy yang menyalin stream file secara langsung

Filtergraph, stream mapping, dan codec bawaan

  • Saat menjalankan pekerjaan batch FFmpeg di dalam loop, Anda bisa menambahkan -nostdin sebelum input untuk menimpa perilaku default interaksi standard input
    • Contoh: ffmpeg -nostdin -i input_file ...
  • FFmpeg secara otomatis menetapkan nilai bawaan codec dan parameter codec berdasarkan format file output
    • .avi: audio mp3, video mpeg4
    • .mkv: audio ac3, video H.264
    • .mov: audio AAC, video H.264
    • .mp4: audio AAC, video H.264
    • .mpg: audio mp2, video mpeg1video
    • .mxf: audio pcm_s16le, video mpeg2video
    • .wav: audio pcm_s16le
  • Filtergraph adalah gabungan nama filter dan opsi yang diletakkan setelah -vf atau -af
    • -vf adalah alias dari -filter:v
    • Contoh filter video adalah hflip, dan contoh filter audio adalah amerge
    • 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_complex alih-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:v memilih semua stream video dari file input pertama
    • -map 0:3 memilih stream keempat dari file input pertama
    • -map 0:a:2 memilih 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

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 0 harus 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 1 dan -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 OriginatorReference maksimal 32 karakter
  • Saat me-rewrap video codec DV ke file .dv, gunakan -f rawvideo -c:v copy untuk 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 0 Proxy, 1 LT, 2 Standard, 3 HQ
    • Kontainer ProRes yang didukung FFmpeg adalah QuickTime .mov, Matroska .mkv, MXF .mxf
  • Contoh transcoding H.264 adalah -c:v libx264 -pix_fmt yuv420p -c:a aac
    • Nilai default libx264 adalah preset medium dan CRF 23
    • -pix_fmt yuv420p menetapkan 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”
  • Encoding H.264/H.265 berbasis GPU Nvidia menggunakan h264_nvenc atau hevc_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 libx265 adalah preset medium dan CRF 28
    • CRF 28 pada H.265 setara dengan CRF 23 pada H.264, dan ukuran file bisa menjadi sekitar setengahnya
  • Contoh lossless untuk preservasi adalah perintah yang menaruh FFV1 Version 3 ke dalam kontainer Matroska sambil membuat framemd5 input
    • -map 0 memetakan semua stream
    • -dn mengecualikan stream data yang tidak diizinkan oleh Matroska
    • -slicecrc 1 menambahkan informasi CRC agar decoder dapat mendeteksi slice yang rusak
    • -f framemd5 -an menghasilkan 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, -an dapat 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 yadif sebelum 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
  • 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 libx264 atau libx265, jadi tidak bisa ditambahkan tanpa re-encoding
  • Perubahan kecepatan menggunakan setpts dan atempo secara bersamaan
    • Contohnya adalah membuat salinan pendekatan PAL yang mengubah 24fps menjadi 25fps sambil mempertahankan pitch audio
  • Efek fade menggunakan filter fade dan afade, dan karena penggunaan filter, video serta audio harus di-encode ulang
  • Ekstraksi audio menggunakan -c:a copy -vn untuk mengambil stream audio tanpa kehilangan dan tanpa video
  • Menggabungkan dua trek audio menggunakan amerge dan -filter_complex
    • Ini bisa berguna untuk proses lanjutan yang mengharapkan satu trek audio, seperti caption otomatis YouTube
    • Untuk memastikan trek yang diinginkan, disarankan menjalankan ffprobe sebelum 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 concat dan -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 scale sebelum concat, dan saat menggabungkan SD dengan HD, SD dapat diproses dengan pillarbox
  • Pemecahan file ditangani dengan segment muxer
    • -segment_time 60 membuat segmen dengan durasi maksimum 60 detik
    • %03d membuat 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 -5 adalah 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
    • -57dB disajikan 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 silenceremove lebih cocok untuk menghapus keheningan di awal, audio dibalik lalu dikembalikan lagi

Pemrosesan video interlaced

  • Saat membuat access file HD H.264 dari sumber SD NTSC, gunakan yadif, scale, pad, dan format=yuv420p bersama-sama
    • yadif adalah filter deinterlace
    • scale=1440:1080:flags=lanczos menyesuaikan gambar menjadi 1440x1080
    • pad=1920:1080:(ow-iw)/2:(oh-ih)/2 menambahkan padding agar input 4:3 sesuai dengan frame output 16:9
  • Contoh deinterlace umum adalah -vf "yadif,format=yuv420p"
    • format=yuv420p menentukan subsampling kroma 4:2:0 demi kompatibilitas pemutaran H.264
    • Selain yadif, FFmpeg juga memiliki deinterlacer bwdif, w3fdif, kerndeint, dan nnedi
  • 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
    • idet mendeteksi urutan field
    • bwdif secara 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=tff atau setfield=bff
    • Karena menggunakan filter video, -c copy tidak bisa dipakai dan perlu re-encoding
  • 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, dan y
    • x=(w-text_w)/2:y=(h-text_h)/2 menempatkannya di tengah tanpa bergantung pada ukuran video
  • Watermark gambar bisa ditempatkan di kanan atas dengan overlay=main_w-overlay_w-5:5
  • Burn-in timecode menggunakan opsi timecode, box, boxcolor, dan rate dari drawtext
    • Timecode awal berformat hh:mm:ss[:;.]ff
  • Untuk menyematkan file subtitle, gunakan -i subtitles_file -c copy -c:s mov_text
    • mov_text bekerja pada kontainer MP4 dan MOV
    • Format yang didukung kontainer MKV adalah ASS, SRT, dan SSA
  • 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, dan scale
  • 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

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 image2 adalah 25fps
    • %06d membaca nama file bernomor enam digit secara berurutan naik
  • 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 lavfi dan filter, Anda bisa memvisualisasikan bit depth audio, grafik desibel, piksel di luar broadcast range, dan menampilkan vectorscope
  • tblend=all_mode=difference128 dan hstack menampilkan perbedaan temporal dua video input secara berdampingan
  • xstack digunakan untuk membuat jendela output yang menumpuk beberapa sumber video secara vertikal atau horizontal, dan berguna untuk tujuan yang sama seperti jendela output yang dipakai di vrecord
  • Contoh OCR menggunakan filter ocr dan drawtext untuk 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 .sh dan loop for
    • Contoh: for file in *.mxf; do ffmpeg -i "$file" -map 0 -c copy "${file%.mxf}.mov"; done
    • File .sh dan file .mxf yang 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 \;
  • Di Windows, pemrosesan batch dilakukan dengan skrip PowerShell .ps1
    • Contohnya membuat daftar file .mp4 lalu me-remux masing-masing file dengan mengganti ekstensinya menjadi .mkv
    • Agar ffmpeg bisa dipanggil tanpa path lengkap, konfigurasinya harus benar
  • 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 -map dan -c copy -f md5
    • Ini digunakan untuk memverifikasi integritas informasi A/V secara terpisah dari perubahan metadata kontainer
  • streamhash menghasilkan 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.gz menggunakan ffprobe -f lavfi serta signalstats, 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 readeia608 dan ffprobe

File uji dan contoh FFmpeg lainnya

  • Video uji dapat dibuat atau diputar dengan input lavfi seperti mandelbrot, smptebars, testsrc, dan smptehdbars
    • 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=5 dan pcm_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 dengan ffmpeg serta -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:0 dan -map 0:a:0
  • Penggabungan trek audio dan video memakai -map 0:v -map 1:a -c copy untuk 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 instalasi dvdauthor
  • CSV untuk deteksi adegan berbasis YDIF mengeluarkan nilai lavfi.signalstats.YDIF dari ffprobe dan signalstats
  • 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

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
    • -B adalah 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
  • 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 -J atau cdparanoia -Q
    • Untuk mengoreksi saat ripping dengan Cdda2wav, tambahkan flag -T
  • 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
  • Alat flac adalah 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 --decode sebagai pengganti --best

1 komentar

 
GN⁺ 2023-07-31
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

    • Kalau begitu pasti mereka menyumbang jumlah yang cukup besar, kan?
      https://ffmpeg.org/donations.html
    • Bukan “Fabian Fabrice”, melainkan Fabrice Bellard
      Dia juga pembuat QEMU, TCC, QuickJS, dan lainnya
    • Tidak ada orang seperti dia. Tidak ada yang berada di liga yang sama dengan Fabrice Bellard, bahkan sepertinya tidak ada yang memainkan permainan yang sama sejak awal :-)
      Serius, pada momen mana pun, jumlah perangkat yang menjalankan kode yang ia tulis benar-benar tidak masuk akal
    • Sebagai catatan, “FF” dalam “FFmpeg” berarti “fast forward”
    • Saya suka ffmpeg, tapi performa ARM perlu ditingkatkan
  • 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

    • Akan sangat bagus kalau ada wrapper ffmpeg saja dengan antarmuka command-line yang lebih baik
      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

    • Perintah pemotongan di tautan kedua menurut pengalaman saya tidak ideal
      Entah kenapa, ffmpeg berperilaku berbeda tergantung apakah flag -ss dan -t/-to diletakkan sebelum atau sesudah -i, dan dalam kasus saya meletakkannya sebelum lebih berhasil
      Sumber aslinya juga punya masalah yang sama
    • ffmpeg.guide terlihat bagus, tapi saya merasa ffmpeg sendiri seharusnya punya sesuatu yang lebih baik
      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
    • ffmpeg.guide benar-benar bagus. Apakah ada yang serupa untuk ImageMagick?
    • Pakai saja ffmpeg-python
  • 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

    • Saya pernah menerapkannya otomatis pada koleksi video besar; meski terlihat baik-baik saja pada video uji, pengaturan CRF-nya lemah sehingga kualitasnya di bawah ekspektasi
      Anggap saja ini peringatan untuk memverifikasi beberapa video sebelum menghapus sumber aslinya
      Namun kalau hanya 300GB, penyimpanan sudah cukup murah, jadi simpan saja aslinya
    • Salah satu alasan masih memilih H.264 adalah karena hardware lama atau kelas murah sering tidak punya decoding hardware H.265
      Selain itu, untuk dipakai di Plex tanpa transcoding, opsi itu juga lebih mudah di homelab saya
  • Panduan ini merekomendasikan yadif sebagai filter deinterlacing, tapi di mata saya w3fdif terlihat lebih baik
    Ia 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

    • Ada versi lanjutannya: https://github.com/HomeOfVapourSynthEvolution/VapourSynth-Bw...
      Kalau memang akan re-encode, lebih baik sekalian pakai QTGMC
    • Seperti disebutkan sebelumnya, w3fdif pada umumnya sudah digantikan oleh bwdif
      w3fdif bisa menimbulkan efek berkilau, sedangkan yadif tidak; jadi bwdif bekerja seperti yadif sambil menggunakan field matching w3fdif yang lebih baik
    • bwdif adalah hybrid dari yadif dan w3fdif
  • Hambatan 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

    • Saya kira sebagian besar situs konversi file seperti itu strukturnya adalah ffmpeg yang ditaruh di atas sesuatu seperti nginx
  • 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?

    • Sekitar 17 tahun lalu saya pernah menulis filter DirectShow untuk WindowsMobile, jadi saya cukup memahami codec dan container
      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

    • Berkat ChatGPT, argumen dan opsi banyak tool command line menjadi lebih mudah digunakan
      Menghafal opsi dan argumen OpenSSL selalu terasa sulit, sekarang saya cukup memakai GPT
    • Berkat ChatGPT, ffmpeg benar-benar menjadi jauh lebih mudah didekati
      Namun perbedaan kecil antar-sistem operasi masih menjadi masalah kecil